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
@@ -1,100 +0,0 @@
1
- #
2
- # Author: Nick Karanatsios <nickkaranatsios@gmail.com>
3
- #
4
- # Copyright (C) 2008-2012 NEC Corporation
5
- #
6
- # This program is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License, version 2, as
8
- # published by the Free Software Foundation.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along
16
- # with this program; if not, write to the Free Software Foundation, Inc.,
17
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- #
19
-
20
-
21
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
- require "trema"
23
-
24
-
25
- shared_examples_for "any OpenFlow message with queue id option" do
26
- it_should_behave_like "any OpenFlow message", :option => :queue_id, :name => "Queue id", :size => 32
27
- end
28
-
29
-
30
- describe ActionEnqueue, "new( VALID OPTIONS )" do
31
- subject { ActionEnqueue.new :port => port, :queue_id => queue_id }
32
- let( :port ) { 1 }
33
- let( :queue_id ) { 123 }
34
- its ( :port ) { should == 1 }
35
- its ( :queue_id ) { should == 123 }
36
- it "should inspect its attributes" do
37
- subject.inspect.should == "#<Trema::ActionEnqueue port=1,queue_id=123>"
38
- end
39
- it_should_behave_like "any OpenFlow message with port option"
40
- it_should_behave_like "any OpenFlow message with queue id option"
41
- end
42
-
43
-
44
- describe ActionEnqueue, ".new( MANDADORY OPTION MISSING ) - queue id" do
45
- subject { ActionEnqueue.new :port => 1 }
46
- it "should raise ArgumentError" do
47
- expect { subject }.to raise_error( ArgumentError, /Queue id is a mandatory option/ )
48
- end
49
- end
50
-
51
-
52
- describe ActionEnqueue, ".new( MANDATORY OPTION MISSING ) - port" do
53
- subject { ActionEnqueue.new :queue_id => 123 }
54
- it "should raise ArgumentError" do
55
- expect { subject }.to raise_error( ArgumentError, /Port is a mandatory option/ )
56
- end
57
- end
58
-
59
-
60
- describe ActionEnqueue, ".new( MANDATORY OPTIONS MISSING ) - port, queue id" do
61
- it "should raise ArgumentError" do
62
- expect { subject }.to raise_error( ArgumentError, /Port, queue id are mandatory options/ )
63
- end
64
- end
65
-
66
-
67
- describe ActionEnqueue, ".new( VALID OPTIONS )" do
68
- context "when sending #flow_mod(add) with action set to enqueue" do
69
- it "should respond to #append" do
70
- class FlowModAddController < Controller; end
71
- network {
72
- vswitch { datapath_id 0xabc }
73
- }.run( FlowModAddController ) {
74
- action = ActionEnqueue.new( :port => 1, :queue_id => 123 )
75
- action.should_receive( :append )
76
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => action )
77
- }
78
- end
79
-
80
-
81
- it "should have a flow with action set to enqueue" do
82
- class FlowModAddController < Controller; end
83
- network {
84
- vswitch { datapath_id 0xabc }
85
- }.run( FlowModAddController ) {
86
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => ActionEnqueue.new( :port => 1, :queue_id => 123 ) )
87
- sleep 2 # FIXME: wait to send_flow_mod
88
- vswitch( "0xabc" ).should have( 1 ).flows
89
- vswitch( "0xabc" ).flows[0].actions.should match( /enqueue:1q123/ )
90
- }
91
- end
92
- end
93
- end
94
-
95
-
96
- ### Local variables:
97
- ### mode: Ruby
98
- ### coding: utf-8-unix
99
- ### indent-tabs-mode: nil
100
- ### End:
@@ -1,95 +0,0 @@
1
- #
2
- # Author: Nick Karanatsios <nickkaranatsios@gmail.com>
3
- #
4
- # Copyright (C) 2008-2012 NEC Corporation
5
- #
6
- # This program is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License, version 2, as
8
- # published by the Free Software Foundation.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along
16
- # with this program; if not, write to the Free Software Foundation, Inc.,
17
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- #
19
-
20
-
21
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
- require "trema"
23
-
24
-
25
- describe ActionSetDlDst, ".new( VALID OPTION )" do
26
- subject { ActionSetDlDst.new( :dl_dst => Mac.new( "52:54:00:a8:ad:8c" ) ) }
27
- its( :dl_dst ) { should be_an_instance_of( Mac ) }
28
- it "should inspect its attributes" do
29
- subject.inspect.should == "#<Trema::ActionSetDlDst dl_dst=52:54:00:a8:ad:8c>"
30
- end
31
- end
32
-
33
-
34
- describe ActionSetDlDst, ".new( MANDATORY OPTION MISSING )" do
35
- it "should raise ArgumentError" do
36
- expect { subject }.to raise_error( ArgumentError )
37
- end
38
- end
39
-
40
-
41
- describe ActionSetDlDst, ".new( INVALID OPTION )" do
42
- context "when argument type Array instead of Hash" do
43
- subject { ActionSetDlDst.new( [ Mac.new( '52:54:00:a8:ad:8c' ) ] ) }
44
- it "should raise TypeError" do
45
- expect { subject }.to raise_error( TypeError )
46
- end
47
- end
48
-
49
-
50
- context "when dl_dst not a Trema::Mac object" do
51
- subject { ActionSetDlDst.new :dl_dst => 1234 }
52
- it "should raise TypeError" do
53
- expect { subject }.to raise_error( TypeError, /dl dst address should be a Mac object/ )
54
- end
55
- end
56
- end
57
-
58
-
59
- describe ActionSetDlDst, ".new( VALID OPTION )" do
60
- context "when sending #flow_mod(add) with action set to mod_dl_dst" do
61
- it "should respond to #append" do
62
- class FlowModAddController < Controller; end
63
- network {
64
- vswitch { datapath_id 0xabc }
65
- }.run( FlowModAddController ) {
66
- action = ActionSetDlDst.new( :dl_dst => Mac.new( "52:54:00:a8:ad:8c" ) )
67
- action.should_receive( :append )
68
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => action )
69
- }
70
- end
71
-
72
-
73
- it "should have a flow with action set to mod_dl_dst" do
74
- class FlowModAddController < Controller; end
75
- network {
76
- vswitch { datapath_id 0xabc }
77
- }.run( FlowModAddController ) {
78
- controller( "FlowModAddController" ).send_flow_mod_add(
79
- 0xabc,
80
- :actions => ActionSetDlDst.new( :dl_dst => Mac.new( "52:54:00:a8:ad:8c" ) )
81
- )
82
- sleep 2 # FIXME: wait to send_flow_mod
83
- vswitch( "0xabc" ).should have( 1 ).flows
84
- vswitch( "0xabc" ).flows[0].actions.should match( /mod_dl_dst:52:54:00:a8:ad:8c/ )
85
- }
86
- end
87
- end
88
- end
89
-
90
-
91
- ### Local variables:
92
- ### mode: Ruby
93
- ### coding: utf-8-unix
94
- ### indent-tabs-mode: nil
95
- ### End:
@@ -1,92 +0,0 @@
1
- #
2
- # Author: Nick Karanatsios <nickkaranatsios@gmail.com>
3
- #
4
- # Copyright (C) 2008-2012 NEC Corporation
5
- #
6
- # This program is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License, version 2, as
8
- # published by the Free Software Foundation.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along
16
- # with this program; if not, write to the Free Software Foundation, Inc.,
17
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- #
19
-
20
-
21
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
- require "trema"
23
-
24
-
25
- describe ActionSetDlSrc, ".new( VALID OPTION )" do
26
- subject { ActionSetDlSrc.new( :dl_src => Mac.new( "52:54:00:a8:ad:8c" ) ) }
27
- its ( :dl_src ) { should be_an_instance_of( Trema::Mac ) }
28
- it "should inspect its attributes" do
29
- subject.inspect.should == "#<Trema::ActionSetDlSrc dl_src=52:54:00:a8:ad:8c>"
30
- end
31
- end
32
-
33
-
34
- describe ActionSetDlSrc, ".new( MANDATORY OPTION MISSING )" do
35
- it "should raise ArgumentError" do
36
- expect { subject }.to raise_error( ArgumentError )
37
- end
38
- end
39
-
40
-
41
- describe ActionSetDlSrc, ".new( INVALID OPTION )" do
42
- context "when argument type Array instead of Hash" do
43
- subject { ActionSetDlSrc.new( [ Mac.new( '52:54:00:a8:ad:8c' ) ] ) }
44
- it "should raise TypeError" do
45
- expect { subject }.to raise_error( TypeError )
46
- end
47
- end
48
-
49
-
50
- context "when dl_src not a Trema::Mac object" do
51
- subject { ActionSetDlSrc.new :dl_src => 1234 }
52
- it "should raise TypeError" do
53
- expect { subject }.to raise_error( TypeError, /dl src address should be a Mac object/ )
54
- end
55
- end
56
- end
57
-
58
-
59
- describe ActionSetDlSrc, ".new( VALID OPTION )" do
60
- context "when sending #flow_mod(add) with action set to mod_dl_src" do
61
- it "should respond to #append" do
62
- class FlowModAddController < Controller; end
63
- network {
64
- vswitch { datapath_id 0xabc }
65
- }.run( FlowModAddController ) {
66
- action = ActionSetDlSrc.new( :dl_src => Mac.new( "52:54:00:a8:ad:8c" ) )
67
- action.should_receive( :append )
68
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => action )
69
- }
70
- end
71
-
72
-
73
- it "should have a flow with action set to mod_dl_src" do
74
- class FlowModAddController < Controller; end
75
- network {
76
- vswitch { datapath_id 0xabc }
77
- }.run( FlowModAddController ) {
78
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => ActionSetDlSrc.new( :dl_src => Mac.new( "52:54:00:a8:ad:8c" ) ) )
79
- sleep 2 # FIXME: wait to send_flow_mod
80
- vswitch( "0xabc" ).should have( 1 ).flows
81
- vswitch( "0xabc" ).flows[0].actions.should match( /mod_dl_src:52:54:00:a8:ad:8c/ )
82
- }
83
- end
84
- end
85
- end
86
-
87
-
88
- ### Local variables:
89
- ### mode: Ruby
90
- ### coding: utf-8-unix
91
- ### indent-tabs-mode: nil
92
- ### End:
@@ -1,96 +0,0 @@
1
- #
2
- # Author: Nick Karanatsios <nickkaranatsios@gmail.com>
3
- #
4
- # Copyright (C) 2008-2012 NEC Corporation
5
- #
6
- # This program is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License, version 2, as
8
- # published by the Free Software Foundation.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along
16
- # with this program; if not, write to the Free Software Foundation, Inc.,
17
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- #
19
-
20
-
21
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
- require "trema"
23
- require "trema/ip"
24
-
25
-
26
- describe ActionSetNwDst, ".new( VALID OPTION )" do
27
- subject { ActionSetNwDst.new( :nw_dst => IP.new( "192.168.1.1" ) ) }
28
- its( :nw_dst ) { should be_an_instance_of Trema::IP }
29
- it "should inspect its attributes" do
30
- subject.inspect.should == "#<Trema::ActionSetNwDst nw_dst=192.168.1.1>"
31
- end
32
- it { should respond_to( :to_i ) }
33
- it "should return an Integer" do
34
- subject.nw_dst.to_i.should == 3232235777
35
- end
36
- end
37
-
38
-
39
- describe ActionSetNwDst, ".new( MANDATORY OPTION MISSING )" do
40
- it "should raise ArgumentError" do
41
- expect { subject }.to raise_error( ArgumentError )
42
- end
43
- end
44
-
45
-
46
- describe ActionSetNwDst, ".new( INVALID OPTION )" do
47
- context "when argument type Array instead of Hash" do
48
- subject { ActionSetNwDst.new( [ 1234 ] ) }
49
- it "should raise TypeError" do
50
- expect { subject }.to raise_error( TypeError )
51
- end
52
- end
53
-
54
-
55
- context "when nw dst not a Trema::IP object" do
56
- subject { ActionSetNwDst.new( :nw_dst => 1234 ) }
57
- it "should raise TypeError" do
58
- expect { subject }.to raise_error( TypeError, /nw dst address should be an IP object/ )
59
- end
60
- end
61
- end
62
-
63
-
64
- describe ActionSetNwDst, ".new( VALID OPTION )" do
65
- context "when sending #flow_mod(add) with action set to mod_nw_dst" do
66
- it "should respond to #append" do
67
- class FlowModAddController < Controller; end
68
- network {
69
- vswitch { datapath_id 0xabc }
70
- }.run( FlowModAddController ) {
71
- action = ActionSetNwDst.new( :nw_dst => IP.new( "192.168.1.1" ) )
72
- action.should_receive( :append )
73
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => action )
74
- }
75
- end
76
-
77
-
78
- it "should have a flow with action set to mod_nw_dst" do
79
- class FlowModAddController < Controller; end
80
- network {
81
- vswitch { datapath_id 0xabc }
82
- }.run( FlowModAddController ) {
83
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => ActionSetNwDst.new( :nw_dst => IP.new( "192.168.1.1" ) ) )
84
- vswitch( "0xabc" ).should have( 1 ).flows
85
- vswitch( "0xabc" ).flows[0].actions.should match( /mod_nw_dst:192.168.1.1/ )
86
- }
87
- end
88
- end
89
- end
90
-
91
-
92
- ### Local variables:
93
- ### mode: Ruby
94
- ### coding: utf-8-unix
95
- ### indent-tabs-mode: nil
96
- ### End:
@@ -1,97 +0,0 @@
1
- #
2
- # Author: Nick Karanatsios <nickkaranatsios@gmail.com>
3
- #
4
- # Copyright (C) 2008-2012 NEC Corporation
5
- #
6
- # This program is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License, version 2, as
8
- # published by the Free Software Foundation.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along
16
- # with this program; if not, write to the Free Software Foundation, Inc.,
17
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- #
19
-
20
-
21
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
- require "trema"
23
- require "trema/ip"
24
-
25
-
26
- describe ActionSetNwSrc, ".new( VALID OPTIONS )" do
27
- subject { ActionSetNwSrc.new( :nw_src => IP.new( "192.168.1.1" ) ) }
28
- its( :nw_src ) { should be_an_instance_of Trema::IP }
29
- it "should inspect its attributes" do
30
- subject.inspect.should == "#<Trema::ActionSetNwSrc nw_src=192.168.1.1>"
31
- end
32
- it { should respond_to( :to_i ) }
33
- it "should return an Integer" do
34
- subject.nw_src.to_i.should == 3232235777
35
- end
36
- end
37
-
38
-
39
- describe ActionSetNwSrc, ".new( MANDATORY OPTION MISSING )" do
40
- it "should raise ArgumentError" do
41
- expect { subject }.to raise_error( ArgumentError )
42
- end
43
- end
44
-
45
-
46
- describe ActionSetNwSrc, ".new( INVALID OPTION )" do
47
- context "when argument type Array instead of Hash" do
48
- subject { ActionSetNwSrc.new( [ 1234 ] ) }
49
- it "should raise TypeError" do
50
- expect { subject }.to raise_error( TypeError )
51
- end
52
- end
53
-
54
-
55
- context "when nw src not a Trema::IP object" do
56
- subject { ActionSetNwSrc.new( :nw_src => 1234 ) }
57
- it "should raise TypeError" do
58
- expect { subject }.to raise_error( TypeError, /nw src address should be an IP object/ )
59
- end
60
- end
61
- end
62
-
63
-
64
- describe ActionSetNwSrc, ".new( VALID OPTION )" do
65
- context "when sending #flow_mod(add) with action set to mod_nw_src" do
66
- it "should respond to #append" do
67
- class FlowModAddController < Controller; end
68
- network {
69
- vswitch { datapath_id 0xabc }
70
- }.run( FlowModAddController ) {
71
- action = ActionSetNwSrc.new( :nw_src => IP.new( "192.168.1.1" ) )
72
- action.should_receive( :append )
73
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => action )
74
- }
75
- end
76
-
77
-
78
- it "should have a flow with action set to mod_nw_src" do
79
- class FlowModAddController < Controller; end
80
- network {
81
- vswitch { datapath_id 0xabc }
82
- }.run( FlowModAddController ) {
83
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc,
84
- :actions => ActionSetNwSrc.new( :nw_src => IP.new( "192.168.1.1" ) ) )
85
- vswitch( "0xabc" ).should have( 1 ).flows
86
- vswitch( "0xabc" ).flows[0].actions.should match( /mod_nw_src:192.168.1.1/ )
87
- }
88
- end
89
- end
90
- end
91
-
92
-
93
- ### Local variables:
94
- ### mode: Ruby
95
- ### coding: utf-8-unix
96
- ### indent-tabs-mode: nil
97
- ### End: