trema 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -1
- data/Doxyfile +1 -1
- data/Gemfile +18 -6
- data/README.md +112 -5
- data/Rakefile +3 -1
- data/Rantfile +88 -1
- data/bin/trema +248 -0
- data/bin/trema-config +59 -0
- data/cruise.rb +1 -1
- data/features/example.dumper.feature +45 -65
- data/features/example.hello_trema.feature +21 -0
- data/features/example.learning_switch.feature +26 -28
- data/features/example.list_switches.feature +19 -33
- data/features/example.message.echo_reply.feature +10 -10
- data/features/example.message.echo_request.feature +2 -2
- data/features/example.message.features_request.feature +6 -5
- data/features/example.message.hello.feature +47 -13
- data/features/example.message.set_config.feature +4 -4
- data/features/example.message.vendor-action.feature +23 -0
- data/features/example.multi_learning_switch.feature +14 -42
- data/features/example.packet_in.feature +31 -0
- data/features/example.packetin_filter_config.feature +11 -7
- data/features/example.patch_panel.feature +29 -0
- data/features/example.repeater_hub.feature +43 -40
- data/features/example.switch_info.feature +51 -0
- data/features/example.switch_monitor.feature +24 -42
- data/features/packetin_filter.feature +28 -22
- data/features/step_definitions/misc_steps.rb +19 -8
- data/features/step_definitions/send_packets_steps.rb +1 -10
- data/features/step_definitions/stats_steps.rb +4 -4
- data/features/support/env.rb +2 -1
- data/features/support/hooks.rb +35 -2
- data/features/switch_manager.feature +18 -12
- data/features/trema-config.feature +26 -39
- data/features/trema.dump_flows.feature +26 -12
- data/features/trema.help.feature +26 -0
- data/features/trema.kill.feature +39 -41
- data/features/trema.killall.feature +23 -23
- data/features/trema.reset_stats.feature +50 -10
- data/features/trema.run.feature +28 -39
- data/features/trema.send_packets.feature +29 -40
- data/features/trema.show_stats.feature +30 -33
- data/features/trema.up.feature +33 -0
- data/features/trema.version.feature +9 -0
- data/ruby/extconf.rb +7 -0
- data/ruby/trema/aggregate-stats-reply.rb +3 -3
- data/ruby/trema/app.rb +5 -1
- data/ruby/trema/barrier-request.c +55 -30
- data/ruby/trema/cli.rb +8 -8
- data/ruby/trema/command.rb +1 -3
- data/ruby/trema/command/dump_flows.rb +5 -24
- data/ruby/trema/command/kill.rb +31 -36
- data/ruby/trema/command/killall.rb +1 -19
- data/{features/step_definitions/kill_steps.rb → ruby/trema/command/netns.rb} +13 -5
- data/ruby/trema/command/reset_stats.rb +3 -23
- data/ruby/trema/command/ruby.rb +2 -19
- data/ruby/trema/command/run.rb +6 -27
- data/ruby/trema/command/send_packets.rb +6 -90
- data/ruby/trema/command/show_stats.rb +21 -40
- data/ruby/trema/command/up.rb +5 -26
- data/ruby/trema/command/version.rb +1 -5
- data/ruby/trema/controller.c +14 -16
- data/ruby/trema/custom-switch.rb +56 -0
- data/ruby/trema/desc-stats-reply.rb +5 -5
- data/ruby/trema/dsl/configuration.rb +4 -0
- data/{features/step_definitions/up_steps.rb → ruby/trema/dsl/custom-switch.rb} +18 -4
- data/ruby/trema/dsl/netns.rb +78 -0
- data/ruby/trema/dsl/parser.rb +2 -0
- data/ruby/trema/dsl/runner.rb +8 -0
- data/ruby/trema/dsl/syntax.rb +18 -0
- data/ruby/trema/echo-reply.h +2 -2
- data/ruby/trema/echo-request.c +3 -5
- data/ruby/trema/enqueue.rb +2 -2
- data/ruby/trema/error.c +3 -3
- data/ruby/trema/executables.rb +26 -2
- data/ruby/trema/features-request.c +3 -5
- data/ruby/trema/flow-removed.c +6 -6
- data/ruby/trema/flow-stats-reply.rb +6 -8
- data/ruby/trema/flow.rb +12 -1
- data/ruby/trema/get-config-request.c +55 -28
- data/ruby/trema/hello.c +3 -5
- data/ruby/trema/host.rb +8 -0
- data/ruby/trema/list-switches-reply.c +1 -1
- data/ruby/trema/mac.rb +1 -1
- data/ruby/trema/match.c +15 -14
- data/ruby/trema/monkey-patch/module/deprecation.rb +0 -2
- data/ruby/trema/netns.rb +127 -0
- data/ruby/trema/ordered-hash.rb +5 -4
- data/ruby/trema/packet-in.c +136 -113
- data/ruby/trema/packet-queue.rb +9 -9
- data/ruby/trema/packetin-filter.rb +1 -1
- data/ruby/trema/phost.rb +16 -7
- data/ruby/trema/port-mod.c +6 -5
- data/ruby/trema/port-stats-reply.rb +2 -2
- data/ruby/trema/process.rb +29 -0
- data/ruby/trema/queue-stats-reply.rb +2 -4
- data/ruby/trema/send-out-port.rb +5 -3
- data/ruby/trema/set-eth-addr.rb +4 -0
- data/ruby/trema/set-ip-addr.rb +4 -2
- data/ruby/trema/set-ip-dst-addr.rb +2 -1
- data/ruby/trema/set-ip-src-addr.rb +2 -1
- data/ruby/trema/set-ip-tos.rb +3 -2
- data/ruby/trema/set-transport-port.rb +3 -2
- data/ruby/trema/set-vlan-priority.rb +3 -2
- data/ruby/trema/set-vlan-vid.rb +5 -4
- data/ruby/trema/shell/reset_stats.rb +2 -1
- data/ruby/trema/shell/run.rb +1 -1
- data/ruby/trema/shell/send_packets.rb +1 -1
- data/ruby/trema/shell/show_stats.rb +1 -1
- data/ruby/trema/stats-helper.rb +3 -3
- data/ruby/trema/stats-reply.c +26 -17
- data/ruby/trema/stats-request.c +39 -41
- data/ruby/trema/switch-daemon.rb +36 -31
- data/ruby/trema/switch.c +1 -1
- data/ruby/trema/table-stats-reply.rb +1 -1
- data/ruby/trema/timers.rb +13 -13
- data/ruby/trema/trema.c +3 -3
- data/ruby/trema/tremashark.rb +9 -2
- data/ruby/trema/util.rb +39 -15
- data/ruby/trema/vendor-action.rb +8 -3
- data/ruby/trema/vendor-stats-reply.rb +4 -6
- data/ruby/trema/vendor.c +1 -1
- data/ruby/trema/version.rb +1 -1
- data/spec/trema/barrier-request_spec.rb +47 -37
- data/spec/trema/controller_spec.rb +1 -0
- data/spec/trema/dsl/runner_spec.rb +8 -3
- data/spec/trema/dsl/vhost_spec.rb +8 -8
- data/spec/trema/echo-request_spec.rb +1 -0
- data/spec/trema/features-request_spec.rb +1 -0
- data/spec/trema/flow-removed_spec.rb +9 -9
- data/spec/trema/get-config-request_spec.rb +51 -39
- data/spec/trema/match_spec.rb +1 -1
- data/spec/trema/openflow-error_spec.rb +11 -11
- data/spec/trema/packet-out_spec.rb +5 -5
- data/spec/trema/queue-get-config-reply_spec.rb +1 -1
- data/spec/trema/queue-get-config-request_spec.rb +1 -1
- data/spec/trema/set-eth-dst-addr_spec.rb +1 -1
- data/spec/trema/set-eth-src-addr_spec.rb +1 -1
- data/spec/trema/set-ip-dst-addr_spec.rb +1 -0
- data/spec/trema/set-ip-src-addr_spec.rb +1 -0
- data/spec/trema/set-ip-tos_spec.rb +1 -0
- data/spec/trema/set-transport-dst-port_spec.rb +1 -0
- data/spec/trema/set-transport-src-port_spec.rb +1 -0
- data/spec/trema/set-vlan-priority_spec.rb +1 -0
- data/spec/trema/set-vlan-vid_spec.rb +2 -1
- data/spec/trema/stats-reply_spec.rb +38 -36
- data/spec/trema/stats-request_spec.rb +6 -6
- data/spec/trema/strip-vlan-header_spec.rb +1 -0
- data/spec/trema/util_spec.rb +3 -2
- data/spec/trema/vendor-action_spec.rb +9 -8
- data/src/examples/dumper/dumper.c +8 -6
- data/src/examples/dumper/dumper.rb +1 -1
- data/{features/step_definitions/killall_steps.rb → src/examples/hello_trema/hello-trema.rb} +6 -5
- data/src/examples/hello_trema/hello_trema.c +4 -4
- data/src/examples/learning_switch/learning_switch.c +1 -1
- data/src/examples/list_switches/list_switches.c +2 -2
- data/src/examples/match_compare/match-compare.rb +2 -2
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +1 -1
- data/src/examples/multi_learning_switch/multi_learning_switch.c +3 -3
- data/src/examples/openflow_message/README +1 -1
- data/src/examples/openflow_message/echo-request.rb +1 -1
- data/src/examples/openflow_message/features_request.c +21 -21
- data/src/examples/openflow_message/hello.c +1 -3
- data/src/examples/openflow_message/hello.rb +9 -24
- data/src/examples/{hello_trema/hello_trema.rb → openflow_message/vendor-action.rb} +17 -7
- data/src/examples/openflow_message/vendor_action.c +105 -0
- data/src/examples/openflow_switch/hello_switch.c +81 -0
- data/src/examples/packet_in/packet-in.rb +9 -13
- data/src/examples/packetin_filter_config/packetin_filter_config.c +2 -2
- data/src/examples/patch_panel/network.conf +14 -0
- data/src/examples/patch_panel/patch-panel.conf +1 -0
- data/{features/step_definitions/show_stats_steps.rb → src/examples/patch_panel/patch-panel.rb} +29 -13
- data/src/examples/switch_info/{switch_info.rb → switch-info.rb} +2 -2
- data/src/examples/switch_info/switch_info.c +4 -4
- data/src/examples/switch_monitor/switch_monitor.c +3 -3
- data/src/examples/traffic_monitor/counter.c +9 -9
- data/src/examples/traffic_monitor/fdb.c +9 -9
- data/src/lib/arp.h +1 -1
- data/src/lib/buffer.c +4 -3
- data/src/lib/byteorder.c +31 -5
- data/src/lib/byteorder.h +2 -2
- data/src/lib/chibach.c +8 -6
- data/src/lib/daemon.c +29 -3
- data/src/lib/doubly_linked_list.c +6 -1
- data/src/lib/ether.c +1 -1
- data/src/lib/ether.h +1 -1
- data/src/lib/event_handler.c +3 -3
- data/src/lib/hash_table.c +1 -1
- data/src/lib/linked_list.c +50 -2
- data/src/lib/linked_list.h +2 -2
- data/src/lib/log.c +122 -22
- data/src/lib/log.h +13 -9
- data/src/lib/management_interface.c +361 -0
- data/src/lib/management_interface.h +42 -0
- data/src/lib/management_service_interface.c +104 -0
- data/src/lib/management_service_interface.h +136 -0
- data/src/lib/match_table.c +5 -5
- data/src/lib/message_queue.c +5 -3
- data/src/lib/message_queue.h +1 -1
- data/src/lib/messenger.c +73 -39
- data/src/lib/messenger.h +3 -2
- data/src/lib/openflow_application_interface.c +17 -17
- data/src/lib/openflow_message.c +175 -23
- data/src/lib/openflow_message.h +2 -1
- data/src/lib/openflow_switch_interface.c +12 -12
- data/src/lib/packet_parser.c +11 -32
- data/src/lib/packetin_filter_interface.c +5 -5
- data/src/lib/persistent_storage.c +7 -7
- data/src/lib/secure_channel.c +6 -6
- data/src/lib/secure_channel.h +1 -1
- data/src/lib/stat.c +54 -17
- data/src/lib/stat.h +9 -0
- data/src/lib/timer.c +11 -10
- data/src/lib/trema.c +38 -9
- data/src/lib/trema.h +1 -0
- data/src/lib/trema_private.h +6 -0
- data/src/lib/trema_wrapper.c +4 -4
- data/src/lib/trema_wrapper.h +10 -10
- data/src/lib/utility.c +6 -6
- data/src/management/application.c +224 -0
- data/src/management/echo.c +185 -0
- data/src/management/set_logging_level.c +153 -0
- data/src/management/show_stats.c +150 -0
- data/src/management/trema_manager +184 -0
- data/src/packetin_filter/packetin_filter.c +31 -29
- data/src/switch_manager/cookie_table.c +7 -7
- data/src/switch_manager/dpid_table.c +3 -3
- data/src/switch_manager/dpid_table.h +0 -1
- data/src/switch_manager/management_interface.h +0 -1
- data/src/switch_manager/ofpmsg_recv.c +3 -3
- data/src/switch_manager/ofpmsg_recv.h +0 -1
- data/src/switch_manager/ofpmsg_send.c +2 -2
- data/src/switch_manager/ofpmsg_send.h +0 -1
- data/src/switch_manager/secure_channel_listener.c +2 -2
- data/src/switch_manager/secure_channel_receiver.c +2 -2
- data/src/switch_manager/secure_channel_receiver.h +0 -1
- data/src/switch_manager/secure_channel_sender.c +8 -1
- data/src/switch_manager/service_interface.c +5 -4
- data/src/switch_manager/switch.c +79 -53
- data/src/switch_manager/switch_manager.c +24 -22
- data/src/switch_manager/xid_table.c +6 -6
- data/src/switch_manager/xid_table.h +0 -1
- data/src/tremashark/README +4 -3
- data/src/tremashark/packet_capture.c +11 -9
- data/src/tremashark/pcap_queue.c +2 -2
- data/src/tremashark/pcap_queue.h +2 -2
- data/src/tremashark/plugin/packet-trema/Makefile +1 -1
- data/src/tremashark/plugin/packet-trema/Makefile.common +1 -1
- data/src/tremashark/plugin/packet-trema/packet-trema.c +50 -37
- data/src/tremashark/queue.c +5 -4
- data/src/tremashark/queue.h +1 -1
- data/src/tremashark/stdin_relay.c +10 -8
- data/src/tremashark/syslog_relay.c +14 -12
- data/src/tremashark/tremashark.c +15 -18
- data/trema +2 -96
- data/trema-config +2 -52
- data/trema.gemspec +12 -1
- data/unittests/cmockery_trema.h +14 -13
- data/unittests/lib/buffer_test.c +1 -1
- data/unittests/lib/byteorder_test.c +108 -25
- data/unittests/lib/daemon_test.c +141 -5
- data/unittests/lib/doubly_linked_list_test.c +5 -1
- data/unittests/lib/ether_test.c +4 -4
- data/unittests/lib/hash_table_test.c +5 -3
- data/unittests/lib/linked_list_test.c +82 -4
- data/unittests/lib/log_test.c +96 -5
- data/unittests/lib/management_interface_test.c +240 -0
- data/unittests/lib/management_service_interface_test.c +319 -0
- data/unittests/lib/message_queue_test.c +6 -2
- data/unittests/lib/messenger_test.c +167 -2
- data/unittests/lib/openflow_application_interface_test.c +16 -22
- data/unittests/lib/openflow_message_test.c +721 -24
- data/unittests/lib/packet_info_test.c +2 -2
- data/unittests/lib/packet_parser_test.c +15 -16
- data/unittests/lib/packetin_filter_interface_test.c +6 -6
- data/unittests/lib/persistent_storage_test.c +11 -11
- data/unittests/lib/stat_test.c +151 -7
- data/unittests/lib/timer_test.c +1 -1
- data/unittests/lib/trema_private_test.c +2 -2
- data/unittests/lib/trema_test.c +40 -12
- data/unittests/lib/utility_test.c +3 -3
- data/unittests/lib/wrapper_test.c +3 -3
- data/unittests/packetin_filter/packetin_filter_test.c +12 -11
- data/unittests/switch_manager/switch_manager_test.c +29 -22
- metadata +99 -20
- data/features/step_definitions/log_steps.rb +0 -90
- data/features/step_definitions/run_steps.rb +0 -91
- data/features/trema.feature +0 -27
- data/features/tutorial.hello_trema.feature +0 -27
- data/features/tutorial.packet_in.feature +0 -47
- data/features/tutorial.switch_info.feature +0 -55
- data/ruby/trema/command/usage.rb +0 -63
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Management service interface.
|
|
3
|
+
*
|
|
4
|
+
* Author: Yasunobu Chiba
|
|
5
|
+
*
|
|
6
|
+
* Copyright (C) 2012 NEC Corporation
|
|
7
|
+
*
|
|
8
|
+
* This program is free software; you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License, version 2, as
|
|
10
|
+
* published by the Free Software Foundation.
|
|
11
|
+
*
|
|
12
|
+
* This program is distributed in the hope that it will be useful,
|
|
13
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
* GNU General Public License for more details.
|
|
16
|
+
*
|
|
17
|
+
* You should have received a copy of the GNU General Public License along
|
|
18
|
+
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
+
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#ifndef MANAGEMENT_SERVICE_INTERFACE_H
|
|
24
|
+
#define MANAGEMENT_SERVICE_INTERFACE_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include <inttypes.h>
|
|
28
|
+
#include <time.h>
|
|
29
|
+
#include "messenger.h"
|
|
30
|
+
#include "stat.h"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
enum {
|
|
34
|
+
MESSENGER_MANAGEMENT_REQUEST = 0x0020,
|
|
35
|
+
MESSENGER_MANAGEMENT_REPLY,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
enum {
|
|
39
|
+
MANAGEMENT_REQUEST_SUCCEEDED,
|
|
40
|
+
MANAGEMENT_REQUEST_FAILED,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
enum {
|
|
44
|
+
MANAGEMENT_ECHO_REQUEST,
|
|
45
|
+
MANAGEMENT_ECHO_REPLY,
|
|
46
|
+
MANAGEMENT_SET_LOGGING_LEVEL_REQUEST,
|
|
47
|
+
MANAGEMENT_SET_LOGGING_LEVEL_REPLY,
|
|
48
|
+
MANAGEMENT_SHOW_STATS_REQUEST,
|
|
49
|
+
MANAGEMENT_SHOW_STATS_REPLY,
|
|
50
|
+
MANAGEMENT_APPLICATION_REQUEST,
|
|
51
|
+
MANAGEMENT_APPLICATION_REPLY,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
typedef struct {
|
|
56
|
+
uint16_t type;
|
|
57
|
+
uint32_t length;
|
|
58
|
+
} __attribute__( ( packed ) ) management_request_header;
|
|
59
|
+
|
|
60
|
+
typedef struct {
|
|
61
|
+
uint32_t tv_sec;
|
|
62
|
+
uint32_t tv_nsec;
|
|
63
|
+
} timespec_n;
|
|
64
|
+
|
|
65
|
+
typedef struct {
|
|
66
|
+
management_request_header header;
|
|
67
|
+
timespec_n sent_at;
|
|
68
|
+
} __attribute__( ( packed ) ) management_echo_request;
|
|
69
|
+
|
|
70
|
+
typedef struct {
|
|
71
|
+
management_request_header header;
|
|
72
|
+
char level[ LOGGING_LEVEL_STR_LENGTH ];
|
|
73
|
+
} __attribute__( ( packed ) ) management_set_logging_level_request;
|
|
74
|
+
|
|
75
|
+
typedef struct {
|
|
76
|
+
management_request_header header;
|
|
77
|
+
} __attribute__( ( packed ) ) management_show_stats_request;
|
|
78
|
+
|
|
79
|
+
typedef struct {
|
|
80
|
+
management_request_header header;
|
|
81
|
+
uint32_t application_id;
|
|
82
|
+
uint8_t data[ 0 ];
|
|
83
|
+
} __attribute__( ( packed ) ) management_application_request;
|
|
84
|
+
|
|
85
|
+
typedef struct {
|
|
86
|
+
uint16_t type;
|
|
87
|
+
uint8_t status;
|
|
88
|
+
uint8_t flags;
|
|
89
|
+
uint32_t length;
|
|
90
|
+
} __attribute__( ( packed ) ) management_reply_header;
|
|
91
|
+
|
|
92
|
+
typedef struct {
|
|
93
|
+
management_reply_header header;
|
|
94
|
+
timespec_n sent_at;
|
|
95
|
+
timespec_n received_at;
|
|
96
|
+
} __attribute__( ( packed ) ) management_echo_reply;
|
|
97
|
+
|
|
98
|
+
typedef struct {
|
|
99
|
+
management_reply_header header;
|
|
100
|
+
} __attribute__( ( packed ) ) management_set_logging_level_reply;
|
|
101
|
+
|
|
102
|
+
typedef struct {
|
|
103
|
+
management_reply_header header;
|
|
104
|
+
stat_entry entries[ 0 ];
|
|
105
|
+
} __attribute__( ( packed ) ) management_show_stats_reply;
|
|
106
|
+
|
|
107
|
+
typedef struct {
|
|
108
|
+
management_reply_header header;
|
|
109
|
+
uint32_t application_id;
|
|
110
|
+
uint8_t data[ 0 ];
|
|
111
|
+
} __attribute__( ( packed ) ) management_application_reply;
|
|
112
|
+
|
|
113
|
+
typedef void ( *management_application_request_handler )(
|
|
114
|
+
const messenger_context_handle *handle,
|
|
115
|
+
uint32_t application_id,
|
|
116
|
+
void *data,
|
|
117
|
+
size_t data_length,
|
|
118
|
+
void *user_data
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
extern const char *( *get_management_service_name )( const char *service_name );
|
|
123
|
+
extern void ( *set_management_application_request_handler )( management_application_request_handler callback, void *user_data );
|
|
124
|
+
extern management_application_reply *( *create_management_application_reply )( uint8_t status, uint32_t application_id, void *data, size_t data_length );
|
|
125
|
+
extern bool ( *send_management_application_reply )( const messenger_context_handle *handle, const management_application_reply *reply );
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
#endif // MANAGEMENT_SERVICE_INTERFACE_H
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
/*
|
|
132
|
+
* Local variables:
|
|
133
|
+
* c-basic-offset: 2
|
|
134
|
+
* indent-tabs-mode: nil
|
|
135
|
+
* End:
|
|
136
|
+
*/
|
data/src/lib/match_table.c
CHANGED
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
#include <assert.h>
|
|
22
|
+
#include <openflow.h>
|
|
22
23
|
#include <pthread.h>
|
|
23
24
|
#include <stdlib.h>
|
|
24
25
|
#include <string.h>
|
|
25
|
-
#include <openflow.h>
|
|
26
26
|
#include "checks.h"
|
|
27
27
|
#include "match.h"
|
|
28
28
|
#include "match_table.h"
|
|
@@ -53,7 +53,7 @@ typedef struct {
|
|
|
53
53
|
|
|
54
54
|
typedef struct {
|
|
55
55
|
struct ofp_match *match;
|
|
56
|
-
void ( *
|
|
56
|
+
void ( *function )( struct ofp_match, uint16_t, void *, void * );
|
|
57
57
|
void *user_data;
|
|
58
58
|
} match_walker;
|
|
59
59
|
|
|
@@ -277,7 +277,7 @@ exact_match_table_walker( void *key, void *value, void *user_data ) {
|
|
|
277
277
|
return;
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
|
-
void ( *
|
|
280
|
+
void ( *function )( struct ofp_match, uint16_t, void *, void * ) = walker->function;
|
|
281
281
|
|
|
282
282
|
function( entry->match, entry->priority, entry->data, walker->user_data );
|
|
283
283
|
}
|
|
@@ -297,7 +297,7 @@ map_exact_match_table( hash_table *exact_table, struct ofp_match *match, void fu
|
|
|
297
297
|
|
|
298
298
|
static void
|
|
299
299
|
init_wildcards_match_table( list_element **wildcards_table ) {
|
|
300
|
-
assert( wildcards_table != NULL);
|
|
300
|
+
assert( wildcards_table != NULL );
|
|
301
301
|
|
|
302
302
|
create_list( wildcards_table );
|
|
303
303
|
}
|
|
@@ -589,7 +589,7 @@ _map_match_table( struct ofp_match *match, void function( struct ofp_match match
|
|
|
589
589
|
|
|
590
590
|
|
|
591
591
|
void
|
|
592
|
-
foreach_match_table( void function( struct ofp_match, uint16_t, void *, void *), void *user_data ) {
|
|
592
|
+
foreach_match_table( void function( struct ofp_match, uint16_t, void *, void * ), void *user_data ) {
|
|
593
593
|
_map_match_table( NULL, function, user_data );
|
|
594
594
|
}
|
|
595
595
|
|
data/src/lib/message_queue.c
CHANGED
|
@@ -42,7 +42,7 @@ delete_message_queue( message_queue *queue ) {
|
|
|
42
42
|
die( "queue must not be NULL" );
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
while( queue->head != NULL ) {
|
|
45
|
+
while ( queue->head != NULL ) {
|
|
46
46
|
message_queue_element *element = queue->head;
|
|
47
47
|
if ( queue->head->data != NULL ) {
|
|
48
48
|
free_buffer( element->data );
|
|
@@ -122,7 +122,7 @@ peek_message( message_queue *queue ) {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
|
|
125
|
-
void foreach_message_queue( message_queue *queue,
|
|
125
|
+
void foreach_message_queue( message_queue *queue, bool function( buffer *message, void *user_data ), void *user_data ) {
|
|
126
126
|
if ( queue->divider == queue->tail ) {
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
@@ -130,7 +130,9 @@ void foreach_message_queue( message_queue *queue, void function( buffer *message
|
|
|
130
130
|
for ( element = queue->divider->next; element != NULL; element = element->next ) {
|
|
131
131
|
buffer *message = element->data;
|
|
132
132
|
assert( message != NULL );
|
|
133
|
-
function( message, user_data )
|
|
133
|
+
if ( !function( message, user_data ) ) {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
|
data/src/lib/message_queue.h
CHANGED
|
@@ -47,7 +47,7 @@ bool delete_message_queue( message_queue *queue );
|
|
|
47
47
|
bool enqueue_message( message_queue *queue, buffer *message );
|
|
48
48
|
buffer *dequeue_message( message_queue *queue );
|
|
49
49
|
buffer *peek_message( message_queue *queue );
|
|
50
|
-
void foreach_message_queue( message_queue *queue,
|
|
50
|
+
void foreach_message_queue( message_queue *queue, bool function( buffer *message, void *user_data ), void *user_data );
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
#endif // MESSAGE_QUEUE_H
|
data/src/lib/messenger.c
CHANGED
|
@@ -303,7 +303,7 @@ free_message_buffer( message_buffer *buf ) {
|
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
|
|
306
|
-
static void*
|
|
306
|
+
static void *
|
|
307
307
|
get_message_buffer_head( message_buffer *buf ) {
|
|
308
308
|
return ( char * ) buf->buffer + buf->head_offset;
|
|
309
309
|
}
|
|
@@ -419,7 +419,7 @@ send_dump_message( uint16_t dump_type, const char *service_name, const void *dat
|
|
|
419
419
|
*/
|
|
420
420
|
static void
|
|
421
421
|
delete_receive_queue( void *service_name, void *_rq, void *user_data ) {
|
|
422
|
-
debug( "Deleting a receive queue ( service_name = %s, _rq = %p, user_data = %p ).", service_name, _rq, user_data );
|
|
422
|
+
debug( "Deleting a receive queue ( service_name = %s, _rq = %p, user_data = %p ).", ( char * ) service_name, _rq, user_data );
|
|
423
423
|
|
|
424
424
|
receive_queue *rq = _rq;
|
|
425
425
|
messenger_socket *client_socket;
|
|
@@ -533,7 +533,7 @@ create_receive_queue( const char *service_name ) {
|
|
|
533
533
|
assert( service_name != NULL );
|
|
534
534
|
assert( strlen( service_name ) < MESSENGER_SERVICE_NAME_LENGTH );
|
|
535
535
|
|
|
536
|
-
debug( "Creating a receive queue (service_name = %s).", service_name );
|
|
536
|
+
debug( "Creating a receive queue ( service_name = %s ).", service_name );
|
|
537
537
|
|
|
538
538
|
assert( receive_queues != NULL );
|
|
539
539
|
receive_queue *rq = lookup_hash_entry( receive_queues, service_name );
|
|
@@ -553,7 +553,7 @@ create_receive_queue( const char *service_name ) {
|
|
|
553
553
|
|
|
554
554
|
rq->listen_socket = socket( AF_UNIX, SOCK_SEQPACKET, 0 );
|
|
555
555
|
if ( rq->listen_socket == -1 ) {
|
|
556
|
-
error( "Failed to call socket (errno = %s [%d]).", strerror( errno ), errno );
|
|
556
|
+
error( "Failed to call socket ( errno = %s [%d] ).", strerror( errno ), errno );
|
|
557
557
|
xfree( rq );
|
|
558
558
|
return NULL;
|
|
559
559
|
}
|
|
@@ -563,7 +563,7 @@ create_receive_queue( const char *service_name ) {
|
|
|
563
563
|
int ret;
|
|
564
564
|
ret = bind( rq->listen_socket, ( struct sockaddr * ) &rq->listen_addr, sizeof( struct sockaddr_un ) );
|
|
565
565
|
if ( ret == -1 ) {
|
|
566
|
-
error( "Failed to bind (fd = %d, sun_path = %s, errno = %s [%d]).",
|
|
566
|
+
error( "Failed to bind ( fd = %d, sun_path = %s, errno = %s [%d] ).",
|
|
567
567
|
rq->listen_socket, rq->listen_addr.sun_path, strerror( errno ), errno );
|
|
568
568
|
close( rq->listen_socket );
|
|
569
569
|
xfree( rq );
|
|
@@ -572,7 +572,7 @@ create_receive_queue( const char *service_name ) {
|
|
|
572
572
|
|
|
573
573
|
ret = listen( rq->listen_socket, SOMAXCONN );
|
|
574
574
|
if ( ret == -1 ) {
|
|
575
|
-
error( "Failed to listen (fd = %d, sun_path = %s, errno = %s [%d]).",
|
|
575
|
+
error( "Failed to listen ( fd = %d, sun_path = %s, errno = %s [%d] ).",
|
|
576
576
|
rq->listen_socket, rq->listen_addr.sun_path, strerror( errno ), errno );
|
|
577
577
|
close( rq->listen_socket );
|
|
578
578
|
xfree( rq );
|
|
@@ -606,7 +606,7 @@ add_message_callback( const char *service_name, uint8_t message_type, void *call
|
|
|
606
606
|
assert( service_name != NULL );
|
|
607
607
|
assert( callback != NULL );
|
|
608
608
|
|
|
609
|
-
debug( "Adding a message callback (service_name = %s, message_type = %#x, callback = %p).",
|
|
609
|
+
debug( "Adding a message callback ( service_name = %s, message_type = %#x, callback = %p ).",
|
|
610
610
|
service_name, message_type, callback );
|
|
611
611
|
|
|
612
612
|
receive_queue *rq = lookup_hash_entry( receive_queues, service_name );
|
|
@@ -619,6 +619,17 @@ add_message_callback( const char *service_name, uint8_t message_type, void *call
|
|
|
619
619
|
}
|
|
620
620
|
}
|
|
621
621
|
|
|
622
|
+
if ( message_type == MESSAGE_TYPE_REQUEST || message_type == MESSAGE_TYPE_REPLY ) {
|
|
623
|
+
for ( dlist_element *e = rq->message_callbacks->next; e; e = e->next ) {
|
|
624
|
+
receive_queue_callback *cb = e->data;
|
|
625
|
+
if ( cb->message_type == message_type ) {
|
|
626
|
+
warn( "Multiple message_requested/replied handler is not supported. ( service_name = %s, message_type = %#x, callback = %p )",
|
|
627
|
+
service_name, message_type, callback );
|
|
628
|
+
break;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
|
|
622
633
|
receive_queue_callback *cb = xmalloc( sizeof( receive_queue_callback ) );
|
|
623
634
|
cb->message_type = message_type;
|
|
624
635
|
cb->function = callback;
|
|
@@ -633,7 +644,7 @@ _add_message_received_callback( const char *service_name, const callback_message
|
|
|
633
644
|
assert( service_name != NULL );
|
|
634
645
|
assert( callback != NULL );
|
|
635
646
|
|
|
636
|
-
debug( "Adding a message received callback (service_name = %s, callback = %p).",
|
|
647
|
+
debug( "Adding a message received callback ( service_name = %s, callback = %p ).",
|
|
637
648
|
service_name, callback );
|
|
638
649
|
|
|
639
650
|
return add_message_callback( service_name, MESSAGE_TYPE_NOTIFY, callback );
|
|
@@ -748,14 +759,11 @@ bool ( *delete_message_replied_callback )( const char *service_name, void ( *cal
|
|
|
748
759
|
|
|
749
760
|
|
|
750
761
|
static bool
|
|
751
|
-
|
|
762
|
+
rename_message_callback( const char *old_service_name, const char *new_service_name ) {
|
|
752
763
|
assert( old_service_name != NULL );
|
|
753
764
|
assert( new_service_name != NULL );
|
|
754
765
|
assert( receive_queues != NULL );
|
|
755
766
|
|
|
756
|
-
debug( "Renaming a message received callback ( old_service_name = %s, new_service_name = %s ).",
|
|
757
|
-
old_service_name, new_service_name );
|
|
758
|
-
|
|
759
767
|
receive_queue *old_rq = lookup_hash_entry( receive_queues, old_service_name );
|
|
760
768
|
receive_queue *new_rq = lookup_hash_entry( receive_queues, new_service_name );
|
|
761
769
|
dlist_element *element;
|
|
@@ -779,9 +787,35 @@ _rename_message_received_callback( const char *old_service_name, const char *new
|
|
|
779
787
|
|
|
780
788
|
return true;
|
|
781
789
|
}
|
|
790
|
+
|
|
791
|
+
static bool
|
|
792
|
+
_rename_message_received_callback( const char *old_service_name, const char *new_service_name ) {
|
|
793
|
+
assert( old_service_name != NULL );
|
|
794
|
+
assert( new_service_name != NULL );
|
|
795
|
+
assert( receive_queues != NULL );
|
|
796
|
+
|
|
797
|
+
debug( "Renaming a message received callback ( old_service_name = %s, new_service_name = %s ).",
|
|
798
|
+
old_service_name, new_service_name );
|
|
799
|
+
|
|
800
|
+
return rename_message_callback( old_service_name, new_service_name );
|
|
801
|
+
}
|
|
782
802
|
bool ( *rename_message_received_callback )( const char *old_service_name, const char *new_service_name ) = _rename_message_received_callback;
|
|
783
803
|
|
|
784
804
|
|
|
805
|
+
static bool
|
|
806
|
+
_rename_message_requested_callback( const char *old_service_name, const char *new_service_name ) {
|
|
807
|
+
assert( old_service_name != NULL );
|
|
808
|
+
assert( new_service_name != NULL );
|
|
809
|
+
assert( receive_queues != NULL );
|
|
810
|
+
|
|
811
|
+
debug( "Renaming a message requested callback ( old_service_name = %s, new_service_name = %s ).",
|
|
812
|
+
old_service_name, new_service_name );
|
|
813
|
+
|
|
814
|
+
return rename_message_callback( old_service_name, new_service_name );
|
|
815
|
+
}
|
|
816
|
+
bool ( *rename_message_requested_callback )( const char *old_service_name, const char *new_service_name ) = _rename_message_requested_callback;
|
|
817
|
+
|
|
818
|
+
|
|
785
819
|
static size_t
|
|
786
820
|
message_buffer_remain_bytes( message_buffer *buf ) {
|
|
787
821
|
assert( buf != NULL );
|
|
@@ -843,7 +877,7 @@ send_queue_connect( send_queue *sq ) {
|
|
|
843
877
|
debug( "Connection established ( service_name = %s, sun_path = %s, fd = %d ).",
|
|
844
878
|
sq->service_name, sq->server_addr.sun_path, sq->server_socket );
|
|
845
879
|
|
|
846
|
-
socklen_t optlen = sizeof
|
|
880
|
+
socklen_t optlen = sizeof( sq->socket_buffer_size );
|
|
847
881
|
if ( getsockopt( sq->server_socket, SOL_SOCKET, SO_SNDBUF, &sq->socket_buffer_size, &optlen ) == -1 ) {
|
|
848
882
|
sq->socket_buffer_size = 0;
|
|
849
883
|
}
|
|
@@ -872,7 +906,7 @@ send_queue_connect_timer( send_queue *sq ) {
|
|
|
872
906
|
}
|
|
873
907
|
if ( sq->running_timer ) {
|
|
874
908
|
sq->running_timer = false;
|
|
875
|
-
delete_timer_event( ( timer_callback )send_queue_connect_timeout, sq );
|
|
909
|
+
delete_timer_event( ( timer_callback ) send_queue_connect_timeout, sq );
|
|
876
910
|
}
|
|
877
911
|
|
|
878
912
|
int ret = send_queue_connect( sq );
|
|
@@ -893,10 +927,10 @@ send_queue_connect_timer( send_queue *sq ) {
|
|
|
893
927
|
interval.it_interval.tv_sec = 0;
|
|
894
928
|
interval.it_interval.tv_nsec = 0;
|
|
895
929
|
interval.it_value = sq->reconnect_interval;
|
|
896
|
-
add_timer_event_callback( &interval, ( void (*)(void *) )send_queue_connect_timeout, ( void * ) sq );
|
|
930
|
+
add_timer_event_callback( &interval, ( void ( * )( void * ) ) send_queue_connect_timeout, ( void * ) sq );
|
|
897
931
|
sq->running_timer = true;
|
|
898
932
|
|
|
899
|
-
debug( "refused_count = %d, reconnect_interval = %
|
|
933
|
+
debug( "refused_count = %d, reconnect_interval = %" PRIu64 ".", sq->refused_count, ( int64_t ) sq->reconnect_interval.tv_sec );
|
|
900
934
|
return 0;
|
|
901
935
|
|
|
902
936
|
case 1:
|
|
@@ -908,7 +942,7 @@ send_queue_connect_timer( send_queue *sq ) {
|
|
|
908
942
|
|
|
909
943
|
default:
|
|
910
944
|
die( "Got invalid value from send_queue_connect_timer( send_queue* )." );
|
|
911
|
-
}
|
|
945
|
+
}
|
|
912
946
|
|
|
913
947
|
return -1;
|
|
914
948
|
}
|
|
@@ -1003,7 +1037,7 @@ static bool
|
|
|
1003
1037
|
push_message_to_send_queue( const char *service_name, const uint8_t message_type, const uint16_t tag, const void *data, size_t len ) {
|
|
1004
1038
|
assert( service_name != NULL );
|
|
1005
1039
|
|
|
1006
|
-
debug( "Pushing a message to send queue ( service_name = %s, message_type = %#x, tag = %#x, data = %p, len = %
|
|
1040
|
+
debug( "Pushing a message to send queue ( service_name = %s, message_type = %#x, tag = %#x, data = %p, len = %zu ).",
|
|
1007
1041
|
service_name, message_type, tag, data, len );
|
|
1008
1042
|
|
|
1009
1043
|
message_header header;
|
|
@@ -1063,7 +1097,7 @@ static bool
|
|
|
1063
1097
|
_send_message( const char *service_name, const uint16_t tag, const void *data, size_t len ) {
|
|
1064
1098
|
assert( service_name != NULL );
|
|
1065
1099
|
|
|
1066
|
-
debug( "Sending a message ( service_name = %s, tag = %#x, data = %p, len = %
|
|
1100
|
+
debug( "Sending a message ( service_name = %s, tag = %#x, data = %p, len = %zu ).",
|
|
1067
1101
|
service_name, tag, data, len );
|
|
1068
1102
|
|
|
1069
1103
|
return push_message_to_send_queue( service_name, MESSAGE_TYPE_NOTIFY, tag, data, len );
|
|
@@ -1096,7 +1130,7 @@ _send_request_message( const char *to_service_name, const char *from_service_nam
|
|
|
1096
1130
|
assert( to_service_name != NULL );
|
|
1097
1131
|
assert( from_service_name != NULL );
|
|
1098
1132
|
|
|
1099
|
-
debug( "Sending a request message ( to_service_name = %s, from_service_name = %s, tag = %#x, data = %p, len = %
|
|
1133
|
+
debug( "Sending a request message ( to_service_name = %s, from_service_name = %s, tag = %#x, data = %p, len = %zu, user_data = %p ).",
|
|
1100
1134
|
to_service_name, from_service_name, tag, data, len, user_data );
|
|
1101
1135
|
|
|
1102
1136
|
char *request_data, *p;
|
|
@@ -1130,7 +1164,7 @@ _send_reply_message( const messenger_context_handle *handle, const uint16_t tag,
|
|
|
1130
1164
|
assert( handle != NULL );
|
|
1131
1165
|
|
|
1132
1166
|
debug( "Sending a reply message ( handle = [ transaction_id = %#x, service_name_len = %u, service_name = %s ], "
|
|
1133
|
-
"tag = %#x, data = %p, len = %
|
|
1167
|
+
"tag = %#x, data = %p, len = %zu ).",
|
|
1134
1168
|
handle->transaction_id, handle->service_name_len, handle->service_name, tag, data, len );
|
|
1135
1169
|
|
|
1136
1170
|
char *reply_data;
|
|
@@ -1255,7 +1289,7 @@ add_recv_queue_client_fd( receive_queue *rq, int fd ) {
|
|
|
1255
1289
|
|
|
1256
1290
|
static void
|
|
1257
1291
|
on_accept( int fd, void *data ) {
|
|
1258
|
-
receive_queue *rq = ( receive_queue* )data;
|
|
1292
|
+
receive_queue *rq = ( receive_queue * ) data;
|
|
1259
1293
|
|
|
1260
1294
|
assert( rq != NULL );
|
|
1261
1295
|
|
|
@@ -1357,7 +1391,7 @@ pull_from_recv_queue( receive_queue *rq, uint8_t *message_type, uint16_t *tag, v
|
|
|
1357
1391
|
message_header *header;
|
|
1358
1392
|
|
|
1359
1393
|
if ( rq->buffer->data_length < sizeof( message_header ) ) {
|
|
1360
|
-
debug( "Queue length is smaller than a message header ( queue length = %
|
|
1394
|
+
debug( "Queue length is smaller than a message header ( queue length = %zu ).", rq->buffer->data_length );
|
|
1361
1395
|
return 0;
|
|
1362
1396
|
}
|
|
1363
1397
|
|
|
@@ -1367,7 +1401,7 @@ pull_from_recv_queue( receive_queue *rq, uint8_t *message_type, uint16_t *tag, v
|
|
|
1367
1401
|
assert( length != 0 );
|
|
1368
1402
|
assert( length < messenger_recv_queue_length );
|
|
1369
1403
|
if ( rq->buffer->data_length < length ) {
|
|
1370
|
-
debug( "Queue length is smaller than message length ( queue length = %
|
|
1404
|
+
debug( "Queue length is smaller than message length ( queue length = %zu, message length = %u ).",
|
|
1371
1405
|
rq->buffer->data_length, length );
|
|
1372
1406
|
return 0;
|
|
1373
1407
|
}
|
|
@@ -1378,7 +1412,7 @@ pull_from_recv_queue( receive_queue *rq, uint8_t *message_type, uint16_t *tag, v
|
|
|
1378
1412
|
memcpy( data, header->value, *len > maxlen ? maxlen : *len );
|
|
1379
1413
|
truncate_message_buffer( rq->buffer, length );
|
|
1380
1414
|
|
|
1381
|
-
debug( "A message is retrieved from receive queue ( message_type = %#x, tag = %#x, len = %
|
|
1415
|
+
debug( "A message is retrieved from receive queue ( message_type = %#x, tag = %#x, len = %zu, data = %p ).",
|
|
1382
1416
|
*message_type, *tag, *len, data );
|
|
1383
1417
|
|
|
1384
1418
|
return 1;
|
|
@@ -1400,7 +1434,7 @@ call_message_callbacks( receive_queue *rq, const uint8_t message_type, const uin
|
|
|
1400
1434
|
dlist_element *element;
|
|
1401
1435
|
receive_queue_callback *cb;
|
|
1402
1436
|
|
|
1403
|
-
debug( "Calling message callbacks ( service_name = %s, message_type = %#x, tag = %#x, data = %p, len = %
|
|
1437
|
+
debug( "Calling message callbacks ( service_name = %s, message_type = %#x, tag = %#x, data = %p, len = %zu ).",
|
|
1404
1438
|
rq->service_name, message_type, tag, data, len );
|
|
1405
1439
|
|
|
1406
1440
|
for ( element = rq->message_callbacks->next; element; element = element->next ) {
|
|
@@ -1414,7 +1448,7 @@ call_message_callbacks( receive_queue *rq, const uint8_t message_type, const uin
|
|
|
1414
1448
|
void ( *received_callback )( uint16_t tag, void *data, size_t len );
|
|
1415
1449
|
received_callback = cb->function;
|
|
1416
1450
|
|
|
1417
|
-
debug( "Calling a callback ( %p ) for MESSAGE_TYPE_NOTIFY (%#x) ( tag = %#x, data = %p, len = %
|
|
1451
|
+
debug( "Calling a callback ( %p ) for MESSAGE_TYPE_NOTIFY (%#x) ( tag = %#x, data = %p, len = %zu ).",
|
|
1418
1452
|
cb->function, message_type, tag, data, len );
|
|
1419
1453
|
|
|
1420
1454
|
received_callback( tag, data, len );
|
|
@@ -1434,7 +1468,7 @@ call_message_callbacks( receive_queue *rq, const uint8_t message_type, const uin
|
|
|
1434
1468
|
header_len = sizeof( messenger_context_handle ) + handle->service_name_len;
|
|
1435
1469
|
requested_data = ( ( char * ) data ) + header_len;
|
|
1436
1470
|
|
|
1437
|
-
debug( "Calling a callback ( %p ) for MESSAGE_TYPE_REQUEST (%#x) ( handle = %p, tag = %#x, requested_data = %p, len = %
|
|
1471
|
+
debug( "Calling a callback ( %p ) for MESSAGE_TYPE_REQUEST (%#x) ( handle = %p, tag = %#x, requested_data = %p, len = %zu ).",
|
|
1438
1472
|
cb->function, message_type, handle, tag, requested_data, len - header_len );
|
|
1439
1473
|
|
|
1440
1474
|
requested_callback( handle, tag, ( void * ) requested_data, len - header_len );
|
|
@@ -1456,7 +1490,7 @@ call_message_callbacks( receive_queue *rq, const uint8_t message_type, const uin
|
|
|
1456
1490
|
context = get_context( reply_handle->transaction_id );
|
|
1457
1491
|
|
|
1458
1492
|
if ( NULL != context ) {
|
|
1459
|
-
debug( "tag = %#x, data = %p, len = %
|
|
1493
|
+
debug( "tag = %#x, data = %p, len = %zu, user_data = %p.",
|
|
1460
1494
|
tag, reply_handle->service_name, len - sizeof( messenger_context_handle ), context->user_data );
|
|
1461
1495
|
replied_callback( tag, reply_handle->service_name, len - sizeof( messenger_context_handle ), context->user_data );
|
|
1462
1496
|
delete_context( context );
|
|
@@ -1476,7 +1510,7 @@ call_message_callbacks( receive_queue *rq, const uint8_t message_type, const uin
|
|
|
1476
1510
|
|
|
1477
1511
|
static void
|
|
1478
1512
|
on_recv( int fd, void *data ) {
|
|
1479
|
-
receive_queue *rq = ( receive_queue* )data;
|
|
1513
|
+
receive_queue *rq = ( receive_queue * ) data;
|
|
1480
1514
|
|
|
1481
1515
|
assert( rq != NULL );
|
|
1482
1516
|
assert( fd >= 0 );
|
|
@@ -1515,11 +1549,11 @@ on_recv( int fd, void *data ) {
|
|
|
1515
1549
|
}
|
|
1516
1550
|
|
|
1517
1551
|
if ( !write_message_buffer( rq->buffer, buf, ( size_t ) recv_len ) ) {
|
|
1518
|
-
warn( "Could not write a message to receive queue due to overflow ( service_name = %s, len = %
|
|
1552
|
+
warn( "Could not write a message to receive queue due to overflow ( service_name = %s, len = %zd ).", rq->service_name, recv_len );
|
|
1519
1553
|
send_dump_message( MESSENGER_DUMP_RECV_OVERFLOW, rq->service_name, buf, ( uint32_t ) recv_len );
|
|
1520
1554
|
}
|
|
1521
1555
|
else {
|
|
1522
|
-
debug( "Pushing a message to receive queue ( service_name = %s, len = %
|
|
1556
|
+
debug( "Pushing a message to receive queue ( service_name = %s, len = %zd ).", rq->service_name, recv_len );
|
|
1523
1557
|
send_dump_message( MESSENGER_DUMP_RECEIVED, rq->service_name, buf, ( uint32_t ) recv_len );
|
|
1524
1558
|
}
|
|
1525
1559
|
}
|
|
@@ -1540,9 +1574,9 @@ get_send_data( send_queue *sq, size_t offset ) {
|
|
|
1540
1574
|
if ( ioctl( sq->server_socket, SIOCOUTQ, &used ) == 0 ) {
|
|
1541
1575
|
if ( used < sq->socket_buffer_size ) {
|
|
1542
1576
|
bucket_size = ( uint32_t ) ( sq->socket_buffer_size - used ) << 1;
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1577
|
+
if ( bucket_size > messenger_bucket_size ) {
|
|
1578
|
+
bucket_size = messenger_bucket_size;
|
|
1579
|
+
}
|
|
1546
1580
|
}
|
|
1547
1581
|
else {
|
|
1548
1582
|
bucket_size = 1;
|
|
@@ -1575,7 +1609,7 @@ on_send_read( int fd, void *data ) {
|
|
|
1575
1609
|
UNUSED( fd );
|
|
1576
1610
|
|
|
1577
1611
|
char buf[ 256 ];
|
|
1578
|
-
send_queue *sq = ( send_queue* )data;
|
|
1612
|
+
send_queue *sq = ( send_queue * ) data;
|
|
1579
1613
|
|
|
1580
1614
|
if ( recv( sq->server_socket, buf, sizeof( buf ), 0 ) <= 0 ) {
|
|
1581
1615
|
send_dump_message( MESSENGER_DUMP_SEND_CLOSED, sq->service_name, NULL, 0 );
|
|
@@ -1600,12 +1634,12 @@ on_send_read( int fd, void *data ) {
|
|
|
1600
1634
|
|
|
1601
1635
|
static void
|
|
1602
1636
|
on_send_write( int fd, void *data ) {
|
|
1603
|
-
send_queue *sq = ( send_queue* )data;
|
|
1637
|
+
send_queue *sq = ( send_queue * ) data;
|
|
1604
1638
|
|
|
1605
1639
|
assert( sq != NULL );
|
|
1606
1640
|
assert( fd >= 0 );
|
|
1607
1641
|
|
|
1608
|
-
debug( "Sending data to remote ( fd = %d, service_name = %s, buffer = %p, data_length = %
|
|
1642
|
+
debug( "Sending data to remote ( fd = %d, service_name = %s, buffer = %p, data_length = %zu ).",
|
|
1609
1643
|
fd, sq->service_name, get_message_buffer_head( sq->buffer ), sq->buffer->data_length );
|
|
1610
1644
|
|
|
1611
1645
|
if ( sq->buffer->data_length < sizeof( message_header ) ) {
|
|
@@ -1641,7 +1675,7 @@ on_send_write( int fd, void *data ) {
|
|
|
1641
1675
|
}
|
|
1642
1676
|
truncate_message_buffer( sq->buffer, sent_total );
|
|
1643
1677
|
if ( err == EMSGSIZE || err == ENOBUFS || err == ENOMEM ) {
|
|
1644
|
-
warn( "Dropping %
|
|
1678
|
+
warn( "Dropping %zu bytes data in send queue ( service_name = %s ).", sq->buffer->data_length, sq->service_name );
|
|
1645
1679
|
truncate_message_buffer( sq->buffer, sq->buffer->data_length );
|
|
1646
1680
|
}
|
|
1647
1681
|
return;
|