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
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
void
|
|
26
26
|
handle_list_switches_reply( const list_element *switches, void *controller ) {
|
|
27
|
-
if ( rb_respond_to( ( VALUE ) controller, rb_intern( "list_switches_reply" ) ) == Qfalse ) {
|
|
27
|
+
if ( rb_respond_to( ( VALUE ) controller, rb_intern( "list_switches_reply" ) ) == Qfalse ) {
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
30
|
VALUE dpids = rb_ary_new();
|
data/ruby/trema/mac.rb
CHANGED
data/ruby/trema/match.c
CHANGED
|
@@ -43,8 +43,7 @@ ofp_match *get_match( VALUE self ) {
|
|
|
43
43
|
|
|
44
44
|
/*
|
|
45
45
|
* Creates a {Match} instance from packet_in's data, the method accepts an
|
|
46
|
-
* additional
|
|
47
|
-
* to don't care and ignore while matching flow entries.
|
|
46
|
+
* additional list of symbols to wildcard set and ignore while matching flow entries.
|
|
48
47
|
*
|
|
49
48
|
* @overload match_from(message, *options)
|
|
50
49
|
*
|
|
@@ -52,7 +51,7 @@ ofp_match *get_match( VALUE self ) {
|
|
|
52
51
|
* def packet_in datapath_id, message
|
|
53
52
|
* send_flow_mod(
|
|
54
53
|
* datapath_id,
|
|
55
|
-
* :match => Match.from( message,
|
|
54
|
+
* :match => Match.from( message, :dl_type, :nw_proto ),
|
|
56
55
|
* :actions => Trema::ActionOutput.new( 2 )
|
|
57
56
|
* )
|
|
58
57
|
* end
|
|
@@ -60,10 +59,10 @@ ofp_match *get_match( VALUE self ) {
|
|
|
60
59
|
* @param [PacketIn] message
|
|
61
60
|
* the {PacketIn}'s message content.
|
|
62
61
|
*
|
|
63
|
-
* @param [optional,
|
|
64
|
-
* If supplied
|
|
62
|
+
* @param [optional, list] options
|
|
63
|
+
* If supplied a comma-separated list of symbol ids indicating fields to be wildcarded.
|
|
65
64
|
*
|
|
66
|
-
* [:
|
|
65
|
+
* [:in_port]
|
|
67
66
|
* the physical port number to wildcard.
|
|
68
67
|
*
|
|
69
68
|
* [:dl_src]
|
|
@@ -117,7 +116,7 @@ match_from( int argc, VALUE *argv, VALUE self ) {
|
|
|
117
116
|
int i;
|
|
118
117
|
for ( i = 0; i < RARRAY_LEN( options ); i++ ) {
|
|
119
118
|
wildcard_id = SYM2ID( RARRAY_PTR( options )[ i ] );
|
|
120
|
-
if ( rb_intern( "
|
|
119
|
+
if ( rb_intern( "in_port" ) == wildcard_id ) {
|
|
121
120
|
wildcards |= OFPFW_IN_PORT;
|
|
122
121
|
}
|
|
123
122
|
if ( rb_intern( "dl_src" ) == wildcard_id ) {
|
|
@@ -166,7 +165,7 @@ match_from( int argc, VALUE *argv, VALUE self ) {
|
|
|
166
165
|
* @example
|
|
167
166
|
* def packet_in datapath_id, message
|
|
168
167
|
* match = Match.new( :dl_type => 0x0800, :nw_src => "192.168.0.1" )
|
|
169
|
-
* if match.compare( ExactMatch.
|
|
168
|
+
* if match.compare( ExactMatch.from( message ) )
|
|
170
169
|
* info "Received packet from 192.168.0.1"
|
|
171
170
|
* end
|
|
172
171
|
* end
|
|
@@ -187,7 +186,7 @@ match_compare( VALUE self, VALUE other ) {
|
|
|
187
186
|
*/
|
|
188
187
|
static VALUE
|
|
189
188
|
match_replace( VALUE self, VALUE other ) {
|
|
190
|
-
memcpy( get_match( self ), get_match( other ), sizeof
|
|
189
|
+
memcpy( get_match( self ), get_match( other ), sizeof( struct ofp_match ) );
|
|
191
190
|
return self;
|
|
192
191
|
}
|
|
193
192
|
|
|
@@ -199,7 +198,7 @@ static VALUE
|
|
|
199
198
|
match_to_s( VALUE self ) {
|
|
200
199
|
char match_str[ 1024 ];
|
|
201
200
|
|
|
202
|
-
match_to_string( get_match( self ), match_str, sizeof
|
|
201
|
+
match_to_string( get_match( self ), match_str, sizeof( match_str ) );
|
|
203
202
|
return rb_str_new2( match_str );
|
|
204
203
|
}
|
|
205
204
|
|
|
@@ -232,7 +231,8 @@ match_dl( VALUE self, uint8_t which ) {
|
|
|
232
231
|
match = get_match( self );
|
|
233
232
|
if ( which ) {
|
|
234
233
|
dl_addr = match->dl_src;
|
|
235
|
-
}
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
236
|
dl_addr = match->dl_dst;
|
|
237
237
|
}
|
|
238
238
|
return rb_funcall( rb_eval_string( "Trema::Mac" ), rb_intern( "new" ), 1, ULL2NUM( mac_to_uint64( dl_addr ) ) );
|
|
@@ -312,7 +312,8 @@ match_nw( VALUE self, uint8_t which ) {
|
|
|
312
312
|
if ( which ) {
|
|
313
313
|
nw_addr = match->nw_src;
|
|
314
314
|
masklen = ( match->wildcards & OFPFW_NW_SRC_MASK ) >> OFPFW_NW_SRC_SHIFT;
|
|
315
|
-
}
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
316
317
|
nw_addr = match->nw_dst;
|
|
317
318
|
masklen = ( match->wildcards & OFPFW_NW_DST_MASK ) >> OFPFW_NW_DST_SHIFT;
|
|
318
319
|
}
|
|
@@ -387,7 +388,7 @@ match_tp_dst( VALUE self ) {
|
|
|
387
388
|
*
|
|
388
389
|
* @param [Hash] options the options hash.
|
|
389
390
|
*
|
|
390
|
-
* @option options [Number] :
|
|
391
|
+
* @option options [Number] :in_port
|
|
391
392
|
* the physical port number to match.
|
|
392
393
|
*
|
|
393
394
|
* @option options [String,Number,Trema::Mac] :dl_src
|
|
@@ -450,7 +451,7 @@ match_init( int argc, VALUE *argv, VALUE self ) {
|
|
|
450
451
|
// Always clear the memory as the unused memory locations are
|
|
451
452
|
// exposed to both the user and the OpenFlow controller.
|
|
452
453
|
Data_Get_Struct( self, struct ofp_match, match );
|
|
453
|
-
memset( match, 0, sizeof
|
|
454
|
+
memset( match, 0, sizeof( *match ) );
|
|
454
455
|
|
|
455
456
|
// Default matches all packets.
|
|
456
457
|
match->wildcards = ( OFPFW_ALL & ~( OFPFW_NW_SRC_MASK | OFPFW_NW_DST_MASK ) )
|
data/ruby/trema/netns.rb
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License, version 2, as
|
|
6
|
+
# published by the Free Software Foundation.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
require "trema/network-component"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module Trema
|
|
23
|
+
#
|
|
24
|
+
# The controller class of network namespace
|
|
25
|
+
#
|
|
26
|
+
class Netns < NetworkComponent
|
|
27
|
+
#
|
|
28
|
+
# Set a network interface
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
# netns.interface #=> "trema0-1"
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
#
|
|
35
|
+
# @api public
|
|
36
|
+
#
|
|
37
|
+
attr_accessor :interface
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Creates a new Trema netns from {DSL::Netns}
|
|
42
|
+
#
|
|
43
|
+
# @example
|
|
44
|
+
# netns = Trema::Netns.new( stanza )
|
|
45
|
+
#
|
|
46
|
+
# @return [Netns]
|
|
47
|
+
#
|
|
48
|
+
# @api public
|
|
49
|
+
#
|
|
50
|
+
def initialize stanza
|
|
51
|
+
@stanza = stanza
|
|
52
|
+
Netns.add self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# Define netns attribute accessors
|
|
58
|
+
#
|
|
59
|
+
# @example
|
|
60
|
+
# netns.name # delegated to @stanza[ :name ]
|
|
61
|
+
#
|
|
62
|
+
# @return an attribute value
|
|
63
|
+
#
|
|
64
|
+
# @api public
|
|
65
|
+
#
|
|
66
|
+
def method_missing message, *args
|
|
67
|
+
@stanza.__send__ :[], message
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Returns netmask
|
|
73
|
+
#
|
|
74
|
+
# @example
|
|
75
|
+
# host.netmask #=> "255.255.0.0"
|
|
76
|
+
#
|
|
77
|
+
# @return [String]
|
|
78
|
+
#
|
|
79
|
+
# @api public
|
|
80
|
+
#
|
|
81
|
+
def netmask
|
|
82
|
+
@stanza[ :netmask ] || "255.255.255.255"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# Runs a netns process
|
|
88
|
+
#
|
|
89
|
+
# @example
|
|
90
|
+
# netns.run! => self
|
|
91
|
+
#
|
|
92
|
+
# @return [Netns]
|
|
93
|
+
#
|
|
94
|
+
# @api public
|
|
95
|
+
#
|
|
96
|
+
def run!
|
|
97
|
+
sh "sudo ip netns add #{ name }"
|
|
98
|
+
sh "sudo ip link set dev #{ interface } netns #{ name }"
|
|
99
|
+
sh "sudo ip netns exec #{ name } ifconfig lo 127.0.0.1"
|
|
100
|
+
sh "sudo ip netns exec #{ name } ifconfig #{ interface } #{ @stanza[ :ip ] } netmask #{ netmask }" if @stanza[ :ip ]
|
|
101
|
+
sh "sudo ip netns exec #{ name } route add -net #{ @stanza[ :net ] } gw #{ @stanza[ :gw ] }" if @stanza[ :net ] and @stanza[ :gw ]
|
|
102
|
+
self
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
#
|
|
107
|
+
# Kills running netns
|
|
108
|
+
#
|
|
109
|
+
# @example
|
|
110
|
+
# netns.shutdown!
|
|
111
|
+
#
|
|
112
|
+
# @return [undefined]
|
|
113
|
+
#
|
|
114
|
+
# @api public
|
|
115
|
+
#
|
|
116
|
+
def shutdown!
|
|
117
|
+
sh "sudo ip netns delete #{ name }"
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
### Local variables:
|
|
124
|
+
### mode: Ruby
|
|
125
|
+
### coding: utf-8-unix
|
|
126
|
+
### indent-tabs-mode: nil
|
|
127
|
+
### End:
|
data/ruby/trema/ordered-hash.rb
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
3
|
-
#
|
|
4
2
|
# Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
#
|
|
6
4
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -20,6 +18,9 @@
|
|
|
20
18
|
|
|
21
19
|
module Trema
|
|
22
20
|
class OrderedHash
|
|
21
|
+
attr_reader :keys
|
|
22
|
+
|
|
23
|
+
|
|
23
24
|
def initialize
|
|
24
25
|
@keys = Array.new
|
|
25
26
|
@content = Hash.new
|
|
@@ -38,11 +39,11 @@ module Trema
|
|
|
38
39
|
|
|
39
40
|
def []= key, value
|
|
40
41
|
@content[ key ] = value
|
|
41
|
-
|
|
42
|
+
unless @keys.include?( key )
|
|
42
43
|
@keys << key
|
|
43
44
|
end
|
|
44
45
|
end
|
|
45
|
-
|
|
46
|
+
|
|
46
47
|
|
|
47
48
|
def values
|
|
48
49
|
@keys.map do | each |
|
data/ruby/trema/packet-in.c
CHANGED
|
@@ -42,7 +42,8 @@ VALUE cPacketIn;
|
|
|
42
42
|
{ \
|
|
43
43
|
if ( get_packet_in_info( self )->format & flag ) { \
|
|
44
44
|
return func( get_packet_in_info( self )->packet_member ); \
|
|
45
|
-
}
|
|
45
|
+
} \
|
|
46
|
+
else { \
|
|
46
47
|
return Qnil; \
|
|
47
48
|
} \
|
|
48
49
|
}
|
|
@@ -109,8 +110,7 @@ packet_in_buffer_id( VALUE self ) {
|
|
|
109
110
|
/*
|
|
110
111
|
* A buffer_id value either than +UINT32_MAX+ marks the packet_in as buffered.
|
|
111
112
|
*
|
|
112
|
-
* @return [
|
|
113
|
-
* @return [false] if packet_in is not buffered.
|
|
113
|
+
* @return [Boolean] whether the packet_in is buffered or not.
|
|
114
114
|
*/
|
|
115
115
|
static VALUE
|
|
116
116
|
packet_in_is_buffered( VALUE self ) {
|
|
@@ -170,9 +170,9 @@ packet_in_reason( VALUE self ) {
|
|
|
170
170
|
|
|
171
171
|
|
|
172
172
|
/*
|
|
173
|
-
* The MAC
|
|
173
|
+
* The source MAC address.
|
|
174
174
|
*
|
|
175
|
-
* @return [Trema::Mac]
|
|
175
|
+
* @return [Trema::Mac] the value of source MAC address as a Trema::MAC object.
|
|
176
176
|
*/
|
|
177
177
|
static VALUE
|
|
178
178
|
packet_in_macsa( VALUE self ) {
|
|
@@ -181,9 +181,10 @@ packet_in_macsa( VALUE self ) {
|
|
|
181
181
|
|
|
182
182
|
|
|
183
183
|
/*
|
|
184
|
-
* The MAC
|
|
184
|
+
* The destination MAC address.
|
|
185
185
|
*
|
|
186
|
-
* @return [Trema::Mac]
|
|
186
|
+
* @return [Trema::Mac] the value of destination MAC address as a
|
|
187
|
+
* Trema::MAC object.
|
|
187
188
|
*/
|
|
188
189
|
static VALUE
|
|
189
190
|
packet_in_macda( VALUE self ) {
|
|
@@ -194,7 +195,7 @@ packet_in_macda( VALUE self ) {
|
|
|
194
195
|
/*
|
|
195
196
|
* The ethernet type.
|
|
196
197
|
*
|
|
197
|
-
* @return [
|
|
198
|
+
* @return [Integer] the value of ethernet type.
|
|
198
199
|
*/
|
|
199
200
|
static VALUE
|
|
200
201
|
packet_in_eth_type( VALUE self ) {
|
|
@@ -203,9 +204,9 @@ packet_in_eth_type( VALUE self ) {
|
|
|
203
204
|
|
|
204
205
|
|
|
205
206
|
/*
|
|
206
|
-
* Is
|
|
207
|
+
* Is it an IEEE 802.1q packet?
|
|
207
208
|
*
|
|
208
|
-
* @return [
|
|
209
|
+
* @return [Boolean] whether the packet is an IEEE 802.1q or not.
|
|
209
210
|
*/
|
|
210
211
|
static VALUE
|
|
211
212
|
packet_in_is_vtag( VALUE self ) {
|
|
@@ -219,9 +220,9 @@ packet_in_is_vtag( VALUE self ) {
|
|
|
219
220
|
|
|
220
221
|
|
|
221
222
|
/*
|
|
222
|
-
* The vlan tpid.
|
|
223
|
+
* The vlan tag protocol identifier (tpid).
|
|
223
224
|
*
|
|
224
|
-
* @return [
|
|
225
|
+
* @return [Integer] the value of the vlan tag protocol identifier.
|
|
225
226
|
*/
|
|
226
227
|
static VALUE
|
|
227
228
|
packet_in_vlan_tpid( VALUE self ) {
|
|
@@ -230,9 +231,9 @@ packet_in_vlan_tpid( VALUE self ) {
|
|
|
230
231
|
|
|
231
232
|
|
|
232
233
|
/*
|
|
233
|
-
* The vlan tci.
|
|
234
|
+
* The vlan tag control identifier (tci).
|
|
234
235
|
*
|
|
235
|
-
* @return [
|
|
236
|
+
* @return [Integer] the value of the vlan tag control identifier.
|
|
236
237
|
*/
|
|
237
238
|
static VALUE
|
|
238
239
|
packet_in_vlan_tci( VALUE self ) {
|
|
@@ -241,9 +242,9 @@ packet_in_vlan_tci( VALUE self ) {
|
|
|
241
242
|
|
|
242
243
|
|
|
243
244
|
/*
|
|
244
|
-
* The vlan
|
|
245
|
+
* The vlan priority.
|
|
245
246
|
*
|
|
246
|
-
* @return [
|
|
247
|
+
* @return [Integer] the value of the vlan priority.
|
|
247
248
|
*/
|
|
248
249
|
static VALUE
|
|
249
250
|
packet_in_vlan_prio( VALUE self ) {
|
|
@@ -252,9 +253,9 @@ packet_in_vlan_prio( VALUE self ) {
|
|
|
252
253
|
|
|
253
254
|
|
|
254
255
|
/*
|
|
255
|
-
* The vlan cfi.
|
|
256
|
+
* The vlan canonical format indicator (cfi).
|
|
256
257
|
*
|
|
257
|
-
* @return [
|
|
258
|
+
* @return [Integer] the value of the vlan canonical format indicator.
|
|
258
259
|
*/
|
|
259
260
|
static VALUE
|
|
260
261
|
packet_in_vlan_cfi( VALUE self ) {
|
|
@@ -263,9 +264,9 @@ packet_in_vlan_cfi( VALUE self ) {
|
|
|
263
264
|
|
|
264
265
|
|
|
265
266
|
/*
|
|
266
|
-
* The vlan
|
|
267
|
+
* The vlan identifier.
|
|
267
268
|
*
|
|
268
|
-
* @return [
|
|
269
|
+
* @return [Integer] the value of the vlan identifier.
|
|
269
270
|
*/
|
|
270
271
|
static VALUE
|
|
271
272
|
packet_in_vlan_vid( VALUE self ) {
|
|
@@ -274,9 +275,9 @@ packet_in_vlan_vid( VALUE self ) {
|
|
|
274
275
|
|
|
275
276
|
|
|
276
277
|
/*
|
|
277
|
-
* Is an ARP packet?
|
|
278
|
+
* Is it an ARP packet?
|
|
278
279
|
*
|
|
279
|
-
* @return [
|
|
280
|
+
* @return [Boolean] whether the packet is an ARP packet or not.
|
|
280
281
|
*/
|
|
281
282
|
static VALUE
|
|
282
283
|
packet_in_is_arp( VALUE self ) {
|
|
@@ -290,9 +291,9 @@ packet_in_is_arp( VALUE self ) {
|
|
|
290
291
|
|
|
291
292
|
|
|
292
293
|
/*
|
|
293
|
-
* Is an ARP request packet?
|
|
294
|
+
* Is it an ARP request packet?
|
|
294
295
|
*
|
|
295
|
-
* @return [
|
|
296
|
+
* @return [Boolean] whether the packet is an ARP request packet or not.
|
|
296
297
|
*/
|
|
297
298
|
static VALUE
|
|
298
299
|
packet_in_is_arp_request( VALUE self ) {
|
|
@@ -306,9 +307,9 @@ packet_in_is_arp_request( VALUE self ) {
|
|
|
306
307
|
|
|
307
308
|
|
|
308
309
|
/*
|
|
309
|
-
* Is an ARP reply packet?
|
|
310
|
+
* Is it an ARP reply packet?
|
|
310
311
|
*
|
|
311
|
-
* @return [
|
|
312
|
+
* @return [Boolean] whether the packet is an ARP reply packet or not.
|
|
312
313
|
*/
|
|
313
314
|
static VALUE
|
|
314
315
|
packet_in_is_arp_reply( VALUE self ) {
|
|
@@ -324,7 +325,7 @@ packet_in_is_arp_reply( VALUE self ) {
|
|
|
324
325
|
/*
|
|
325
326
|
* The ARP operation code.
|
|
326
327
|
*
|
|
327
|
-
* @return [
|
|
328
|
+
* @return [Integer] the value of the ARP opcode field.
|
|
328
329
|
*/
|
|
329
330
|
static VALUE
|
|
330
331
|
packet_in_arp_oper( VALUE self ) {
|
|
@@ -333,9 +334,11 @@ packet_in_arp_oper( VALUE self ) {
|
|
|
333
334
|
|
|
334
335
|
|
|
335
336
|
/*
|
|
336
|
-
* The ARP source hardware address.
|
|
337
|
+
* The ARP source hardware address of a packet.
|
|
337
338
|
*
|
|
338
|
-
* @return [Trema::Mac]
|
|
339
|
+
* @return [Trema::Mac, nil]
|
|
340
|
+
* the value of the ARP source hardware address as a Trema::Mac object or nil
|
|
341
|
+
* if packet not an ARP.
|
|
339
342
|
*/
|
|
340
343
|
static VALUE
|
|
341
344
|
packet_in_arp_sha( VALUE self ) {
|
|
@@ -349,9 +352,11 @@ packet_in_arp_sha( VALUE self ) {
|
|
|
349
352
|
|
|
350
353
|
|
|
351
354
|
/*
|
|
352
|
-
* The ARP source protocol address.
|
|
355
|
+
* The ARP source protocol address of a packet.
|
|
353
356
|
*
|
|
354
|
-
* @return [Trema::IP]
|
|
357
|
+
* @return [Trema::IP, nil]
|
|
358
|
+
* the value of ARP source protocol address as a Trema::IP object or nil if
|
|
359
|
+
* packet is not an ARP.
|
|
355
360
|
*/
|
|
356
361
|
static VALUE
|
|
357
362
|
packet_in_arp_spa( VALUE self ) {
|
|
@@ -365,9 +370,11 @@ packet_in_arp_spa( VALUE self ) {
|
|
|
365
370
|
|
|
366
371
|
|
|
367
372
|
/*
|
|
368
|
-
* The ARP target hardware address.
|
|
373
|
+
* The ARP target hardware address of a packet.
|
|
369
374
|
*
|
|
370
|
-
* @return [Trema::Mac]
|
|
375
|
+
* @return [Trema::Mac]
|
|
376
|
+
* the value of ARP target hardware address as a Trema::Mac object or nil if
|
|
377
|
+
* packet is not an ARP.
|
|
371
378
|
*/
|
|
372
379
|
static VALUE
|
|
373
380
|
packet_in_arp_tha( VALUE self ) {
|
|
@@ -381,9 +388,11 @@ packet_in_arp_tha( VALUE self ) {
|
|
|
381
388
|
|
|
382
389
|
|
|
383
390
|
/*
|
|
384
|
-
* The ARP target protocol address.
|
|
391
|
+
* The ARP target protocol address of a packet.
|
|
385
392
|
*
|
|
386
|
-
* @return [Trema::IP]
|
|
393
|
+
* @return [Trema::IP]
|
|
394
|
+
* the value of ARP target protocol address as a Trema::IP object or nil if
|
|
395
|
+
* packet is not an ARP.
|
|
387
396
|
*/
|
|
388
397
|
static VALUE
|
|
389
398
|
packet_in_arp_tpa( VALUE self ) {
|
|
@@ -397,9 +406,9 @@ packet_in_arp_tpa( VALUE self ) {
|
|
|
397
406
|
|
|
398
407
|
|
|
399
408
|
/*
|
|
400
|
-
* Is an
|
|
409
|
+
* Is it an IPv4 packet?
|
|
401
410
|
*
|
|
402
|
-
* @return [
|
|
411
|
+
* @return [Boolean] whether the packet is an IPv4 packet or not.
|
|
403
412
|
*/
|
|
404
413
|
static VALUE
|
|
405
414
|
packet_in_is_ipv4( VALUE self ) {
|
|
@@ -413,9 +422,9 @@ packet_in_is_ipv4( VALUE self ) {
|
|
|
413
422
|
|
|
414
423
|
|
|
415
424
|
/*
|
|
416
|
-
* The IPv4 version number.
|
|
425
|
+
* The IPv4 version number (version).
|
|
417
426
|
*
|
|
418
|
-
* @return [Integer]
|
|
427
|
+
* @return [Integer] the value of IPv4 version number.
|
|
419
428
|
*/
|
|
420
429
|
static VALUE
|
|
421
430
|
packet_in_ipv4_version( VALUE self ) {
|
|
@@ -424,9 +433,9 @@ packet_in_ipv4_version( VALUE self ) {
|
|
|
424
433
|
|
|
425
434
|
|
|
426
435
|
/*
|
|
427
|
-
* The IPv4 internet header length.
|
|
436
|
+
* The IPv4 internet header length (ihl).
|
|
428
437
|
*
|
|
429
|
-
* @return [Integer]
|
|
438
|
+
* @return [Integer] the value of IPv4 internet header length.
|
|
430
439
|
*/
|
|
431
440
|
static VALUE
|
|
432
441
|
packet_in_ipv4_ihl( VALUE self ) {
|
|
@@ -435,9 +444,9 @@ packet_in_ipv4_ihl( VALUE self ) {
|
|
|
435
444
|
|
|
436
445
|
|
|
437
446
|
/*
|
|
438
|
-
* The IPv4 tos
|
|
447
|
+
* The IPv4 type of service (tos).
|
|
439
448
|
*
|
|
440
|
-
* @return [Integer]
|
|
449
|
+
* @return [Integer] the value of IPv4 type of service.
|
|
441
450
|
*/
|
|
442
451
|
static VALUE
|
|
443
452
|
packet_in_ipv4_tos( VALUE self ) {
|
|
@@ -446,9 +455,9 @@ packet_in_ipv4_tos( VALUE self ) {
|
|
|
446
455
|
|
|
447
456
|
|
|
448
457
|
/*
|
|
449
|
-
* The IPv4 total length.
|
|
458
|
+
* The IPv4 total length, the length of the datagram.
|
|
450
459
|
*
|
|
451
|
-
* @return [Integer]
|
|
460
|
+
* @return [Integer] the value of IPv4 total length.
|
|
452
461
|
*/
|
|
453
462
|
static VALUE
|
|
454
463
|
packet_in_ipv4_tot_len( VALUE self ) {
|
|
@@ -457,9 +466,9 @@ packet_in_ipv4_tot_len( VALUE self ) {
|
|
|
457
466
|
|
|
458
467
|
|
|
459
468
|
/*
|
|
460
|
-
* The IPv4
|
|
469
|
+
* The IPv4 identification.
|
|
461
470
|
*
|
|
462
|
-
* @return [Integer]
|
|
471
|
+
* @return [Integer] the value of IPv4 identification.
|
|
463
472
|
*/
|
|
464
473
|
static VALUE
|
|
465
474
|
packet_in_ipv4_id( VALUE self ) {
|
|
@@ -470,7 +479,7 @@ packet_in_ipv4_id( VALUE self ) {
|
|
|
470
479
|
/*
|
|
471
480
|
* The IPv4 fragment offset.
|
|
472
481
|
*
|
|
473
|
-
* @return [Integer]
|
|
482
|
+
* @return [Integer] the value of IPv4 fragment offset.
|
|
474
483
|
*/
|
|
475
484
|
static VALUE
|
|
476
485
|
packet_in_ipv4_frag_off( VALUE self ) {
|
|
@@ -479,9 +488,9 @@ packet_in_ipv4_frag_off( VALUE self ) {
|
|
|
479
488
|
|
|
480
489
|
|
|
481
490
|
/*
|
|
482
|
-
* The IPv4 ttl
|
|
491
|
+
* The IPv4 time to live (ttl).
|
|
483
492
|
*
|
|
484
|
-
* @return [Integer]
|
|
493
|
+
* @return [Integer] the value of IPv4 time to live.
|
|
485
494
|
*/
|
|
486
495
|
static VALUE
|
|
487
496
|
packet_in_ipv4_ttl( VALUE self ) {
|
|
@@ -492,7 +501,7 @@ packet_in_ipv4_ttl( VALUE self ) {
|
|
|
492
501
|
/*
|
|
493
502
|
* The IPv4 protocol number.
|
|
494
503
|
*
|
|
495
|
-
* @return [Integer]
|
|
504
|
+
* @return [Integer] the value of IPv4 protocol number.
|
|
496
505
|
*/
|
|
497
506
|
static VALUE
|
|
498
507
|
packet_in_ipv4_protocol( VALUE self ) {
|
|
@@ -503,7 +512,7 @@ packet_in_ipv4_protocol( VALUE self ) {
|
|
|
503
512
|
/*
|
|
504
513
|
* The IPv4 checksum.
|
|
505
514
|
*
|
|
506
|
-
* @return [Integer]
|
|
515
|
+
* @return [Integer] the value of IPv4 checksum.
|
|
507
516
|
*/
|
|
508
517
|
static VALUE
|
|
509
518
|
packet_in_ipv4_checksum( VALUE self ) {
|
|
@@ -512,9 +521,11 @@ packet_in_ipv4_checksum( VALUE self ) {
|
|
|
512
521
|
|
|
513
522
|
|
|
514
523
|
/*
|
|
515
|
-
* The
|
|
524
|
+
* The IPv4 source IP address of a packet.
|
|
516
525
|
*
|
|
517
|
-
* @return [Trema::IP]
|
|
526
|
+
* @return [Trema::IP,nil]
|
|
527
|
+
* the value of IPv4 source IP address as a Trema::IP object or nil if
|
|
528
|
+
* packet is not an IPv4.
|
|
518
529
|
*/
|
|
519
530
|
static VALUE
|
|
520
531
|
packet_in_ipv4_saddr( VALUE self ) {
|
|
@@ -528,9 +539,11 @@ packet_in_ipv4_saddr( VALUE self ) {
|
|
|
528
539
|
|
|
529
540
|
|
|
530
541
|
/*
|
|
531
|
-
* The IPV4 destination
|
|
542
|
+
* The IPV4 destination IP address of a packet.
|
|
532
543
|
*
|
|
533
|
-
* @return [Trema::IP]
|
|
544
|
+
* @return [Trema::IP, nil]
|
|
545
|
+
* the value of IPv4 destination IP address as a Trema::IP object or nil if
|
|
546
|
+
* packet is not an IPv4.
|
|
534
547
|
*/
|
|
535
548
|
static VALUE
|
|
536
549
|
packet_in_ipv4_daddr( VALUE self ) {
|
|
@@ -544,9 +557,9 @@ packet_in_ipv4_daddr( VALUE self ) {
|
|
|
544
557
|
|
|
545
558
|
|
|
546
559
|
/*
|
|
547
|
-
* Is an ICMPv4 packet?
|
|
560
|
+
* Is it an ICMPv4 packet?
|
|
548
561
|
*
|
|
549
|
-
* @return [
|
|
562
|
+
* @return [Boolean] whether the packet is an ICMPv4 packet or not.
|
|
550
563
|
*/
|
|
551
564
|
static VALUE
|
|
552
565
|
packet_in_is_icmpv4( VALUE self ) {
|
|
@@ -560,9 +573,9 @@ packet_in_is_icmpv4( VALUE self ) {
|
|
|
560
573
|
|
|
561
574
|
|
|
562
575
|
/*
|
|
563
|
-
* The ICMPv4 message type.
|
|
576
|
+
* The ICMPv4 message type, ie echo_reply, echo_request.
|
|
564
577
|
*
|
|
565
|
-
* @return [Integer]
|
|
578
|
+
* @return [Integer] the value of ICMPv4 message type.
|
|
566
579
|
*/
|
|
567
580
|
static VALUE
|
|
568
581
|
packet_in_icmpv4_type( VALUE self ) {
|
|
@@ -571,9 +584,9 @@ packet_in_icmpv4_type( VALUE self ) {
|
|
|
571
584
|
|
|
572
585
|
|
|
573
586
|
/*
|
|
574
|
-
* The ICMPv4 message code.
|
|
587
|
+
* The ICMPv4 message code the further qualifies the message type.
|
|
575
588
|
*
|
|
576
|
-
* @return [Integer]
|
|
589
|
+
* @return [Integer] the value of ICMPv4 message code.
|
|
577
590
|
*/
|
|
578
591
|
static VALUE
|
|
579
592
|
packet_in_icmpv4_code( VALUE self ) {
|
|
@@ -584,7 +597,7 @@ packet_in_icmpv4_code( VALUE self ) {
|
|
|
584
597
|
/*
|
|
585
598
|
* The ICMPv4 message checksum.
|
|
586
599
|
*
|
|
587
|
-
* @return [Integer]
|
|
600
|
+
* @return [Integer] the value of ICMPv4 message checksum.
|
|
588
601
|
*/
|
|
589
602
|
static VALUE
|
|
590
603
|
packet_in_icmpv4_checksum( VALUE self ) {
|
|
@@ -593,9 +606,9 @@ packet_in_icmpv4_checksum( VALUE self ) {
|
|
|
593
606
|
|
|
594
607
|
|
|
595
608
|
/*
|
|
596
|
-
* The identifier
|
|
609
|
+
* The ICMPv4 echo identifier to be used to match echo requests to echo replies.
|
|
597
610
|
*
|
|
598
|
-
* @return [Integer]
|
|
611
|
+
* @return [Integer] the value of ICMPv4 echo identifier.
|
|
599
612
|
*/
|
|
600
613
|
static VALUE
|
|
601
614
|
packet_in_icmpv4_id( VALUE self ) {
|
|
@@ -604,9 +617,9 @@ packet_in_icmpv4_id( VALUE self ) {
|
|
|
604
617
|
|
|
605
618
|
|
|
606
619
|
/*
|
|
607
|
-
* The sequence number
|
|
620
|
+
* The ICMPv4 echo sequence number.
|
|
608
621
|
*
|
|
609
|
-
* @return [Integer]
|
|
622
|
+
* @return [Integer] the value of ICMPv4 echo sequence number.
|
|
610
623
|
*/
|
|
611
624
|
static VALUE
|
|
612
625
|
packet_in_icmpv4_seq( VALUE self ) {
|
|
@@ -615,9 +628,11 @@ packet_in_icmpv4_seq( VALUE self ) {
|
|
|
615
628
|
|
|
616
629
|
|
|
617
630
|
/*
|
|
618
|
-
* The
|
|
631
|
+
* The ICMPv4 redirect message gateway IP address.
|
|
619
632
|
*
|
|
620
|
-
* @return [Trema::IP]
|
|
633
|
+
* @return [Trema::IP, nil]
|
|
634
|
+
* the value of ICMPv4 redirect message IP gateway address as a Trema::IP
|
|
635
|
+
* object or nil if packet is not ICMPv4.
|
|
621
636
|
*/
|
|
622
637
|
static VALUE
|
|
623
638
|
packet_in_icmpv4_gateway( VALUE self ) {
|
|
@@ -631,9 +646,9 @@ packet_in_icmpv4_gateway( VALUE self ) {
|
|
|
631
646
|
|
|
632
647
|
|
|
633
648
|
/*
|
|
634
|
-
* Is an ICMPv4 echo reply packet?
|
|
649
|
+
* Is it an ICMPv4 echo reply packet?
|
|
635
650
|
*
|
|
636
|
-
* @return [
|
|
651
|
+
* @return [Boolean] whether the packet is an ICMPv4 echo reply packet or not.
|
|
637
652
|
*/
|
|
638
653
|
static VALUE
|
|
639
654
|
packet_in_is_icmpv4_echo_reply( VALUE self ) {
|
|
@@ -647,9 +662,10 @@ packet_in_is_icmpv4_echo_reply( VALUE self ) {
|
|
|
647
662
|
|
|
648
663
|
|
|
649
664
|
/*
|
|
650
|
-
* Is an ICMPv4 destination unreachable packet?
|
|
665
|
+
* Is it an ICMPv4 destination unreachable packet?
|
|
651
666
|
*
|
|
652
|
-
* @return [
|
|
667
|
+
* @return [Boolean] whether the packet is an ICMPv4 destination
|
|
668
|
+
* unreachable packet or not.
|
|
653
669
|
*/
|
|
654
670
|
static VALUE
|
|
655
671
|
packet_in_is_icmpv4_dst_unreach( VALUE self ) {
|
|
@@ -663,9 +679,9 @@ packet_in_is_icmpv4_dst_unreach( VALUE self ) {
|
|
|
663
679
|
|
|
664
680
|
|
|
665
681
|
/*
|
|
666
|
-
* Is an ICMPv4 redirect packet?
|
|
682
|
+
* Is it an ICMPv4 redirect packet?
|
|
667
683
|
*
|
|
668
|
-
* @return [
|
|
684
|
+
* @return [Boolean] whether the packet is an ICMPv4 redirect packet or not.
|
|
669
685
|
*/
|
|
670
686
|
static VALUE
|
|
671
687
|
packet_in_is_icmpv4_redirect( VALUE self ) {
|
|
@@ -679,9 +695,9 @@ packet_in_is_icmpv4_redirect( VALUE self ) {
|
|
|
679
695
|
|
|
680
696
|
|
|
681
697
|
/*
|
|
682
|
-
* Is an ICMPv4 echo request packet?
|
|
698
|
+
* Is it an ICMPv4 echo request packet?
|
|
683
699
|
*
|
|
684
|
-
* @return [
|
|
700
|
+
* @return [Boolean] whether the packet is an ICMPv4 echo request packet or not.
|
|
685
701
|
*/
|
|
686
702
|
static VALUE
|
|
687
703
|
packet_in_is_icmpv4_echo_request( VALUE self ) {
|
|
@@ -695,9 +711,9 @@ packet_in_is_icmpv4_echo_request( VALUE self ) {
|
|
|
695
711
|
|
|
696
712
|
|
|
697
713
|
/*
|
|
698
|
-
* Is an IGMP packet?
|
|
714
|
+
* Is it an IGMP packet?
|
|
699
715
|
*
|
|
700
|
-
* @return [
|
|
716
|
+
* @return [Boolean] whether the packet is an IGMP packet or not.
|
|
701
717
|
*/
|
|
702
718
|
static VALUE
|
|
703
719
|
packet_in_is_igmp( VALUE self ) {
|
|
@@ -711,9 +727,10 @@ packet_in_is_igmp( VALUE self ) {
|
|
|
711
727
|
|
|
712
728
|
|
|
713
729
|
/*
|
|
714
|
-
* Is an IGMP membership query packet?
|
|
730
|
+
* Is it an IGMP membership query packet?
|
|
715
731
|
*
|
|
716
|
-
* @return [
|
|
732
|
+
* @return [Boolean] whether the packet is an IGMP membership query
|
|
733
|
+
* packet or not.
|
|
717
734
|
*/
|
|
718
735
|
static VALUE
|
|
719
736
|
packet_in_is_igmp_membership_query( VALUE self ) {
|
|
@@ -727,9 +744,10 @@ packet_in_is_igmp_membership_query( VALUE self ) {
|
|
|
727
744
|
|
|
728
745
|
|
|
729
746
|
/*
|
|
730
|
-
* Is an IGMP v1 membership report packet?
|
|
747
|
+
* Is it an IGMP v1 membership report packet?
|
|
731
748
|
*
|
|
732
|
-
* @return [
|
|
749
|
+
* @return [Boolean] whether the packet is an IGMP v1 membership report packet
|
|
750
|
+
* or not.
|
|
733
751
|
*/
|
|
734
752
|
static VALUE
|
|
735
753
|
packet_in_is_igmp_v1_membership_report( VALUE self ) {
|
|
@@ -743,9 +761,10 @@ packet_in_is_igmp_v1_membership_report( VALUE self ) {
|
|
|
743
761
|
|
|
744
762
|
|
|
745
763
|
/*
|
|
746
|
-
* Is an IGMP v2 membership report packet?
|
|
764
|
+
* Is it an IGMP v2 membership report packet?
|
|
747
765
|
*
|
|
748
|
-
* @return [
|
|
766
|
+
* @return [Boolean] whether the packet is an IGMP v2 membership report packet
|
|
767
|
+
* or not.
|
|
749
768
|
*/
|
|
750
769
|
static VALUE
|
|
751
770
|
packet_in_is_igmp_v2_membership_report( VALUE self ) {
|
|
@@ -759,9 +778,10 @@ packet_in_is_igmp_v2_membership_report( VALUE self ) {
|
|
|
759
778
|
|
|
760
779
|
|
|
761
780
|
/*
|
|
762
|
-
* Is an IGMP v2 leave group packet?
|
|
781
|
+
* Is it an IGMP v2 leave group packet?
|
|
763
782
|
*
|
|
764
|
-
* @return [
|
|
783
|
+
* @return [Boolean] whether the packet is an IGMP v2 leave group packet
|
|
784
|
+
* or not.
|
|
765
785
|
*/
|
|
766
786
|
static VALUE
|
|
767
787
|
packet_in_is_igmp_v2_leave_group( VALUE self ) {
|
|
@@ -775,9 +795,10 @@ packet_in_is_igmp_v2_leave_group( VALUE self ) {
|
|
|
775
795
|
|
|
776
796
|
|
|
777
797
|
/*
|
|
778
|
-
* Is an IGMP v3 membership report packet?
|
|
798
|
+
* Is it an IGMP v3 membership report packet?
|
|
779
799
|
*
|
|
780
|
-
* @return [
|
|
800
|
+
* @return [Boolean] whether the packet is an IGMP v3 membership report packet
|
|
801
|
+
* or not.
|
|
781
802
|
*/
|
|
782
803
|
static VALUE
|
|
783
804
|
packet_in_is_igmp_v3_membership_report( VALUE self ) {
|
|
@@ -793,7 +814,7 @@ packet_in_is_igmp_v3_membership_report( VALUE self ) {
|
|
|
793
814
|
/*
|
|
794
815
|
* The IGMP message type.
|
|
795
816
|
*
|
|
796
|
-
* @return [Integer]
|
|
817
|
+
* @return [Integer] the value of IGMP message type.
|
|
797
818
|
*/
|
|
798
819
|
static VALUE
|
|
799
820
|
packet_in_igmp_type( VALUE self ) {
|
|
@@ -804,7 +825,9 @@ packet_in_igmp_type( VALUE self ) {
|
|
|
804
825
|
/*
|
|
805
826
|
* The IGMP group address.
|
|
806
827
|
*
|
|
807
|
-
* @return [Trema::IP]
|
|
828
|
+
* @return [Trema::IP, nil]
|
|
829
|
+
* the value of IGMP IP group address as a Trema::IP object
|
|
830
|
+
* or nil if packet is not IGMP.
|
|
808
831
|
*/
|
|
809
832
|
static VALUE
|
|
810
833
|
packet_in_igmp_group( VALUE self ) {
|
|
@@ -820,7 +843,7 @@ packet_in_igmp_group( VALUE self ) {
|
|
|
820
843
|
/*
|
|
821
844
|
* The IGMP checksum.
|
|
822
845
|
*
|
|
823
|
-
* @return [Integer]
|
|
846
|
+
* @return [Integer] the value of IGMP checksum.
|
|
824
847
|
*/
|
|
825
848
|
static VALUE
|
|
826
849
|
packet_in_igmp_checksum( VALUE self ) {
|
|
@@ -829,9 +852,9 @@ packet_in_igmp_checksum( VALUE self ) {
|
|
|
829
852
|
|
|
830
853
|
|
|
831
854
|
/*
|
|
832
|
-
* Is a TCP packet?
|
|
855
|
+
* Is it a TCP packet?
|
|
833
856
|
*
|
|
834
|
-
* @return [
|
|
857
|
+
* @return [Boolean] whether the packet is a TCP packet or not.
|
|
835
858
|
*/
|
|
836
859
|
static VALUE
|
|
837
860
|
packet_in_is_tcp( VALUE self ) {
|
|
@@ -847,7 +870,7 @@ packet_in_is_tcp( VALUE self ) {
|
|
|
847
870
|
/*
|
|
848
871
|
* The TCP source port.
|
|
849
872
|
*
|
|
850
|
-
* @return [Integer]
|
|
873
|
+
* @return [Integer] the value of TCP source port.
|
|
851
874
|
*/
|
|
852
875
|
static VALUE
|
|
853
876
|
packet_in_tcp_src_port( VALUE self ) {
|
|
@@ -858,7 +881,7 @@ packet_in_tcp_src_port( VALUE self ) {
|
|
|
858
881
|
/*
|
|
859
882
|
* The TCP destination port.
|
|
860
883
|
*
|
|
861
|
-
* @return [Integer]
|
|
884
|
+
* @return [Integer] the value of TCP destination port.
|
|
862
885
|
*/
|
|
863
886
|
static VALUE
|
|
864
887
|
packet_in_tcp_dst_port( VALUE self ) {
|
|
@@ -869,7 +892,7 @@ packet_in_tcp_dst_port( VALUE self ) {
|
|
|
869
892
|
/*
|
|
870
893
|
* The TCP sequence number.
|
|
871
894
|
*
|
|
872
|
-
* @return [Integer]
|
|
895
|
+
* @return [Integer] the value of TCP sequence number.
|
|
873
896
|
*/
|
|
874
897
|
static VALUE
|
|
875
898
|
packet_in_tcp_seq_no( VALUE self ) {
|
|
@@ -878,9 +901,9 @@ packet_in_tcp_seq_no( VALUE self ) {
|
|
|
878
901
|
|
|
879
902
|
|
|
880
903
|
/*
|
|
881
|
-
* The TCP
|
|
904
|
+
* The TCP acknowledgment number.
|
|
882
905
|
*
|
|
883
|
-
* @return [Integer]
|
|
906
|
+
* @return [Integer] the value of TCP acknowledgment number.
|
|
884
907
|
*/
|
|
885
908
|
static VALUE
|
|
886
909
|
packet_in_tcp_ack_no( VALUE self ) {
|
|
@@ -889,9 +912,9 @@ packet_in_tcp_ack_no( VALUE self ) {
|
|
|
889
912
|
|
|
890
913
|
|
|
891
914
|
/*
|
|
892
|
-
* The TCP offset.
|
|
915
|
+
* The TCP data offset.
|
|
893
916
|
*
|
|
894
|
-
* @return [Integer]
|
|
917
|
+
* @return [Integer] the value of TCP data offset.
|
|
895
918
|
*/
|
|
896
919
|
static VALUE
|
|
897
920
|
packet_in_tcp_offset( VALUE self ) {
|
|
@@ -902,7 +925,7 @@ packet_in_tcp_offset( VALUE self ) {
|
|
|
902
925
|
/*
|
|
903
926
|
* The TCP flags.
|
|
904
927
|
*
|
|
905
|
-
* @return [Integer]
|
|
928
|
+
* @return [Integer] the value of TCP flags.
|
|
906
929
|
*/
|
|
907
930
|
static VALUE
|
|
908
931
|
packet_in_tcp_flags( VALUE self ) {
|
|
@@ -913,7 +936,7 @@ packet_in_tcp_flags( VALUE self ) {
|
|
|
913
936
|
/*
|
|
914
937
|
* The TCP window.
|
|
915
938
|
*
|
|
916
|
-
* @return [Integer]
|
|
939
|
+
* @return [Integer] the value of TCP window.
|
|
917
940
|
*/
|
|
918
941
|
static VALUE
|
|
919
942
|
packet_in_tcp_window( VALUE self ) {
|
|
@@ -924,7 +947,7 @@ packet_in_tcp_window( VALUE self ) {
|
|
|
924
947
|
/*
|
|
925
948
|
* The TCP checksum.
|
|
926
949
|
*
|
|
927
|
-
* @return [Integer]
|
|
950
|
+
* @return [Integer] the value of TCP checksum.
|
|
928
951
|
*/
|
|
929
952
|
static VALUE
|
|
930
953
|
packet_in_tcp_checksum( VALUE self ) {
|
|
@@ -933,9 +956,9 @@ packet_in_tcp_checksum( VALUE self ) {
|
|
|
933
956
|
|
|
934
957
|
|
|
935
958
|
/*
|
|
936
|
-
* The TCP urgent.
|
|
959
|
+
* The TCP urgent pointer.
|
|
937
960
|
*
|
|
938
|
-
* @return [Integer]
|
|
961
|
+
* @return [Integer] the value of TCP urgent pointer.
|
|
939
962
|
*/
|
|
940
963
|
static VALUE
|
|
941
964
|
packet_in_tcp_urgent( VALUE self ) {
|
|
@@ -944,9 +967,9 @@ packet_in_tcp_urgent( VALUE self ) {
|
|
|
944
967
|
|
|
945
968
|
|
|
946
969
|
/*
|
|
947
|
-
* Is
|
|
970
|
+
* Is it a UDP packet?
|
|
948
971
|
*
|
|
949
|
-
* @return [
|
|
972
|
+
* @return [Boolean] whether the packet is a UDP packet or not.
|
|
950
973
|
*/
|
|
951
974
|
static VALUE
|
|
952
975
|
packet_in_is_udp( VALUE self ) {
|
|
@@ -975,7 +998,7 @@ packet_in_udp_payload( VALUE self ) {
|
|
|
975
998
|
/*
|
|
976
999
|
* The UDP source port.
|
|
977
1000
|
*
|
|
978
|
-
* @return [Integer]
|
|
1001
|
+
* @return [Integer] the value of UDP source port.
|
|
979
1002
|
*/
|
|
980
1003
|
static VALUE
|
|
981
1004
|
packet_in_udp_src_port( VALUE self ) {
|
|
@@ -986,7 +1009,7 @@ packet_in_udp_src_port( VALUE self ) {
|
|
|
986
1009
|
/*
|
|
987
1010
|
* The UDP destination port.
|
|
988
1011
|
*
|
|
989
|
-
* @return [Integer]
|
|
1012
|
+
* @return [Integer] the value of UDP destination port.
|
|
990
1013
|
*/
|
|
991
1014
|
static VALUE
|
|
992
1015
|
packet_in_udp_dst_port( VALUE self ) {
|
|
@@ -995,9 +1018,9 @@ packet_in_udp_dst_port( VALUE self ) {
|
|
|
995
1018
|
|
|
996
1019
|
|
|
997
1020
|
/*
|
|
998
|
-
* The UDP length
|
|
1021
|
+
* The UDP length
|
|
999
1022
|
*
|
|
1000
|
-
* @return [Integer]
|
|
1023
|
+
* @return [Integer] the value in bytes of UDP header and data.
|
|
1001
1024
|
*/
|
|
1002
1025
|
static VALUE
|
|
1003
1026
|
packet_in_udp_len( VALUE self ) {
|
|
@@ -1008,7 +1031,7 @@ packet_in_udp_len( VALUE self ) {
|
|
|
1008
1031
|
/*
|
|
1009
1032
|
* The UDP checksum.
|
|
1010
1033
|
*
|
|
1011
|
-
* @return [Integer]
|
|
1034
|
+
* @return [Integer] the value of UDP checksum.
|
|
1012
1035
|
*/
|
|
1013
1036
|
static VALUE
|
|
1014
1037
|
packet_in_udp_checksum( VALUE self ) {
|