trema 0.2.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitmodules +3 -0
- data/.travis.yml +13 -0
- data/.yardopts +4 -0
- data/Gemfile +2 -3
- data/README.md +43 -97
- data/Rakefile +60 -4
- data/Rantfile +11 -10
- data/cruise.rb +4 -6
- data/features/example.packetin_filter_config.feature +10 -10
- data/features/example.switch_monitor.feature +14 -2
- data/features/step_definitions/kill_steps.rb +2 -2
- data/features/step_definitions/{off_steps.rb → killall_steps.rb} +2 -2
- data/features/step_definitions/misc_steps.rb +1 -1
- data/features/step_definitions/up_steps.rb +30 -0
- data/features/trema.feature +1 -0
- data/features/trema.run.feature +1 -0
- data/locale/README.ja.md +19 -0
- data/locale/ja/yard.po +3762 -0
- data/locale/yard.pot +3740 -0
- data/ruby/extconf.rb +4 -1
- data/ruby/trema/action-common.c +3 -17
- data/ruby/trema/action-common.h +3 -7
- data/ruby/trema/action.rb +33 -0
- data/ruby/trema/app.rb +1 -1
- data/ruby/trema/barrier-request.c +1 -0
- data/ruby/trema/command/run.rb +13 -9
- data/ruby/trema/command/usage.rb +1 -0
- data/ruby/trema/command/version.rb +1 -1
- data/ruby/trema/controller.c +133 -50
- data/ruby/trema/controller.rb +2 -2
- data/ruby/trema/desc-stats-reply.rb +77 -0
- data/ruby/trema/dsl/configuration.rb +3 -14
- data/ruby/trema/dsl/rswitch.rb +47 -0
- data/ruby/trema/dsl/runner.rb +4 -1
- data/ruby/trema/dsl/syntax.rb +11 -8
- data/ruby/trema/echo-reply.c +59 -45
- data/ruby/trema/echo-reply.h +1 -3
- data/ruby/trema/echo-request.c +49 -71
- data/ruby/trema/echo-request.h +0 -2
- data/ruby/trema/echo.c +99 -0
- data/ruby/trema/{action-enqueue.h → echo.h} +6 -7
- data/ruby/trema/enqueue.rb +87 -0
- data/ruby/trema/error.c +109 -104
- data/ruby/trema/error.h +0 -2
- data/ruby/trema/features-reply.c +89 -35
- data/ruby/trema/features-reply.h +0 -6
- data/ruby/trema/features-request.c +63 -37
- data/ruby/trema/features-request.h +0 -2
- data/ruby/trema/flow-mod.c +149 -0
- data/ruby/trema/{action-output.h → flow-mod.h} +6 -6
- data/ruby/trema/get-config-request.c +1 -0
- data/ruby/trema/hardware-switch.rb +88 -0
- data/ruby/trema/hello.c +55 -31
- data/ruby/trema/hello.h +0 -2
- data/ruby/trema/ip.rb +12 -2
- data/ruby/trema/logger.rb +29 -0
- data/ruby/trema/mac.rb +57 -36
- data/ruby/trema/match.c +7 -9
- data/ruby/trema/monkey-patch/integer/ranges.rb +0 -2
- data/ruby/trema/network-component.rb +1 -1
- data/ruby/trema/open-vswitch.rb +2 -2
- data/ruby/trema/openflow-switch.rb +3 -54
- data/ruby/trema/{packet_in.c → packet-in.c} +262 -175
- data/ruby/trema/{packet_in.h → packet-in.h} +0 -2
- data/ruby/trema/packet-queue.rb +4 -3
- data/ruby/trema/port-mod.c +8 -9
- data/ruby/trema/port-status-add.rb +60 -0
- data/ruby/trema/port-status-delete.rb +60 -0
- data/ruby/trema/port-status-modify.rb +60 -0
- data/ruby/trema/port-status.c +48 -15
- data/ruby/trema/port-status.h +6 -8
- data/ruby/trema/port.c +63 -8
- data/ruby/trema/queue-get-config-request.c +1 -0
- data/ruby/trema/ruby-switch.rb +62 -0
- data/ruby/trema/send-out-port.rb +97 -0
- data/ruby/trema/set-config.c +1 -0
- data/ruby/trema/set-eth-addr.rb +45 -0
- data/ruby/trema/set-eth-dst-addr.rb +54 -0
- data/ruby/trema/set-eth-src-addr.rb +54 -0
- data/ruby/trema/set-ip-addr.rb +47 -0
- data/ruby/trema/set-ip-dst-addr.rb +53 -0
- data/ruby/trema/set-ip-src-addr.rb +52 -0
- data/ruby/trema/set-ip-tos.rb +63 -0
- data/ruby/trema/set-transport-dst-port.rb +53 -0
- data/ruby/trema/set-transport-port.rb +52 -0
- data/ruby/trema/set-transport-src-port.rb +54 -0
- data/ruby/trema/set-vlan-priority.rb +65 -0
- data/ruby/trema/set-vlan-vid.rb +64 -0
- data/ruby/trema/shell/down.rb +1 -1
- data/ruby/trema/shell/link.rb +4 -4
- data/ruby/trema/shell/run.rb +8 -6
- data/ruby/trema/shell/up.rb +3 -3
- data/ruby/trema/stats-reply.c +27 -2
- data/ruby/trema/stats-request.c +64 -23
- data/ruby/trema/strip-vlan-header.rb +41 -0
- data/ruby/trema/switch.c +196 -0
- data/ruby/trema/{action-vendor.h → switch.h} +5 -7
- data/ruby/trema/switch.rb +28 -9
- data/ruby/trema/trema-ruby-utils.c +66 -0
- data/ruby/trema/{action-set-dl-src.h → trema-ruby-utils.h} +9 -11
- data/ruby/trema/trema.c +61 -61
- data/ruby/trema/vendor-action.rb +73 -0
- data/ruby/trema/vendor.c +121 -52
- data/ruby/trema/vendor.h +6 -10
- data/ruby/trema/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/action.rb +52 -0
- data/spec/support/mandatory-option.rb +56 -0
- data/spec/support/openflow-message.rb +91 -7
- data/spec/support/port-status.rb +38 -0
- data/spec/trema/controller_spec.rb +0 -26
- data/spec/trema/dsl/configuration_spec.rb +3 -3
- data/spec/trema/dsl/runner_spec.rb +12 -32
- data/spec/trema/dsl/syntax_spec.rb +2 -11
- data/spec/trema/echo-reply_spec.rb +49 -14
- data/spec/trema/echo-request_spec.rb +86 -34
- data/spec/trema/enqueue_spec.rb +76 -0
- data/spec/trema/error_spec.rb +43 -58
- data/spec/trema/features-reply_spec.rb +58 -24
- data/spec/trema/features-request_spec.rb +54 -28
- data/spec/trema/flow-mod_spec.rb +99 -0
- data/spec/trema/{openflow-switch_spec.rb → hardware-switch_spec.rb} +3 -3
- data/spec/trema/hello_spec.rb +28 -14
- data/spec/trema/ip_spec.rb +54 -0
- data/spec/trema/mac_spec.rb +49 -64
- data/spec/trema/match_spec.rb +1 -1
- data/spec/trema/open-vswitch_spec.rb +7 -7
- data/spec/trema/packet-in_spec.rb +73 -16
- data/spec/trema/port-status-add_spec.rb +32 -0
- data/spec/trema/port-status-delete_spec.rb +32 -0
- data/spec/trema/port-status-modify_spec.rb +71 -0
- data/spec/trema/port-status_spec.rb +5 -76
- data/spec/trema/{action-output_spec.rb → send-out-port_spec.rb} +20 -47
- data/spec/trema/set-eth-dst-addr_spec.rb +75 -0
- data/spec/trema/set-eth-src-addr_spec.rb +72 -0
- data/spec/trema/set-ip-dst-addr_spec.rb +58 -0
- data/spec/trema/set-ip-src-addr_spec.rb +58 -0
- data/spec/trema/set-ip-tos_spec.rb +65 -0
- data/spec/trema/set-transport-dst-port_spec.rb +65 -0
- data/spec/trema/set-transport-src-port_spec.rb +65 -0
- data/spec/trema/set-vlan-priority_spec.rb +65 -0
- data/spec/trema/set-vlan-vid_spec.rb +65 -0
- data/spec/trema/shell/vhost_spec.rb +4 -1
- data/spec/trema/shell/vswitch_spec.rb +11 -11
- data/spec/trema/stats-reply_spec.rb +59 -13
- data/spec/trema/stats-request_spec.rb +6 -0
- data/spec/trema/{action-strip-vlan_spec.rb → strip-vlan-header_spec.rb} +3 -17
- data/spec/trema/switch-daemon_spec.rb +39 -0
- data/spec/trema/vendor-action_spec.rb +81 -0
- data/spec/trema/vendor_spec.rb +76 -0
- data/spec/trema_spec.rb +56 -0
- data/src/examples/dumper/dumper.c +0 -8
- data/src/examples/dumper/dumper.rb +52 -52
- data/src/examples/hello_trema/hello_trema.c +0 -2
- data/src/examples/learning_switch/learning-switch.rb +3 -3
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +3 -3
- data/src/examples/openflow_message/features-request.rb +3 -3
- data/src/examples/packetin_filter_config/utils.c +4 -4
- data/src/examples/repeater_hub/repeater-hub.rb +3 -3
- data/src/examples/switch_info/switch_info.rb +2 -2
- data/src/examples/switch_monitor/switch_monitor.c +1 -1
- data/src/examples/traffic_monitor/traffic-monitor.rb +3 -3
- data/src/lib/arp.h +4 -1
- data/src/lib/chibach.c +391 -0
- data/src/lib/chibach.h +71 -0
- data/src/lib/chibach_private.c +170 -0
- data/src/lib/chibach_private.h +52 -0
- data/src/lib/ether.c +2 -1
- data/src/lib/ether.h +0 -1
- data/src/lib/ipv4.h +13 -14
- data/{ruby/trema/action-set-nw-src.h → src/lib/ipv6.h} +13 -9
- data/src/lib/log.c +161 -58
- data/src/lib/log.h +11 -16
- data/src/lib/messenger.c +36 -1
- data/src/lib/messenger.h +1 -0
- data/src/lib/openflow_application_interface.c +128 -28
- data/src/lib/openflow_application_interface.h +31 -6
- data/src/lib/openflow_message.c +2 -1
- data/src/lib/openflow_service_interface.h +1 -0
- data/src/lib/openflow_switch_interface.c +1380 -0
- data/src/lib/openflow_switch_interface.h +264 -0
- data/src/lib/packet_info.c +94 -11
- data/src/lib/packet_info.h +22 -3
- data/src/lib/packet_parser.c +38 -2
- data/src/lib/secure_channel.c +498 -0
- data/{ruby/trema/vendor-request.h → src/lib/secure_channel.h} +11 -10
- data/src/lib/tcp.h +0 -3
- data/src/lib/trema.c +38 -5
- data/{ruby/trema/action-set-nw-dst.h → src/lib/trema.hpp} +17 -8
- data/src/lib/trema_wrapper.c +5 -0
- data/src/lib/trema_wrapper.h +4 -0
- data/src/lib/utility.c +93 -4
- data/src/lib/utility.h +1 -0
- data/src/lib/wrapper.c +30 -7
- data/src/lib/wrapper.h +2 -0
- data/src/switch_manager/ofpmsg_recv.c +44 -30
- data/src/switch_manager/ofpmsg_send.c +40 -1
- data/src/switch_manager/ofpmsg_send.h +2 -0
- data/src/switch_manager/switch.c +153 -8
- data/src/switch_manager/switch.h +1 -0
- data/src/switch_manager/switchinfo.h +5 -0
- data/src/tremashark/README +2 -2
- data/src/tremashark/plugin/packet-trema/packet-trema.c +1 -0
- data/trema +1 -1
- data/unittests/lib/log_test.c +158 -34
- data/unittests/lib/openflow_application_interface_test.c +252 -69
- data/unittests/lib/openflow_message_test.c +3 -1
- data/unittests/lib/packet_parser_test.c +60 -15
- data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
- data/unittests/lib/trema_test.c +2 -0
- data/unittests/lib/utility_test.c +65 -2
- data/unittests/lib/wrapper_test.c +29 -0
- data/vendor/{README → README.md} +2 -12
- data/vendor/packet-openflow.diff +13 -0
- metadata +86 -53
- data/GPL2 +0 -339
- data/ruby/trema/action-enqueue.c +0 -161
- data/ruby/trema/action-output.c +0 -169
- data/ruby/trema/action-set-dl-dst.c +0 -131
- data/ruby/trema/action-set-dl-dst.h +0 -44
- data/ruby/trema/action-set-dl-src.c +0 -131
- data/ruby/trema/action-set-nw-dst.c +0 -135
- data/ruby/trema/action-set-nw-src.c +0 -140
- data/ruby/trema/action-set-nw-tos.c +0 -124
- data/ruby/trema/action-set-nw-tos.h +0 -42
- data/ruby/trema/action-set-tp-dst.c +0 -122
- data/ruby/trema/action-set-tp-dst.h +0 -42
- data/ruby/trema/action-set-tp-src.c +0 -124
- data/ruby/trema/action-set-tp-src.h +0 -42
- data/ruby/trema/action-set-vlan-pcp.c +0 -128
- data/ruby/trema/action-set-vlan-pcp.h +0 -42
- data/ruby/trema/action-set-vlan-vid.c +0 -125
- data/ruby/trema/action-set-vlan-vid.h +0 -42
- data/ruby/trema/action-strip-vlan.c +0 -81
- data/ruby/trema/action-strip-vlan.h +0 -42
- data/ruby/trema/action-vendor.c +0 -121
- data/ruby/trema/vendor-request.c +0 -193
- data/spec/trema/action-enqueue_spec.rb +0 -100
- data/spec/trema/action-set-dl-dst_spec.rb +0 -95
- data/spec/trema/action-set-dl-src_spec.rb +0 -92
- data/spec/trema/action-set-nw-dst_spec.rb +0 -96
- data/spec/trema/action-set-nw-src_spec.rb +0 -97
- data/spec/trema/action-set-nw-tos_spec.rb +0 -88
- data/spec/trema/action-set-tp-dst_spec.rb +0 -88
- data/spec/trema/action-set-tp-src_spec.rb +0 -88
- data/spec/trema/action-set-vlan-pcp_spec.rb +0 -91
- data/spec/trema/action-set-vlan-vid_spec.rb +0 -91
- data/spec/trema/action-vendor_spec.rb +0 -90
- data/spec/trema/vendor-request_spec.rb +0 -79
@@ -0,0 +1,65 @@
|
|
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 File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
+
require "trema"
|
21
|
+
|
22
|
+
|
23
|
+
describe SetTransportSrcPort, "new( number )" do
|
24
|
+
subject { SetTransportSrcPort.new number }
|
25
|
+
|
26
|
+
context "when number == 5555" do
|
27
|
+
let( :number ) { 5555 }
|
28
|
+
its( :port_number ) { should == 5555 }
|
29
|
+
end
|
30
|
+
|
31
|
+
it_validates "option range", :number, 0..( 2 ** 16 - 1 )
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe SetTransportSrcPort, ".new( string )" do
|
36
|
+
it { expect { SetTransportSrcPort.new( "5555" ) }.to raise_error( TypeError ) }
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
describe SetTransportSrcPort, ".new( array )" do
|
41
|
+
it { expect { SetTransportSrcPort.new( [ 1, 2, 3 ] ) }.to raise_error( TypeError ) }
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe SetTransportSrcPort, ".new( VALID OPTION )" do
|
46
|
+
context "when sending #flow_mod(add) with action set to mod_tp_src" do
|
47
|
+
it "should have a flow with action set to mod_tp_src" do
|
48
|
+
class FlowModAddController < Controller; end
|
49
|
+
network {
|
50
|
+
vswitch { datapath_id 0xabc }
|
51
|
+
}.run( FlowModAddController ) {
|
52
|
+
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetTransportSrcPort.new( 5555 ) )
|
53
|
+
vswitch( "0xabc" ).should have( 1 ).flows
|
54
|
+
vswitch( "0xabc" ).flows[0].actions.should match( /mod_tp_src:5555/ )
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
### Local variables:
|
62
|
+
### mode: Ruby
|
63
|
+
### coding: utf-8-unix
|
64
|
+
### indent-tabs-mode: nil
|
65
|
+
### End:
|
@@ -0,0 +1,65 @@
|
|
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 File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
+
require "trema"
|
21
|
+
|
22
|
+
|
23
|
+
describe SetVlanPriority, ".new( number )" do
|
24
|
+
subject { SetVlanPriority.new( vlan_priority ) }
|
25
|
+
|
26
|
+
context "when vlan_priority == 4" do
|
27
|
+
let( :vlan_priority ) { 4 }
|
28
|
+
its( :vlan_priority ) { should == 4 }
|
29
|
+
end
|
30
|
+
|
31
|
+
it_validates "option range", :vlan_priority, 0..7
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe SetVlanPriority, %{.new( "4" )} do
|
36
|
+
it { expect { SetVlanPriority.new( "4" ) }.to raise_error( TypeError ) }
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
describe SetVlanPriority, ".new( [ 4 ] )" do
|
41
|
+
it { expect { SetVlanPriority.new( [ 4 ] ) }.to raise_error( TypeError ) }
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe SetVlanPriority, ".new( VALID OPTION )" do
|
46
|
+
context "when sending #flow_mod(add) with action set to mod_vlan_pcp" do
|
47
|
+
it "should have a flow with action set to mod_vlan_pcp" do
|
48
|
+
class FlowModAddController < Controller; end
|
49
|
+
network {
|
50
|
+
vswitch { datapath_id 0xabc }
|
51
|
+
}.run( FlowModAddController ) {
|
52
|
+
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetVlanPriority.new( 7 ) )
|
53
|
+
vswitch( "0xabc" ).should have( 1 ).flows
|
54
|
+
vswitch( "0xabc" ).flows[0].actions.should match( /mod_vlan_pcp:7/ )
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
### Local variables:
|
62
|
+
### mode: Ruby
|
63
|
+
### coding: utf-8-unix
|
64
|
+
### indent-tabs-mode: nil
|
65
|
+
### End:
|
@@ -0,0 +1,65 @@
|
|
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 File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
+
require "trema"
|
21
|
+
|
22
|
+
|
23
|
+
describe SetVlanVid, ".new( number )" do
|
24
|
+
subject { SetVlanVid.new( vlan_id ) }
|
25
|
+
|
26
|
+
context "when vlan_id == 1024" do
|
27
|
+
let( :vlan_id ) { 1024 }
|
28
|
+
its( :vlan_id ) { should == 1024 }
|
29
|
+
end
|
30
|
+
|
31
|
+
it_validates "option range", :vlan_id, 1..4096
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe SetVlanVid, %{.new( "1024" )} do
|
36
|
+
it { expect { SetVlanVid.new( "1024" ) }.to raise_error( TypeError ) }
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
describe SetVlanVid, ".new( [ 1024 ] )" do
|
41
|
+
it { expect { SetVlanVid.new( [ 1024 ] ) }.to raise_error( TypeError ) }
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe SetVlanVid, ".new( VALID OPTION )" do
|
46
|
+
context "when sending #flow_mod(add) with action set to mod_vlan_vid" do
|
47
|
+
it "should have a flow with action set to mod_vlan_vid" do
|
48
|
+
class FlowModAddController < Controller; end
|
49
|
+
network {
|
50
|
+
vswitch { datapath_id 0xabc }
|
51
|
+
}.run( FlowModAddController ) {
|
52
|
+
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetVlanVid.new( 1024 ) )
|
53
|
+
vswitch( "0xabc" ).should have( 1 ).flows
|
54
|
+
vswitch( "0xabc" ).flows[0].actions.should match( /mod_vlan_vid:1024/ )
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
### Local variables:
|
62
|
+
### mode: Ruby
|
63
|
+
### coding: utf-8-unix
|
64
|
+
### indent-tabs-mode: nil
|
65
|
+
### End:
|
@@ -22,7 +22,10 @@ require File.join( File.dirname( __FILE__ ), "..", "..", "spec_helper" )
|
|
22
22
|
|
23
23
|
|
24
24
|
describe Trema::Shell, ".vhost" do
|
25
|
-
before {
|
25
|
+
before {
|
26
|
+
Trema::Host.clear
|
27
|
+
$context = mock( "context", :dump => true )
|
28
|
+
}
|
26
29
|
|
27
30
|
|
28
31
|
it "should create a new vhost if name given" do
|
@@ -23,9 +23,9 @@ require File.join( File.dirname( __FILE__ ), "..", "..", "spec_helper" )
|
|
23
23
|
|
24
24
|
describe Trema::Shell, ".vswitch" do
|
25
25
|
around do | example |
|
26
|
-
Trema::
|
26
|
+
Trema::OpenflowSwitch.clear
|
27
27
|
example.run
|
28
|
-
Trema::
|
28
|
+
Trema::OpenflowSwitch.clear
|
29
29
|
end
|
30
30
|
|
31
31
|
|
@@ -46,25 +46,25 @@ describe Trema::Shell, ".vswitch" do
|
|
46
46
|
$config = mock( "config", :port => 6633 )
|
47
47
|
$context = mock( "context", :dump => true )
|
48
48
|
}
|
49
|
-
after { Trema::
|
49
|
+
after { Trema::OpenflowSwitch[ "0xabc" ].shutdown! if Trema::OpenflowSwitch[ "0xabc" ] }
|
50
50
|
|
51
51
|
|
52
52
|
it "should create a new vswitch if name given" do
|
53
53
|
Trema::Shell.vswitch { dpid "0xabc" }
|
54
|
-
Trema::
|
55
|
-
Trema::
|
56
|
-
Trema::
|
57
|
-
Trema::
|
54
|
+
Trema::OpenflowSwitch.should have( 1 ).switch
|
55
|
+
Trema::OpenflowSwitch[ "0xabc" ].name.should == "0xabc"
|
56
|
+
Trema::OpenflowSwitch[ "0xabc" ].dpid_short.should == "0xabc"
|
57
|
+
Trema::OpenflowSwitch[ "0xabc" ].dpid_long.should == "0000000000000abc"
|
58
58
|
end
|
59
59
|
|
60
60
|
|
61
61
|
it "should create a new vswitch if dpid given" do
|
62
62
|
Trema::Shell.vswitch "0xabc"
|
63
63
|
|
64
|
-
Trema::
|
65
|
-
Trema::
|
66
|
-
Trema::
|
67
|
-
Trema::
|
64
|
+
Trema::OpenflowSwitch.should have( 1 ).switch
|
65
|
+
Trema::OpenflowSwitch[ "0xabc" ].name.should == "0xabc"
|
66
|
+
Trema::OpenflowSwitch[ "0xabc" ].dpid_short.should == "0xabc"
|
67
|
+
Trema::OpenflowSwitch[ "0xabc" ].dpid_long.should == "0000000000000abc"
|
68
68
|
end
|
69
69
|
|
70
70
|
|
@@ -23,6 +23,26 @@ require "trema"
|
|
23
23
|
|
24
24
|
|
25
25
|
describe StatsReply, ".new( VALID OPTIONS )" do
|
26
|
+
context "when #desc-stats-reply is created" do
|
27
|
+
subject do
|
28
|
+
DescStatsReply.new(
|
29
|
+
:mfr_desc => "NEC Corporation",
|
30
|
+
:hw_desc => "no hardware description",
|
31
|
+
:sw_desc => "version xx.xx",
|
32
|
+
:serial_num => "1234",
|
33
|
+
:dp_desc => "nec01"
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
it { should respond_to( :to_s ) }
|
38
|
+
its ( :mfr_desc ) { should eq( "NEC Corporation" ) }
|
39
|
+
its ( :hw_desc ) { should eq( "no hardware description" ) }
|
40
|
+
its ( :sw_desc ) { should eq( "version xx.xx" ) }
|
41
|
+
its ( :serial_num ) { should eq( "1234" ) }
|
42
|
+
its ( :dp_desc ) { should eq( "nec01" ) }
|
43
|
+
end
|
44
|
+
|
45
|
+
|
26
46
|
context "when #flow-stats-reply is created" do
|
27
47
|
subject do
|
28
48
|
actions = [ ActionOutput.new( :port => 1 ) ]
|
@@ -163,6 +183,28 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
163
183
|
end
|
164
184
|
|
165
185
|
|
186
|
+
context "when #stats_request(desc-stats) is sent" do
|
187
|
+
it "should #stats_reply(desc-stats)" do
|
188
|
+
class DescStatsController < Controller; end
|
189
|
+
network {
|
190
|
+
vswitch( "desc-stats" ) { datapath_id 0xabc }
|
191
|
+
}.run( DescStatsController ) {
|
192
|
+
controller( "DescStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
193
|
+
datapath_id.should == 0xabc
|
194
|
+
message.type.should == 0
|
195
|
+
message.stats[ 0 ].mfr_desc.should eq( "Nicira Networks, Inc." )
|
196
|
+
message.stats[ 0 ].hw_desc.should eq( "Open vSwitch" )
|
197
|
+
message.stats[ 0 ].should respond_to :to_s
|
198
|
+
end
|
199
|
+
|
200
|
+
controller( "DescStatsController" ).send_message( 0xabc,
|
201
|
+
DescStatsRequest.new( :transaction_id => 1234 ) )
|
202
|
+
sleep 2 # FIXME: wait to send_message
|
203
|
+
}
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
|
166
208
|
context "when #stats_request(flow-stats) is sent" do
|
167
209
|
it "should #stats_reply(flow-stats)" do
|
168
210
|
class FlowStatsController < Controller; end
|
@@ -185,10 +227,11 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
185
227
|
send_packets "host1", "host2", :n_pkts => 2
|
186
228
|
sleep 2 # FIXME: wait to send_packets
|
187
229
|
|
188
|
-
controller( "FlowStatsController" ).should_receive( :stats_reply ) do | message |
|
230
|
+
controller( "FlowStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
231
|
+
datapath_id.should == 0xabc
|
189
232
|
message.type.should == 1
|
190
|
-
message.stats[0].packet_count.should == 2
|
191
|
-
message.stats[0].should respond_to :to_s
|
233
|
+
message.stats[ 0 ].packet_count.should == 2
|
234
|
+
message.stats[ 0 ].should respond_to :to_s
|
192
235
|
end
|
193
236
|
match = Match.new( :dl_type =>0x800, :nw_proto => 17 )
|
194
237
|
controller( "FlowStatsController" ).send_message( 0xabc,
|
@@ -221,11 +264,12 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
221
264
|
send_packets "host1", "host2", :n_pkts => 10
|
222
265
|
sleep 2 # FIXME: wait to send_packets
|
223
266
|
|
224
|
-
controller( "AggregateStatsController" ).should_receive( :stats_reply ) do | message |
|
267
|
+
controller( "AggregateStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
268
|
+
datapath_id.should == 0xabc
|
225
269
|
message.type.should == 2
|
226
|
-
message.stats[0].packet_count.should == 10
|
227
|
-
message.stats[0].flow_count.should == 1
|
228
|
-
message.stats[0].should respond_to :to_s
|
270
|
+
message.stats[ 0 ].packet_count.should == 10
|
271
|
+
message.stats[ 0 ].flow_count.should == 1
|
272
|
+
message.stats[ 0 ].should respond_to :to_s
|
229
273
|
end
|
230
274
|
match = Match.new( :dl_type =>0x800, :nw_proto => 17 )
|
231
275
|
controller( "AggregateStatsController" ).send_message( 0xabc,
|
@@ -254,10 +298,11 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
254
298
|
send_packets "host1", "host2"
|
255
299
|
sleep 2 # FIXME: wait to send_packets
|
256
300
|
|
257
|
-
controller( "PortStatsController" ).should_receive( :stats_reply ) do | message |
|
301
|
+
controller( "PortStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
302
|
+
datapath_id.should == 0xabc
|
258
303
|
message.type.should == 4
|
259
|
-
message.stats[0].should be_an_instance_of(Trema::PortStatsReply)
|
260
|
-
message.stats[0].should respond_to :to_s
|
304
|
+
message.stats[ 0 ].should be_an_instance_of(Trema::PortStatsReply)
|
305
|
+
message.stats[ 0 ].should respond_to :to_s
|
261
306
|
end
|
262
307
|
controller( "PortStatsController" ).send_message( 0xabc,
|
263
308
|
PortStatsRequest.new( :port_no => 1 ) )
|
@@ -284,11 +329,12 @@ describe StatsReply, ".new( VALID OPTIONS )" do
|
|
284
329
|
send_packets "host1", "host2"
|
285
330
|
sleep 2 # FIXME: wait to send_packets
|
286
331
|
|
287
|
-
controller( "TableStatsController" ).should_receive( :stats_reply ) do | message |
|
332
|
+
controller( "TableStatsController" ).should_receive( :stats_reply ) do | datapath_id, message |
|
333
|
+
datapath_id.should == 0xabc
|
288
334
|
message.type.should == 3
|
289
335
|
message.transaction_id.should == 123
|
290
|
-
message.stats[0].should be_an_instance_of(Trema::TableStatsReply)
|
291
|
-
message.stats[0].should respond_to :to_s
|
336
|
+
message.stats[ 0 ].should be_an_instance_of(Trema::TableStatsReply)
|
337
|
+
message.stats[ 0 ].should respond_to :to_s
|
292
338
|
end
|
293
339
|
controller( "TableStatsController" ).send_message( 0xabc,
|
294
340
|
TableStatsRequest.new( :transaction_id => 123 ) )
|
@@ -29,6 +29,12 @@ end
|
|
29
29
|
|
30
30
|
|
31
31
|
describe StatsRequest do
|
32
|
+
context "when .DescStatsRequest.new( VALID OPTIONS )" do
|
33
|
+
subject { DescStatsRequest.new }
|
34
|
+
it_should_behave_like "any stats-request"
|
35
|
+
end
|
36
|
+
|
37
|
+
|
32
38
|
context "when .FlowStatsRequest.new( MANDATORY OPTION MISSING )" do
|
33
39
|
subject { FlowStatsRequest.new }
|
34
40
|
it "should raise ArgumentError" do
|
@@ -1,6 +1,4 @@
|
|
1
1
|
#
|
2
|
-
# Author: Nick Karanatsios <nickkaranatsios@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
|
@@ -22,28 +20,16 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
|
22
20
|
require "trema"
|
23
21
|
|
24
22
|
|
25
|
-
describe
|
23
|
+
describe StripVlanHeader, ".new" do
|
26
24
|
context "when sending #flow_mod(add) with action set to strip_vlan" do
|
27
|
-
it "should respond to #append" do
|
28
|
-
class FlowModAddController < Controller; end
|
29
|
-
network {
|
30
|
-
vswitch { datapath_id 0xabc }
|
31
|
-
}.run( FlowModAddController ) {
|
32
|
-
action = ActionStripVlan.new
|
33
|
-
action.should_receive( :append )
|
34
|
-
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => action )
|
35
|
-
}
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
25
|
it "should have a flow with action set to strip_vlan" do
|
40
26
|
class FlowModAddController < Controller; end
|
41
27
|
network {
|
42
28
|
vswitch { datapath_id 0xabc }
|
43
29
|
}.run( FlowModAddController ) {
|
44
|
-
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions =>
|
30
|
+
controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => StripVlanHeader.new )
|
45
31
|
vswitch( "0xabc" ).should have( 1 ).flows
|
46
|
-
vswitch( "0xabc" ).flows[0].actions.should match( /strip_vlan/ )
|
32
|
+
vswitch( "0xabc" ).flows[ 0 ].actions.should match( /strip_vlan/ )
|
47
33
|
}
|
48
34
|
end
|
49
35
|
end
|
@@ -0,0 +1,39 @@
|
|
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 File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
+
require "trema/switch-daemon"
|
21
|
+
|
22
|
+
|
23
|
+
module Trema
|
24
|
+
describe SwitchDaemon do
|
25
|
+
it "should be initialized with proper options" do
|
26
|
+
rule = { :port_status => "topology", :packet_in => "controller", :state_notify => "topology", :vendor => "controller" }
|
27
|
+
switch_daemon = SwitchDaemon.new( rule )
|
28
|
+
|
29
|
+
switch_daemon.options.should == [ "port_status::topology", "packet_in::controller", "state_notify::topology", "vendor::controller" ]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
### Local variables:
|
36
|
+
### mode: Ruby
|
37
|
+
### coding: utf-8-unix
|
38
|
+
### indent-tabs-mode: nil
|
39
|
+
### End:
|