trema 0.2.2.1 → 0.2.3
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/.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:
|