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 @@ module Trema
|
|
|
30
30
|
before { @vhost = Vhost.new }
|
|
31
31
|
|
|
32
32
|
subject { @vhost[ :name ] }
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
context "and IP address empty" do
|
|
35
35
|
it { should be_nil }
|
|
36
36
|
end
|
|
@@ -65,7 +65,7 @@ module Trema
|
|
|
65
65
|
before { @vhost = Vhost.new( "Yutaro's host" ) }
|
|
66
66
|
|
|
67
67
|
subject { @vhost[ :promisc ] }
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
context "when promisc off" do
|
|
70
70
|
before { @vhost.promisc "off" }
|
|
71
71
|
|
|
@@ -78,7 +78,7 @@ module Trema
|
|
|
78
78
|
|
|
79
79
|
it { should be_false }
|
|
80
80
|
end
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
|
|
83
83
|
context "when promisc on" do
|
|
84
84
|
before { @vhost.promisc "on" }
|
|
@@ -102,13 +102,13 @@ module Trema
|
|
|
102
102
|
end
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
|
|
106
|
+
|
|
107
107
|
describe :netmask do
|
|
108
108
|
before { @vhost = Vhost.new( "Yutaro's host" ) }
|
|
109
109
|
|
|
110
110
|
subject { @vhost[ :netmask ] }
|
|
111
|
-
|
|
111
|
+
|
|
112
112
|
context "when netmask empty" do
|
|
113
113
|
it { should be_nil }
|
|
114
114
|
end
|
|
@@ -119,8 +119,8 @@ module Trema
|
|
|
119
119
|
it { should == "255.255.255.0" }
|
|
120
120
|
end
|
|
121
121
|
end
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
|
|
123
|
+
|
|
124
124
|
describe :mac do
|
|
125
125
|
before { @vhost = Vhost.new( "Yutaro's host" ) }
|
|
126
126
|
|
|
@@ -28,6 +28,7 @@ shared_examples_for "echo reply message" do
|
|
|
28
28
|
vswitch( "echo" ) { datapath_id 0xabc }
|
|
29
29
|
}.run( EchoReplyController ) {
|
|
30
30
|
controller( "EchoReplyController" ).send_message( 0xabc, subject )
|
|
31
|
+
sleep 2 # FIXME: wait to send_message
|
|
31
32
|
IO.read( File.join( Trema.log, "openflowd.echo.log" ) ).should include( "OFPT_ECHO_REPLY" )
|
|
32
33
|
}
|
|
33
34
|
end
|
|
@@ -28,6 +28,7 @@ shared_examples_for "features request message" do
|
|
|
28
28
|
vswitch( "features-request" ) { datapath_id 0xabc }
|
|
29
29
|
}.run( FeaturesRequestController ) {
|
|
30
30
|
controller( "FeaturesRequestController" ).send_message( 0xabc, subject )
|
|
31
|
+
sleep 2 # FIXME: wait to send_message
|
|
31
32
|
IO.read( File.join( Trema.log, "openflowd.features-request.log" ) ).should include( "OFPT_FEATURES_REQUEST" )
|
|
32
33
|
}
|
|
33
34
|
end
|
|
@@ -39,7 +39,7 @@ describe Trema::FlowRemoved, ".new( VALID OPTIONS )" do
|
|
|
39
39
|
:tp_src => 1,
|
|
40
40
|
:tp_dst => 1
|
|
41
41
|
)
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
FlowRemoved.new(
|
|
44
44
|
:datapath_id=>2748,
|
|
45
45
|
:transaction_id=>0,
|
|
@@ -47,9 +47,9 @@ describe Trema::FlowRemoved, ".new( VALID OPTIONS )" do
|
|
|
47
47
|
:cookie => 123456789,
|
|
48
48
|
:priority => 65535,
|
|
49
49
|
:reason => 0,
|
|
50
|
-
:duration_sec=>1,
|
|
50
|
+
:duration_sec=>1,
|
|
51
51
|
:duration_nsec=>779000000,
|
|
52
|
-
:idle_timeout=>1,
|
|
52
|
+
:idle_timeout=>1,
|
|
53
53
|
:packet_count=> 6,
|
|
54
54
|
:byte_count => 256
|
|
55
55
|
)
|
|
@@ -66,8 +66,8 @@ describe Trema::FlowRemoved, ".new( VALID OPTIONS )" do
|
|
|
66
66
|
its ( :packet_count ) { should == 6 }
|
|
67
67
|
its ( :byte_count ) { should == 256 }
|
|
68
68
|
end
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
|
|
70
|
+
|
|
71
71
|
context "when a flow expires" do
|
|
72
72
|
it "should #flow_removed" do
|
|
73
73
|
class FlowRemovedController < Controller; end
|
|
@@ -83,12 +83,12 @@ describe Trema::FlowRemoved, ".new( VALID OPTIONS )" do
|
|
|
83
83
|
sleep 2 # FIXME: wait to receive flow_removed
|
|
84
84
|
}
|
|
85
85
|
end
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
|
|
87
|
+
|
|
88
88
|
it "should #flow_removed with valid attributes as per flow mod add" do
|
|
89
89
|
class FlowRemovedController < Controller; end
|
|
90
|
-
match = Match.new(
|
|
91
|
-
:in_port=> 1,
|
|
90
|
+
match = Match.new(
|
|
91
|
+
:in_port=> 1,
|
|
92
92
|
:dl_src => "00:00:00:00:00:01",
|
|
93
93
|
:dl_dst => "00:00:00:00:00:02",
|
|
94
94
|
:dl_type => 0x800,
|
|
@@ -20,56 +20,68 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
|
|
20
20
|
require "trema"
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
shared_examples_for "get config request message" do
|
|
24
|
+
class GetConfigRequestController < Controller; end
|
|
25
|
+
|
|
26
|
+
it "should be logged to the switch's log", :sudo => true do
|
|
27
|
+
network {
|
|
28
|
+
vswitch( "get-config-request" ) { datapath_id 0xabc }
|
|
29
|
+
}.run( GetConfigRequestController ) {
|
|
30
|
+
controller( "GetConfigRequestController" ).send_message( 0xabc, subject )
|
|
31
|
+
sleep 2 # FIXME: wait to send_message
|
|
32
|
+
IO.read( File.join( Trema.log, "openflowd.get-config-request.log" ) ).should include( "OFPT_GET_CONFIG_REQUEST" )
|
|
33
|
+
}
|
|
34
|
+
end
|
|
25
35
|
end
|
|
26
36
|
|
|
27
37
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
module Trema
|
|
39
|
+
describe GetConfigRequest, ".new" do
|
|
40
|
+
it_should_behave_like "any Openflow message with default transaction ID"
|
|
41
|
+
it_should_behave_like "get config request message"
|
|
32
42
|
end
|
|
33
|
-
end
|
|
34
43
|
|
|
35
44
|
|
|
36
|
-
describe GetConfigRequest, ".new(
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
describe GetConfigRequest, ".new(nil)" do
|
|
46
|
+
subject { GetConfigRequest.new( nil ) }
|
|
47
|
+
it_should_behave_like "any Openflow message with default transaction ID"
|
|
48
|
+
it_should_behave_like "get config request message"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
describe GetConfigRequest, ".new(transaction_id)" do
|
|
53
|
+
subject { GetConfigRequest.new( transaction_id ) }
|
|
54
|
+
it_should_behave_like "any Openflow message with transaction ID"
|
|
55
|
+
context "when sent to a switch" do
|
|
56
|
+
let( :transaction_id ) { 123 }
|
|
57
|
+
it_should_behave_like "get config request message"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
39
60
|
|
|
40
61
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
get_config_request = GetConfigRequest.new( :transaction_id => 1234 )
|
|
48
|
-
controller( "GetConfigController" ).should_receive( :get_config_reply )
|
|
49
|
-
sleep 1 # FIXME
|
|
50
|
-
controller( "GetConfigController" ).send_message( 0xabc, get_config_request )
|
|
51
|
-
sleep 2 # FIXME: wait to send_message
|
|
52
|
-
}
|
|
62
|
+
describe GetConfigRequest, ".new(:transaction_id => value)" do
|
|
63
|
+
subject { GetConfigRequest.new( :transaction_id => transaction_id ) }
|
|
64
|
+
it_should_behave_like "any Openflow message with transaction ID"
|
|
65
|
+
context "when sent to a switch" do
|
|
66
|
+
let( :transaction_id ) { 123 }
|
|
67
|
+
it_should_behave_like "get config request message"
|
|
53
68
|
end
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
datapath_id.should == 0xabc
|
|
64
|
-
message.transaction_id.should == 1234
|
|
65
|
-
message.flags.should >= 0 and message.flags.should <= 3
|
|
66
|
-
message.miss_send_len.should == 65535
|
|
67
|
-
end
|
|
68
|
-
controller( "GetConfigController" ).send_message( 0xabc, get_config_request )
|
|
69
|
-
sleep 2 # FIXME: wait to send_message
|
|
70
|
-
}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
describe GetConfigRequest, ".new(:xid => value)" do
|
|
73
|
+
subject { GetConfigRequest.new( :xid => xid ) }
|
|
74
|
+
it_should_behave_like "any Openflow message with xid"
|
|
75
|
+
context "when sent to a switch" do
|
|
76
|
+
let( :xid ) { 123 }
|
|
77
|
+
it_should_behave_like "get config request message"
|
|
71
78
|
end
|
|
72
79
|
end
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
describe GetConfigRequest, '.new("INVALID OPTION")', :nosudo => true do
|
|
83
|
+
it { expect { GetConfigRequest.new "INVALID OPTION" }.to raise_error( TypeError ) }
|
|
84
|
+
end
|
|
73
85
|
end
|
|
74
86
|
|
|
75
87
|
|
data/spec/trema/match_spec.rb
CHANGED
|
@@ -53,7 +53,7 @@ describe Match, ".new" do
|
|
|
53
53
|
its( :nw_dst ) { subject.prefixlen.should == 24 }
|
|
54
54
|
its( :tp_src ) { should == 10 }
|
|
55
55
|
its( :tp_dst ) { should == 20 }
|
|
56
|
-
its( :to_s ) { should == "wildcards = 0x20000(nw_dst(8)), in_port = 1, dl_src = 00:00:00:00:00:01, dl_dst = 00:00:00:00:00:02, dl_vlan =
|
|
56
|
+
its( :to_s ) { should == "wildcards = 0x20000(nw_dst(8)), in_port = 1, dl_src = 00:00:00:00:00:01, dl_dst = 00:00:00:00:00:02, dl_vlan = 0xffff, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 17, nw_src = 192.168.0.1/32, nw_dst = 192.168.0.0/24, tp_src = 10, tp_dst = 20" }
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
|
|
@@ -27,7 +27,7 @@ describe Trema::OpenflowError, "new" do
|
|
|
27
27
|
network {
|
|
28
28
|
vswitch( "error-port") { datapath_id 0xabc }
|
|
29
29
|
}.run( OpenflowErrorController ) {
|
|
30
|
-
port_mod = Trema::PortMod.new( :port_no => 2,
|
|
30
|
+
port_mod = Trema::PortMod.new( :port_no => 2,
|
|
31
31
|
:hw_addr => Trema::Mac.new( "11:22:33:44:55:66" ),
|
|
32
32
|
:config => 1,
|
|
33
33
|
:mask => 1,
|
|
@@ -36,15 +36,15 @@ describe Trema::OpenflowError, "new" do
|
|
|
36
36
|
controller( "OpenflowErrorController" ).should_receive( :openflow_error ) do | datapath_id, message |
|
|
37
37
|
datapath_id.should == 0xabc
|
|
38
38
|
message.type.should == Error::OFPET_PORT_MOD_FAILED
|
|
39
|
-
message.code.should == Error::OFPPMFC_BAD_PORT
|
|
39
|
+
message.code.should == Error::OFPPMFC_BAD_PORT
|
|
40
40
|
end
|
|
41
41
|
controller( "OpenflowErrorController" ).send_message( 0xabc, port_mod )
|
|
42
42
|
sleep 2 # FIXME: wait to send_message
|
|
43
43
|
}
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
|
|
47
|
+
|
|
48
48
|
context "when #port_mod with an invalid(hw_addr) is sent" do
|
|
49
49
|
it "should receive #error(type=Error::OFPET_PORT_MOD_FAILED,code=Error::OFPPMFC_BAD_HW_ADDR)" do
|
|
50
50
|
class OpenflowErrorController < Controller; end
|
|
@@ -55,7 +55,7 @@ describe Trema::OpenflowError, "new" do
|
|
|
55
55
|
link "host1", "error-hw-addr"
|
|
56
56
|
link "host2", "error-hw-addr"
|
|
57
57
|
}.run( OpenflowErrorController ) {
|
|
58
|
-
port_mod = Trema::PortMod.new( :port_no => 1,
|
|
58
|
+
port_mod = Trema::PortMod.new( :port_no => 1,
|
|
59
59
|
:hw_addr => Trema::Mac.new( "11:22:33:44:55:66" ),
|
|
60
60
|
:config => 1,
|
|
61
61
|
:mask => 1,
|
|
@@ -71,8 +71,8 @@ describe Trema::OpenflowError, "new" do
|
|
|
71
71
|
}
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
|
|
75
|
+
|
|
76
76
|
context "when #flow_mod(add) message with an invalid(action_port) is sent" do
|
|
77
77
|
it "should receive #error(type=Error::OFPET_BAD_ACTION,code=Error::OFPBAC_BAD_OUT_PORT)" do
|
|
78
78
|
class OpenflowErrorController < Controller; end
|
|
@@ -93,9 +93,9 @@ describe Trema::OpenflowError, "new" do
|
|
|
93
93
|
}
|
|
94
94
|
end
|
|
95
95
|
end
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
context "when an unsupported message is sent" do
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
context "when an unsupported message is sent" do
|
|
99
99
|
it "should receive an openflow error with valid attributes" do
|
|
100
100
|
class OpenflowController < Controller; end
|
|
101
101
|
network {
|
|
@@ -111,7 +111,7 @@ describe Trema::OpenflowError, "new" do
|
|
|
111
111
|
when 0,4
|
|
112
112
|
message.code.should include 0,1
|
|
113
113
|
when 1,2
|
|
114
|
-
message.code.should satisfy { | n |
|
|
114
|
+
message.code.should satisfy { | n |
|
|
115
115
|
n >= 0 && n <= 8
|
|
116
116
|
}
|
|
117
117
|
when 3
|
|
@@ -22,7 +22,7 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
|
|
22
22
|
require "trema"
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
class PacketOutController < Controller
|
|
25
|
+
class PacketOutController < Controller
|
|
26
26
|
def packet_in datapath_id, message
|
|
27
27
|
send_flow_mod_add(
|
|
28
28
|
datapath_id,
|
|
@@ -44,8 +44,8 @@ describe "packet-out" do
|
|
|
44
44
|
PacketOutController.new.should respond_to(:send_packet_out)
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
|
|
48
|
+
|
|
49
49
|
context "when invoked with no datapath_id" do
|
|
50
50
|
it "should raise an error" do
|
|
51
51
|
lambda do
|
|
@@ -53,8 +53,8 @@ describe "packet-out" do
|
|
|
53
53
|
end.should raise_error("wrong number of arguments (0 for 1)")
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
|
|
57
|
+
|
|
58
58
|
context "when #packet_in" do
|
|
59
59
|
it "should #packet_out" do
|
|
60
60
|
network {
|
|
@@ -25,7 +25,7 @@ require "trema"
|
|
|
25
25
|
describe QueueGetConfigRequest, ".new( OPTIONAL OPTION MISSING )" do
|
|
26
26
|
its( :port ) { should == 1 }
|
|
27
27
|
it_should_behave_like "any Openflow message with default transaction ID"
|
|
28
|
-
end
|
|
28
|
+
end
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
describe QueueGetConfigRequest, ".new( VALID OPTIONS )" do
|
|
@@ -59,7 +59,7 @@ describe SetEthDstAddr, ".new( VALID OPTION )" do
|
|
|
59
59
|
0xabc,
|
|
60
60
|
:actions => SetEthDstAddr.new( "52:54:00:a8:ad:8c" )
|
|
61
61
|
)
|
|
62
|
-
sleep
|
|
62
|
+
sleep 6 # FIXME: wait to send_flow_mod
|
|
63
63
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
64
64
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_dl_dst:52:54:00:a8:ad:8c/ )
|
|
65
65
|
}
|
|
@@ -56,7 +56,7 @@ describe SetEthSrcAddr, ".new( VALID OPTION )" do
|
|
|
56
56
|
vswitch { datapath_id 0xabc }
|
|
57
57
|
}.run( FlowModAddController ) {
|
|
58
58
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetEthSrcAddr.new( "52:54:00:a8:ad:8c" ) )
|
|
59
|
-
sleep
|
|
59
|
+
sleep 6 # FIXME: wait to send_flow_mod
|
|
60
60
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
61
61
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_dl_src:52:54:00:a8:ad:8c/ )
|
|
62
62
|
}
|
|
@@ -43,6 +43,7 @@ describe SetIpDstAddr, ".new( VALID OPTION )" do
|
|
|
43
43
|
vswitch { datapath_id 0xabc }
|
|
44
44
|
}.run( FlowModAddController ) {
|
|
45
45
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetIpDstAddr.new( "192.168.1.1" ) )
|
|
46
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
46
47
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
47
48
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_nw_dst:192.168.1.1/ )
|
|
48
49
|
}
|
|
@@ -43,6 +43,7 @@ describe SetIpSrcAddr, ".new( VALID OPTION )" do
|
|
|
43
43
|
vswitch { datapath_id 0xabc }
|
|
44
44
|
}.run( FlowModAddController ) {
|
|
45
45
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetIpSrcAddr.new( "192.168.1.1" ) )
|
|
46
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
46
47
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
47
48
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_nw_src:192.168.1.1/ )
|
|
48
49
|
}
|
|
@@ -50,6 +50,7 @@ describe SetIpTos, ".new( VALID OPTION )" do
|
|
|
50
50
|
vswitch { datapath_id 0xabc }
|
|
51
51
|
}.run( FlowModAddController ) {
|
|
52
52
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetIpTos.new( 4 ) )
|
|
53
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
53
54
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
54
55
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_nw_tos:4/ )
|
|
55
56
|
}
|
|
@@ -50,6 +50,7 @@ describe SetTransportDstPort, ".new( VALID OPTION )" do
|
|
|
50
50
|
vswitch { datapath_id 0xabc }
|
|
51
51
|
}.run( FlowModAddController ) {
|
|
52
52
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetTransportDstPort.new( 5555 ) )
|
|
53
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
53
54
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
54
55
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_tp_dst:5555/ )
|
|
55
56
|
}
|
|
@@ -50,6 +50,7 @@ describe SetTransportSrcPort, ".new( VALID OPTION )" do
|
|
|
50
50
|
vswitch { datapath_id 0xabc }
|
|
51
51
|
}.run( FlowModAddController ) {
|
|
52
52
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetTransportSrcPort.new( 5555 ) )
|
|
53
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
53
54
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
54
55
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_tp_src:5555/ )
|
|
55
56
|
}
|
|
@@ -50,6 +50,7 @@ describe SetVlanPriority, ".new( VALID OPTION )" do
|
|
|
50
50
|
vswitch { datapath_id 0xabc }
|
|
51
51
|
}.run( FlowModAddController ) {
|
|
52
52
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetVlanPriority.new( 7 ) )
|
|
53
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
53
54
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
54
55
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_vlan_pcp:7/ )
|
|
55
56
|
}
|
|
@@ -28,7 +28,7 @@ describe SetVlanVid, ".new( number )" do
|
|
|
28
28
|
its( :vlan_id ) { should == 1024 }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
it_validates "option range", :vlan_id, 1..
|
|
31
|
+
it_validates "option range", :vlan_id, 1..4095
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
|
|
@@ -50,6 +50,7 @@ describe SetVlanVid, ".new( VALID OPTION )" do
|
|
|
50
50
|
vswitch { datapath_id 0xabc }
|
|
51
51
|
}.run( FlowModAddController ) {
|
|
52
52
|
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetVlanVid.new( 1024 ) )
|
|
53
|
+
sleep 2 # FIXME: wait to send_flow_mod_add
|
|
53
54
|
vswitch( "0xabc" ).should have( 1 ).flows
|
|
54
55
|
vswitch( "0xabc" ).flows[0].actions.should match( /mod_vlan_vid:1024/ )
|
|
55
56
|
}
|