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
|
@@ -30,7 +30,7 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
30
30
|
:hw_desc => "no hardware description",
|
|
31
31
|
:sw_desc => "version xx.xx",
|
|
32
32
|
:serial_num => "1234",
|
|
33
|
-
:dp_desc => "nec01"
|
|
33
|
+
:dp_desc => "nec01"
|
|
34
34
|
)
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -62,14 +62,14 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
62
62
|
:actions => actions
|
|
63
63
|
)
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
it { should respond_to( :to_s ) }
|
|
67
67
|
its ( :length ) { should == 96 }
|
|
68
68
|
its ( :table_id ) { should == 0 }
|
|
69
69
|
its ( :match ) { should be_an_instance_of Match }
|
|
70
70
|
its ( :duration_sec ) { should == 3 }
|
|
71
71
|
its ( :duration_nsec ) { should == 106000000 }
|
|
72
|
-
its ( :priority ) { should == 65535 }
|
|
72
|
+
its ( :priority ) { should == 65535 }
|
|
73
73
|
its ( :idle_timeout ) { should == 0 }
|
|
74
74
|
its ( :hard_timeout ) { should == 0 }
|
|
75
75
|
its ( :cookie ) { should == 866942928268820481 }
|
|
@@ -78,23 +78,23 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
78
78
|
its ( :actions ) { should_not be_empty }
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
context "when aggregate-stats-reply is created" do
|
|
83
83
|
subject do
|
|
84
84
|
AggregateStatsReply.new(
|
|
85
85
|
:packet_count => 2,
|
|
86
86
|
:byte_count => 128,
|
|
87
|
-
:flow_count => 10
|
|
87
|
+
:flow_count => 10
|
|
88
88
|
)
|
|
89
89
|
end
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
it { should respond_to( :to_s ) }
|
|
92
92
|
its( :packet_count ) { should == 2 }
|
|
93
93
|
its( :byte_count ) { should == 128 }
|
|
94
94
|
its ( :flow_count ) { should == 10 }
|
|
95
95
|
end
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
|
|
97
|
+
|
|
98
98
|
context "when table-stats-reply is created" do
|
|
99
99
|
subject do
|
|
100
100
|
TableStatsReply.new(
|
|
@@ -107,7 +107,7 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
107
107
|
:matched_count => 1
|
|
108
108
|
)
|
|
109
109
|
end
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
it { should respond_to( :to_s ) }
|
|
112
112
|
its( :table_id ) { should == 1 }
|
|
113
113
|
its( :name ) { should eq( "classifier" ) }
|
|
@@ -117,8 +117,8 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
117
117
|
its( :lookup_count ) { should == 4 }
|
|
118
118
|
its( :matched_count ) { should == 1 }
|
|
119
119
|
end
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
|
|
121
|
+
|
|
122
122
|
context "when port-stats-reply is created" do
|
|
123
123
|
subject do
|
|
124
124
|
PortStatsReply.new(
|
|
@@ -137,7 +137,7 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
137
137
|
:collisions => 1
|
|
138
138
|
)
|
|
139
139
|
end
|
|
140
|
-
|
|
140
|
+
|
|
141
141
|
it { should respond_to( :to_s ) }
|
|
142
142
|
its( :port_no ) { should == 1 }
|
|
143
143
|
its( :rx_packets ) { should == 7 }
|
|
@@ -154,7 +154,7 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
154
154
|
its( :collisions ) { should == 1 }
|
|
155
155
|
end
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
|
|
158
158
|
context "when queue-stats-reply is created" do
|
|
159
159
|
subject do
|
|
160
160
|
QueueStatsReply.new(
|
|
@@ -162,10 +162,10 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
162
162
|
:queue_id => 2,
|
|
163
163
|
:tx_bytes => 1024,
|
|
164
164
|
:tx_packets => 16,
|
|
165
|
-
:tx_errors => 5
|
|
165
|
+
:tx_errors => 5
|
|
166
166
|
)
|
|
167
167
|
end
|
|
168
|
-
|
|
168
|
+
|
|
169
169
|
it { should respond_to( :to_s ) }
|
|
170
170
|
its( :port_no ) { should == 1 }
|
|
171
171
|
its( :queue_id ) { should == 2 }
|
|
@@ -173,16 +173,16 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
173
173
|
its( :tx_packets ) { should == 16 }
|
|
174
174
|
its( :tx_errors ) { should == 5 }
|
|
175
175
|
end
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
|
|
177
|
+
|
|
178
178
|
context "when vendor-stats-reply is created" do
|
|
179
179
|
subject { VendorStatsReply.new( :vendor_id => 123 ) }
|
|
180
180
|
|
|
181
181
|
it { should respond_to( :to_s ) }
|
|
182
182
|
its( :vendor_id ) { should == 123 }
|
|
183
183
|
end
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
|
|
185
|
+
|
|
186
186
|
context "when #stats_request(desc-stats) is sent" do
|
|
187
187
|
it "should #stats_reply(desc-stats)" do
|
|
188
188
|
class DescStatsController < Controller; end
|
|
@@ -190,13 +190,13 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
190
190
|
vswitch( "desc-stats" ) { datapath_id 0xabc }
|
|
191
191
|
}.run( DescStatsController ) {
|
|
192
192
|
controller( "DescStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
|
193
|
-
datapath_id.should == 0xabc
|
|
193
|
+
datapath_id.should == 0xabc
|
|
194
194
|
message.type.should == 0
|
|
195
195
|
message.stats[ 0 ].mfr_desc.should eq( "Nicira Networks, Inc." )
|
|
196
196
|
message.stats[ 0 ].hw_desc.should eq( "Open vSwitch" )
|
|
197
197
|
message.stats[ 0 ].should respond_to :to_s
|
|
198
198
|
end
|
|
199
|
-
|
|
199
|
+
|
|
200
200
|
controller( "DescStatsController" ).send_message( 0xabc,
|
|
201
201
|
DescStatsRequest.new( :transaction_id => 1234 ) )
|
|
202
202
|
sleep 2 # FIXME: wait to send_message
|
|
@@ -216,11 +216,11 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
216
216
|
link "host2", "flow-stats"
|
|
217
217
|
}.run( FlowStatsController ) {
|
|
218
218
|
controller( "FlowStatsController" ).send_flow_mod_add(
|
|
219
|
-
0xabc,
|
|
219
|
+
0xabc,
|
|
220
220
|
# match the UDP packet
|
|
221
221
|
:match => Match.new( :dl_type => 0x800, :nw_proto => 17 ),
|
|
222
222
|
# flood the packet
|
|
223
|
-
:actions => ActionOutput.new( :port => FlowStatsController::OFPP_FLOOD )
|
|
223
|
+
:actions => ActionOutput.new( :port => FlowStatsController::OFPP_FLOOD )
|
|
224
224
|
)
|
|
225
225
|
sleep 1 # FIXME: wait to send_flow_mod_add
|
|
226
226
|
# send two packets
|
|
@@ -240,8 +240,8 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
240
240
|
}
|
|
241
241
|
end
|
|
242
242
|
end
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
|
|
244
|
+
|
|
245
245
|
context "when #stats_request(aggregate_stats) is sent" do
|
|
246
246
|
it "should #stats_reply(aggregate-stats) attributes" do
|
|
247
247
|
class AggregateStatsController < Controller; end
|
|
@@ -257,7 +257,7 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
257
257
|
# match the UDP packet
|
|
258
258
|
:match => Match.new( :dl_type => 0x800, :nw_proto => 17 ),
|
|
259
259
|
# flood the packet
|
|
260
|
-
:actions => ActionOutput.new( :port => AggregateStatsController::OFPP_FLOOD )
|
|
260
|
+
:actions => ActionOutput.new( :port => AggregateStatsController::OFPP_FLOOD )
|
|
261
261
|
)
|
|
262
262
|
sleep 1 # FIXME: wait to send_flow_mod_add
|
|
263
263
|
# send ten packets
|
|
@@ -278,8 +278,8 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
278
278
|
}
|
|
279
279
|
end
|
|
280
280
|
end
|
|
281
|
-
|
|
282
|
-
|
|
281
|
+
|
|
282
|
+
|
|
283
283
|
context "when #stats_request(port-stats) is sent" do
|
|
284
284
|
it "should #stats_reply(port-stats)" do
|
|
285
285
|
class PortStatsController < Controller; end
|
|
@@ -293,15 +293,16 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
293
293
|
controller( "PortStatsController" ).send_flow_mod_add(
|
|
294
294
|
0xabc,
|
|
295
295
|
:match => Match.new( :dl_type => 0x800, :nw_proto => 17 ),
|
|
296
|
-
:actions => ActionOutput.new( :port => PortStatsController::OFPP_FLOOD )
|
|
296
|
+
:actions => ActionOutput.new( :port => PortStatsController::OFPP_FLOOD )
|
|
297
297
|
)
|
|
298
|
+
sleep 1 # FIXME: wait to send_flow_mod_add
|
|
298
299
|
send_packets "host1", "host2"
|
|
299
300
|
sleep 2 # FIXME: wait to send_packets
|
|
300
|
-
|
|
301
|
+
|
|
301
302
|
controller( "PortStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
|
302
303
|
datapath_id.should == 0xabc
|
|
303
304
|
message.type.should == 4
|
|
304
|
-
message.stats[ 0 ].should be_an_instance_of(Trema::PortStatsReply)
|
|
305
|
+
message.stats[ 0 ].should be_an_instance_of( Trema::PortStatsReply )
|
|
305
306
|
message.stats[ 0 ].should respond_to :to_s
|
|
306
307
|
end
|
|
307
308
|
controller( "PortStatsController" ).send_message( 0xabc,
|
|
@@ -310,8 +311,8 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
310
311
|
}
|
|
311
312
|
end
|
|
312
313
|
end
|
|
313
|
-
|
|
314
|
-
|
|
314
|
+
|
|
315
|
+
|
|
315
316
|
context "when #stats_request(table-stats) is sent" do
|
|
316
317
|
it "should #stats_reply(table-stats)" do
|
|
317
318
|
class TableStatsController < Controller; end
|
|
@@ -322,13 +323,14 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
|
322
323
|
link "host1", "table-stats"
|
|
323
324
|
link "host2", "table-stats"
|
|
324
325
|
}.run( TableStatsController) {
|
|
325
|
-
controller( "TableStatsController" ).send_flow_mod_add(
|
|
326
|
+
controller( "TableStatsController" ).send_flow_mod_add(
|
|
326
327
|
0xabc,
|
|
327
|
-
:actions => ActionOutput.new( :port => TableStatsController::OFPP_FLOOD )
|
|
328
|
+
:actions => ActionOutput.new( :port => TableStatsController::OFPP_FLOOD )
|
|
328
329
|
)
|
|
330
|
+
sleep 1 # FIXME: wait to send_flow_mod_add
|
|
329
331
|
send_packets "host1", "host2"
|
|
330
332
|
sleep 2 # FIXME: wait to send_packets
|
|
331
|
-
|
|
333
|
+
|
|
332
334
|
controller( "TableStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
|
333
335
|
datapath_id.should == 0xabc
|
|
334
336
|
message.type.should == 3
|
|
@@ -38,7 +38,7 @@ describe StatsRequest do
|
|
|
38
38
|
context "when .FlowStatsRequest.new( MANDATORY OPTION MISSING )" do
|
|
39
39
|
subject { FlowStatsRequest.new }
|
|
40
40
|
it "should raise ArgumentError" do
|
|
41
|
-
expect { subject }.to raise_error( ArgumentError )
|
|
41
|
+
expect { subject }.to raise_error( ArgumentError )
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
@@ -53,8 +53,8 @@ describe StatsRequest do
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
context "when .FlowStatsRequest.new( VALID OPTIONS )" do
|
|
56
|
-
subject do
|
|
57
|
-
FlowStatsRequest.new(
|
|
56
|
+
subject do
|
|
57
|
+
FlowStatsRequest.new(
|
|
58
58
|
:match => Match.new( :dl_type => 0x800, :nw_proto => 17 ),
|
|
59
59
|
:table_id => 1,
|
|
60
60
|
:out_port => 2
|
|
@@ -70,7 +70,7 @@ describe StatsRequest do
|
|
|
70
70
|
context "when .AggregateStatsRequest.new( MANDATORY OPTION MISSING )" do
|
|
71
71
|
subject { AggregateStatsRequest.new }
|
|
72
72
|
it "should raise ArgumentError" do
|
|
73
|
-
expect { subject }.to raise_error( ArgumentError )
|
|
73
|
+
expect { subject }.to raise_error( ArgumentError )
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -85,8 +85,8 @@ describe StatsRequest do
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
context "when .AggregateStatsRequest.new( VALID OPTIONS )" do
|
|
88
|
-
subject do
|
|
89
|
-
AggregateStatsRequest.new(
|
|
88
|
+
subject do
|
|
89
|
+
AggregateStatsRequest.new(
|
|
90
90
|
:match => Match.new( :dl_type => 0x800, :nw_proto => 17 ),
|
|
91
91
|
:table_id => 1,
|
|
92
92
|
:out_port => 2
|
|
@@ -28,6 +28,7 @@ describe StripVlanHeader, ".new" do
|
|
|
28
28
|
vswitch { datapath_id 0xabc }
|
|
29
29
|
}.run( FlowModAddController ) {
|
|
30
30
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => StripVlanHeader.new )
|
|
31
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
31
32
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
32
33
|
vswitch( "0xabc" ).flows[ 0 ].actions.should match( /strip_vlan/ )
|
|
33
34
|
}
|
data/spec/trema/util_spec.rb
CHANGED
|
@@ -28,11 +28,11 @@ include Trema::Util
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
describe Trema::Util do
|
|
31
|
-
it "should
|
|
31
|
+
it "should assert that trema is built" do
|
|
32
32
|
Trema::Executables.stub!( :compiled? ).and_return( false )
|
|
33
33
|
$stderr.should_receive( :puts ).with( /^ERROR/ )
|
|
34
34
|
lambda do
|
|
35
|
-
|
|
35
|
+
assert_trema_is_built
|
|
36
36
|
end.should raise_error( SystemExit )
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -70,6 +70,7 @@ describe Trema::Util do
|
|
|
70
70
|
last_session.stub!( :switches ).and_return( switches )
|
|
71
71
|
last_session.stub!( :hosts ).and_return( hosts )
|
|
72
72
|
last_session.stub!( :links ).and_return( links )
|
|
73
|
+
last_session.stub!( :netnss ).and_return( {} )
|
|
73
74
|
Trema::DSL::Context.stub!( :load_current ).and_return( last_session )
|
|
74
75
|
|
|
75
76
|
pid_files = [ mock( "PID file #0" ), mock( "PID file #1" ), mock( "PID file #2" ) ]
|
|
@@ -44,24 +44,25 @@ end
|
|
|
44
44
|
|
|
45
45
|
describe VendorAction, ".new( vendor_id, body )" do
|
|
46
46
|
subject { VendorAction.new vendor_id, body }
|
|
47
|
-
let( :vendor_id ) {
|
|
47
|
+
let( :vendor_id ) { 0x00002320 }
|
|
48
48
|
|
|
49
|
-
context %{when body ==
|
|
50
|
-
let( :body ) {
|
|
49
|
+
context %{when body == [ 0x00, 0x08, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 ]} do
|
|
50
|
+
let( :body ) { [ 0x00, 0x08, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 ] }
|
|
51
51
|
|
|
52
|
-
its( :vendor_id ) { should ==
|
|
53
|
-
its( :body ) { should == [
|
|
52
|
+
its( :vendor_id ) { should == 0x00002320 }
|
|
53
|
+
its( :body ) { should == [ 0, 8, 84, 114, 101, 109, 97, 0 ] }
|
|
54
54
|
|
|
55
55
|
context "when sending Flow Mod Add with action set to VendorAction" do
|
|
56
56
|
it "should have a flow with action set to VendorAction" do
|
|
57
57
|
class FlowModAddController < Controller; end
|
|
58
|
-
pending "Use Nicira's vendor ID and body"
|
|
59
58
|
network {
|
|
60
59
|
vswitch { datapath_id 0xabc }
|
|
61
60
|
}.run( FlowModAddController ) {
|
|
62
|
-
|
|
61
|
+
body = [ 0x00, 0x08, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 ]
|
|
62
|
+
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => VendorAction.new( 0x00002320, body ) )
|
|
63
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
63
64
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
64
|
-
vswitch( "0xabc" ).flows[ 0 ].actions.should match( /
|
|
65
|
+
vswitch( "0xabc" ).flows[ 0 ].actions.should match( /note:54.72.65.6d.61.00/ )
|
|
65
66
|
}
|
|
66
67
|
end
|
|
67
68
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Sample OpenFlow event dumper.
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Author: Yasunobu Chiba
|
|
5
5
|
*
|
|
6
6
|
* Copyright (C) 2008-2012 NEC Corporation
|
|
@@ -36,10 +36,12 @@ usage() {
|
|
|
36
36
|
"OpenFlow Event Dumper.\n"
|
|
37
37
|
"Usage: %s [OPTION]...\n"
|
|
38
38
|
"\n"
|
|
39
|
-
" -n, --name=SERVICE_NAME
|
|
40
|
-
" -d, --daemonize
|
|
41
|
-
" -l, --logging_level=LEVEL
|
|
42
|
-
" -
|
|
39
|
+
" -n, --name=SERVICE_NAME service name\n"
|
|
40
|
+
" -d, --daemonize run in the background\n"
|
|
41
|
+
" -l, --logging_level=LEVEL set logging level\n"
|
|
42
|
+
" -g, --syslog output log messages to syslog\n"
|
|
43
|
+
" -f, --logging_facility=FACILITY set syslog facility\n"
|
|
44
|
+
" -h, --help display this help and exit\n"
|
|
43
45
|
, get_executable_name()
|
|
44
46
|
);
|
|
45
47
|
}
|
|
@@ -325,7 +327,7 @@ handle_queue_get_config_reply( uint64_t datapath_id, uint32_t transaction_id,
|
|
|
325
327
|
}
|
|
326
328
|
|
|
327
329
|
xfree( queues_head );
|
|
328
|
-
}
|
|
330
|
+
}
|
|
329
331
|
|
|
330
332
|
|
|
331
333
|
int
|
|
@@ -160,7 +160,7 @@ class Dumper < Controller
|
|
|
160
160
|
|
|
161
161
|
def dump_phy_port port
|
|
162
162
|
# for testing port-status record the mac address if port.number == 2.
|
|
163
|
-
@hw_addr = port.hw_addr if port.number == 2
|
|
163
|
+
@hw_addr = port.hw_addr if port.number == 2
|
|
164
164
|
info "port_no: #{ port.number }"
|
|
165
165
|
info " hw_addr: #{ port.hw_addr }"
|
|
166
166
|
info " name: #{ port.name }"
|
|
@@ -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
|
|
@@ -18,13 +16,16 @@
|
|
|
18
16
|
#
|
|
19
17
|
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
class HelloTrema < Controller
|
|
20
|
+
def switch_ready datapath_id
|
|
21
|
+
info "Hello %#x!" % datapath_id
|
|
22
|
+
shutdown!
|
|
23
|
+
end
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
### Local variables:
|
|
27
28
|
### mode: Ruby
|
|
28
|
-
### coding: utf-8
|
|
29
|
+
### coding: utf-8
|
|
29
30
|
### indent-tabs-mode: nil
|
|
30
31
|
### End:
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Hello trema world!
|
|
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
|
|
@@ -24,7 +22,9 @@
|
|
|
24
22
|
|
|
25
23
|
static void
|
|
26
24
|
handle_switch_ready( uint64_t datapath_id, void *user_data ) {
|
|
27
|
-
|
|
25
|
+
UNUSED( user_data );
|
|
26
|
+
|
|
27
|
+
info( "Hello %#" PRIx64 "!", datapath_id );
|
|
28
28
|
stop_trema();
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -33,7 +33,7 @@ int
|
|
|
33
33
|
main( int argc, char *argv[] ) {
|
|
34
34
|
init_trema( &argc, &argv );
|
|
35
35
|
|
|
36
|
-
set_switch_ready_handler( handle_switch_ready,
|
|
36
|
+
set_switch_ready_handler( handle_switch_ready, NULL );
|
|
37
37
|
|
|
38
38
|
start_trema();
|
|
39
39
|
|
|
@@ -28,7 +28,7 @@ join( char *result, const list_element *switches ) {
|
|
|
28
28
|
const list_element *element;
|
|
29
29
|
for ( element = switches; element != NULL; element = element->next ) {
|
|
30
30
|
char tmp[ 19 ]; // "0x" + 64bits in hex + '\0'
|
|
31
|
-
snprintf( tmp, sizeof( tmp ), "%#" PRIx64, *
|
|
31
|
+
snprintf( tmp, sizeof( tmp ), "%#" PRIx64, *( uint64_t * ) element->data );
|
|
32
32
|
strcat( result, tmp );
|
|
33
33
|
strcat( result, comma );
|
|
34
34
|
}
|
|
@@ -66,7 +66,7 @@ main( int argc, char *argv[] ) {
|
|
|
66
66
|
init_trema( &argc, &argv );
|
|
67
67
|
add_periodic_event_callback( 30, timeout, NULL );
|
|
68
68
|
|
|
69
|
-
add_periodic_event_callback( 2, ( void ( * )
|
|
69
|
+
add_periodic_event_callback( 2, ( void ( * )( void * ) ) send_list_switches_request, NULL );
|
|
70
70
|
set_list_switches_reply_handler( handle_list_switches_reply );
|
|
71
71
|
|
|
72
72
|
start_trema();
|