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.
Files changed (250) hide show
  1. data/.gitmodules +3 -0
  2. data/.travis.yml +13 -0
  3. data/.yardopts +4 -0
  4. data/Gemfile +2 -3
  5. data/README.md +43 -97
  6. data/Rakefile +60 -4
  7. data/Rantfile +11 -10
  8. data/cruise.rb +4 -6
  9. data/features/example.packetin_filter_config.feature +10 -10
  10. data/features/example.switch_monitor.feature +14 -2
  11. data/features/step_definitions/kill_steps.rb +2 -2
  12. data/features/step_definitions/{off_steps.rb → killall_steps.rb} +2 -2
  13. data/features/step_definitions/misc_steps.rb +1 -1
  14. data/features/step_definitions/up_steps.rb +30 -0
  15. data/features/trema.feature +1 -0
  16. data/features/trema.run.feature +1 -0
  17. data/locale/README.ja.md +19 -0
  18. data/locale/ja/yard.po +3762 -0
  19. data/locale/yard.pot +3740 -0
  20. data/ruby/extconf.rb +4 -1
  21. data/ruby/trema/action-common.c +3 -17
  22. data/ruby/trema/action-common.h +3 -7
  23. data/ruby/trema/action.rb +33 -0
  24. data/ruby/trema/app.rb +1 -1
  25. data/ruby/trema/barrier-request.c +1 -0
  26. data/ruby/trema/command/run.rb +13 -9
  27. data/ruby/trema/command/usage.rb +1 -0
  28. data/ruby/trema/command/version.rb +1 -1
  29. data/ruby/trema/controller.c +133 -50
  30. data/ruby/trema/controller.rb +2 -2
  31. data/ruby/trema/desc-stats-reply.rb +77 -0
  32. data/ruby/trema/dsl/configuration.rb +3 -14
  33. data/ruby/trema/dsl/rswitch.rb +47 -0
  34. data/ruby/trema/dsl/runner.rb +4 -1
  35. data/ruby/trema/dsl/syntax.rb +11 -8
  36. data/ruby/trema/echo-reply.c +59 -45
  37. data/ruby/trema/echo-reply.h +1 -3
  38. data/ruby/trema/echo-request.c +49 -71
  39. data/ruby/trema/echo-request.h +0 -2
  40. data/ruby/trema/echo.c +99 -0
  41. data/ruby/trema/{action-enqueue.h → echo.h} +6 -7
  42. data/ruby/trema/enqueue.rb +87 -0
  43. data/ruby/trema/error.c +109 -104
  44. data/ruby/trema/error.h +0 -2
  45. data/ruby/trema/features-reply.c +89 -35
  46. data/ruby/trema/features-reply.h +0 -6
  47. data/ruby/trema/features-request.c +63 -37
  48. data/ruby/trema/features-request.h +0 -2
  49. data/ruby/trema/flow-mod.c +149 -0
  50. data/ruby/trema/{action-output.h → flow-mod.h} +6 -6
  51. data/ruby/trema/get-config-request.c +1 -0
  52. data/ruby/trema/hardware-switch.rb +88 -0
  53. data/ruby/trema/hello.c +55 -31
  54. data/ruby/trema/hello.h +0 -2
  55. data/ruby/trema/ip.rb +12 -2
  56. data/ruby/trema/logger.rb +29 -0
  57. data/ruby/trema/mac.rb +57 -36
  58. data/ruby/trema/match.c +7 -9
  59. data/ruby/trema/monkey-patch/integer/ranges.rb +0 -2
  60. data/ruby/trema/network-component.rb +1 -1
  61. data/ruby/trema/open-vswitch.rb +2 -2
  62. data/ruby/trema/openflow-switch.rb +3 -54
  63. data/ruby/trema/{packet_in.c → packet-in.c} +262 -175
  64. data/ruby/trema/{packet_in.h → packet-in.h} +0 -2
  65. data/ruby/trema/packet-queue.rb +4 -3
  66. data/ruby/trema/port-mod.c +8 -9
  67. data/ruby/trema/port-status-add.rb +60 -0
  68. data/ruby/trema/port-status-delete.rb +60 -0
  69. data/ruby/trema/port-status-modify.rb +60 -0
  70. data/ruby/trema/port-status.c +48 -15
  71. data/ruby/trema/port-status.h +6 -8
  72. data/ruby/trema/port.c +63 -8
  73. data/ruby/trema/queue-get-config-request.c +1 -0
  74. data/ruby/trema/ruby-switch.rb +62 -0
  75. data/ruby/trema/send-out-port.rb +97 -0
  76. data/ruby/trema/set-config.c +1 -0
  77. data/ruby/trema/set-eth-addr.rb +45 -0
  78. data/ruby/trema/set-eth-dst-addr.rb +54 -0
  79. data/ruby/trema/set-eth-src-addr.rb +54 -0
  80. data/ruby/trema/set-ip-addr.rb +47 -0
  81. data/ruby/trema/set-ip-dst-addr.rb +53 -0
  82. data/ruby/trema/set-ip-src-addr.rb +52 -0
  83. data/ruby/trema/set-ip-tos.rb +63 -0
  84. data/ruby/trema/set-transport-dst-port.rb +53 -0
  85. data/ruby/trema/set-transport-port.rb +52 -0
  86. data/ruby/trema/set-transport-src-port.rb +54 -0
  87. data/ruby/trema/set-vlan-priority.rb +65 -0
  88. data/ruby/trema/set-vlan-vid.rb +64 -0
  89. data/ruby/trema/shell/down.rb +1 -1
  90. data/ruby/trema/shell/link.rb +4 -4
  91. data/ruby/trema/shell/run.rb +8 -6
  92. data/ruby/trema/shell/up.rb +3 -3
  93. data/ruby/trema/stats-reply.c +27 -2
  94. data/ruby/trema/stats-request.c +64 -23
  95. data/ruby/trema/strip-vlan-header.rb +41 -0
  96. data/ruby/trema/switch.c +196 -0
  97. data/ruby/trema/{action-vendor.h → switch.h} +5 -7
  98. data/ruby/trema/switch.rb +28 -9
  99. data/ruby/trema/trema-ruby-utils.c +66 -0
  100. data/ruby/trema/{action-set-dl-src.h → trema-ruby-utils.h} +9 -11
  101. data/ruby/trema/trema.c +61 -61
  102. data/ruby/trema/vendor-action.rb +73 -0
  103. data/ruby/trema/vendor.c +121 -52
  104. data/ruby/trema/vendor.h +6 -10
  105. data/ruby/trema/version.rb +1 -1
  106. data/spec/spec_helper.rb +1 -1
  107. data/spec/support/action.rb +52 -0
  108. data/spec/support/mandatory-option.rb +56 -0
  109. data/spec/support/openflow-message.rb +91 -7
  110. data/spec/support/port-status.rb +38 -0
  111. data/spec/trema/controller_spec.rb +0 -26
  112. data/spec/trema/dsl/configuration_spec.rb +3 -3
  113. data/spec/trema/dsl/runner_spec.rb +12 -32
  114. data/spec/trema/dsl/syntax_spec.rb +2 -11
  115. data/spec/trema/echo-reply_spec.rb +49 -14
  116. data/spec/trema/echo-request_spec.rb +86 -34
  117. data/spec/trema/enqueue_spec.rb +76 -0
  118. data/spec/trema/error_spec.rb +43 -58
  119. data/spec/trema/features-reply_spec.rb +58 -24
  120. data/spec/trema/features-request_spec.rb +54 -28
  121. data/spec/trema/flow-mod_spec.rb +99 -0
  122. data/spec/trema/{openflow-switch_spec.rb → hardware-switch_spec.rb} +3 -3
  123. data/spec/trema/hello_spec.rb +28 -14
  124. data/spec/trema/ip_spec.rb +54 -0
  125. data/spec/trema/mac_spec.rb +49 -64
  126. data/spec/trema/match_spec.rb +1 -1
  127. data/spec/trema/open-vswitch_spec.rb +7 -7
  128. data/spec/trema/packet-in_spec.rb +73 -16
  129. data/spec/trema/port-status-add_spec.rb +32 -0
  130. data/spec/trema/port-status-delete_spec.rb +32 -0
  131. data/spec/trema/port-status-modify_spec.rb +71 -0
  132. data/spec/trema/port-status_spec.rb +5 -76
  133. data/spec/trema/{action-output_spec.rb → send-out-port_spec.rb} +20 -47
  134. data/spec/trema/set-eth-dst-addr_spec.rb +75 -0
  135. data/spec/trema/set-eth-src-addr_spec.rb +72 -0
  136. data/spec/trema/set-ip-dst-addr_spec.rb +58 -0
  137. data/spec/trema/set-ip-src-addr_spec.rb +58 -0
  138. data/spec/trema/set-ip-tos_spec.rb +65 -0
  139. data/spec/trema/set-transport-dst-port_spec.rb +65 -0
  140. data/spec/trema/set-transport-src-port_spec.rb +65 -0
  141. data/spec/trema/set-vlan-priority_spec.rb +65 -0
  142. data/spec/trema/set-vlan-vid_spec.rb +65 -0
  143. data/spec/trema/shell/vhost_spec.rb +4 -1
  144. data/spec/trema/shell/vswitch_spec.rb +11 -11
  145. data/spec/trema/stats-reply_spec.rb +59 -13
  146. data/spec/trema/stats-request_spec.rb +6 -0
  147. data/spec/trema/{action-strip-vlan_spec.rb → strip-vlan-header_spec.rb} +3 -17
  148. data/spec/trema/switch-daemon_spec.rb +39 -0
  149. data/spec/trema/vendor-action_spec.rb +81 -0
  150. data/spec/trema/vendor_spec.rb +76 -0
  151. data/spec/trema_spec.rb +56 -0
  152. data/src/examples/dumper/dumper.c +0 -8
  153. data/src/examples/dumper/dumper.rb +52 -52
  154. data/src/examples/hello_trema/hello_trema.c +0 -2
  155. data/src/examples/learning_switch/learning-switch.rb +3 -3
  156. data/src/examples/multi_learning_switch/multi-learning-switch.rb +3 -3
  157. data/src/examples/openflow_message/features-request.rb +3 -3
  158. data/src/examples/packetin_filter_config/utils.c +4 -4
  159. data/src/examples/repeater_hub/repeater-hub.rb +3 -3
  160. data/src/examples/switch_info/switch_info.rb +2 -2
  161. data/src/examples/switch_monitor/switch_monitor.c +1 -1
  162. data/src/examples/traffic_monitor/traffic-monitor.rb +3 -3
  163. data/src/lib/arp.h +4 -1
  164. data/src/lib/chibach.c +391 -0
  165. data/src/lib/chibach.h +71 -0
  166. data/src/lib/chibach_private.c +170 -0
  167. data/src/lib/chibach_private.h +52 -0
  168. data/src/lib/ether.c +2 -1
  169. data/src/lib/ether.h +0 -1
  170. data/src/lib/ipv4.h +13 -14
  171. data/{ruby/trema/action-set-nw-src.h → src/lib/ipv6.h} +13 -9
  172. data/src/lib/log.c +161 -58
  173. data/src/lib/log.h +11 -16
  174. data/src/lib/messenger.c +36 -1
  175. data/src/lib/messenger.h +1 -0
  176. data/src/lib/openflow_application_interface.c +128 -28
  177. data/src/lib/openflow_application_interface.h +31 -6
  178. data/src/lib/openflow_message.c +2 -1
  179. data/src/lib/openflow_service_interface.h +1 -0
  180. data/src/lib/openflow_switch_interface.c +1380 -0
  181. data/src/lib/openflow_switch_interface.h +264 -0
  182. data/src/lib/packet_info.c +94 -11
  183. data/src/lib/packet_info.h +22 -3
  184. data/src/lib/packet_parser.c +38 -2
  185. data/src/lib/secure_channel.c +498 -0
  186. data/{ruby/trema/vendor-request.h → src/lib/secure_channel.h} +11 -10
  187. data/src/lib/tcp.h +0 -3
  188. data/src/lib/trema.c +38 -5
  189. data/{ruby/trema/action-set-nw-dst.h → src/lib/trema.hpp} +17 -8
  190. data/src/lib/trema_wrapper.c +5 -0
  191. data/src/lib/trema_wrapper.h +4 -0
  192. data/src/lib/utility.c +93 -4
  193. data/src/lib/utility.h +1 -0
  194. data/src/lib/wrapper.c +30 -7
  195. data/src/lib/wrapper.h +2 -0
  196. data/src/switch_manager/ofpmsg_recv.c +44 -30
  197. data/src/switch_manager/ofpmsg_send.c +40 -1
  198. data/src/switch_manager/ofpmsg_send.h +2 -0
  199. data/src/switch_manager/switch.c +153 -8
  200. data/src/switch_manager/switch.h +1 -0
  201. data/src/switch_manager/switchinfo.h +5 -0
  202. data/src/tremashark/README +2 -2
  203. data/src/tremashark/plugin/packet-trema/packet-trema.c +1 -0
  204. data/trema +1 -1
  205. data/unittests/lib/log_test.c +158 -34
  206. data/unittests/lib/openflow_application_interface_test.c +252 -69
  207. data/unittests/lib/openflow_message_test.c +3 -1
  208. data/unittests/lib/packet_parser_test.c +60 -15
  209. data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
  210. data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
  211. data/unittests/lib/trema_test.c +2 -0
  212. data/unittests/lib/utility_test.c +65 -2
  213. data/unittests/lib/wrapper_test.c +29 -0
  214. data/vendor/{README → README.md} +2 -12
  215. data/vendor/packet-openflow.diff +13 -0
  216. metadata +86 -53
  217. data/GPL2 +0 -339
  218. data/ruby/trema/action-enqueue.c +0 -161
  219. data/ruby/trema/action-output.c +0 -169
  220. data/ruby/trema/action-set-dl-dst.c +0 -131
  221. data/ruby/trema/action-set-dl-dst.h +0 -44
  222. data/ruby/trema/action-set-dl-src.c +0 -131
  223. data/ruby/trema/action-set-nw-dst.c +0 -135
  224. data/ruby/trema/action-set-nw-src.c +0 -140
  225. data/ruby/trema/action-set-nw-tos.c +0 -124
  226. data/ruby/trema/action-set-nw-tos.h +0 -42
  227. data/ruby/trema/action-set-tp-dst.c +0 -122
  228. data/ruby/trema/action-set-tp-dst.h +0 -42
  229. data/ruby/trema/action-set-tp-src.c +0 -124
  230. data/ruby/trema/action-set-tp-src.h +0 -42
  231. data/ruby/trema/action-set-vlan-pcp.c +0 -128
  232. data/ruby/trema/action-set-vlan-pcp.h +0 -42
  233. data/ruby/trema/action-set-vlan-vid.c +0 -125
  234. data/ruby/trema/action-set-vlan-vid.h +0 -42
  235. data/ruby/trema/action-strip-vlan.c +0 -81
  236. data/ruby/trema/action-strip-vlan.h +0 -42
  237. data/ruby/trema/action-vendor.c +0 -121
  238. data/ruby/trema/vendor-request.c +0 -193
  239. data/spec/trema/action-enqueue_spec.rb +0 -100
  240. data/spec/trema/action-set-dl-dst_spec.rb +0 -95
  241. data/spec/trema/action-set-dl-src_spec.rb +0 -92
  242. data/spec/trema/action-set-nw-dst_spec.rb +0 -96
  243. data/spec/trema/action-set-nw-src_spec.rb +0 -97
  244. data/spec/trema/action-set-nw-tos_spec.rb +0 -88
  245. data/spec/trema/action-set-tp-dst_spec.rb +0 -88
  246. data/spec/trema/action-set-tp-src_spec.rb +0 -88
  247. data/spec/trema/action-set-vlan-pcp_spec.rb +0 -91
  248. data/spec/trema/action-set-vlan-vid_spec.rb +0 -91
  249. data/spec/trema/action-vendor_spec.rb +0 -90
  250. 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 { $context = mock( "context", :dump => true ) }
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::Switch.clear
26
+ Trema::OpenflowSwitch.clear
27
27
  example.run
28
- Trema::Switch.clear
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::Switch[ "0xabc" ].shutdown! if Trema::Switch[ "0xabc" ] }
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::Switch.should have( 1 ).switch
55
- Trema::Switch[ "0xabc" ].name.should == "0xabc"
56
- Trema::Switch[ "0xabc" ].dpid_short.should == "0xabc"
57
- Trema::Switch[ "0xabc" ].dpid_long.should == "0000000000000abc"
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::Switch.should have( 1 ).switch
65
- Trema::Switch[ "0xabc" ].name.should == "0xabc"
66
- Trema::Switch[ "0xabc" ].dpid_short.should == "0xabc"
67
- Trema::Switch[ "0xabc" ].dpid_long.should == "0000000000000abc"
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 ActionStripVlan, ".new" do
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 => ActionStripVlan.new( ) )
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: