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,6 +1,4 @@
1
1
  #
2
- # Author: Yasuhito Takamiya <yasuhito@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,30 +20,66 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
20
  require "trema"
23
21
 
24
22
 
25
- describe FeaturesReply, ".new( VALID OPTIONS )" do
26
- subject { FeaturesReply.new( :datapath_id => 123,
27
- :transaction_id => 1234,
28
- :n_buffers => 256,
29
- :n_tables => 2,
30
- :capabilities => 135,
31
- :actions => 2047,
32
- :ports => ports
33
- )
34
- }
35
- its( :datapath_id ) { should == 123 }
36
- its( :transaction_id ) { should == 1234 }
37
- its( :n_buffers ) { should == 256 }
38
- its( :n_tables ) { should == 2 }
39
- its( :capabilities ) { should == 135 }
40
- its( :actions ) { should == 2047 }
41
- let( :ports ) { [ mock( "port #0" ), mock( "port #1" ), mock( "port #2" ) ] }
42
- its( :ports ) { subject.size.should == 3 }
43
- end
23
+ module Trema
24
+ describe FeaturesReply, ".new" do
25
+ it { expect { subject }.to raise_error( ArgumentError ) }
26
+ end
27
+
28
+
29
+ describe FeaturesReply, ".new(options...)" do
30
+ subject {
31
+ valid_options = {
32
+ :datapath_id => 123,
33
+ :transaction_id => 1234,
34
+ :n_buffers => 256,
35
+ :n_tables => 2,
36
+ :capabilities => 135,
37
+ :actions => 2047,
38
+ :ports => [ "port #0", "port #1", "port #2" ]
39
+ }
40
+ FeaturesReply.new( valid_options )
41
+ }
42
+
43
+ its( :datapath_id ) { should == 123 }
44
+ its( :transaction_id ) { should == 1234 }
45
+ its( :xid ) { should == 1234 }
46
+ its( :n_buffers ) { should == 256 }
47
+ its( :n_tables ) { should == 2 }
48
+ its( :capabilities ) { should == 135 }
49
+ its( :actions ) { should == 2047 }
50
+ its( :ports ) { subject.size.should == 3 }
51
+ end
52
+
53
+
54
+ describe FeaturesReply, ".new(options...) (No :datapath_id)" do
55
+ subject {
56
+ FeaturesReply.new( {
57
+ # :datapath_id => 123,
58
+ :transaction_id => 1234,
59
+ :n_buffers => 256,
60
+ :n_tables => 2,
61
+ :capabilities => 135,
62
+ :actions => 2047,
63
+ :ports => [ "port #0", "port #1", "port #2" ]
64
+ } )
65
+ }
66
+ it { expect { subject }.to raise_error( ArgumentError, ":datapath_id is a mandatory option" ) }
67
+ end
44
68
 
45
69
 
46
- describe FeaturesReply, ".new( MANDATORY OPTIONS MISSING)" do
47
- it "should raise ArgumentError" do
48
- expect { subject }.to raise_error( ArgumentError )
70
+ describe FeaturesReply, ".new(options...) (No :transaction_id)" do
71
+ subject {
72
+ FeaturesReply.new( {
73
+ :datapath_id => 123,
74
+ # :transaction_id => 1234,
75
+ :n_buffers => 256,
76
+ :n_tables => 2,
77
+ :capabilities => 135,
78
+ :actions => 2047,
79
+ :ports => [ "port #0", "port #1", "port #2" ]
80
+ } )
81
+ }
82
+ it { expect { subject }.to raise_error( ArgumentError, ":transaction_id is a mandatory option" ) }
49
83
  end
50
84
  end
51
85
 
@@ -1,6 +1,4 @@
1
1
  #
2
- # Author: Yasuhito Takamiya <yasuhito@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,39 +20,67 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
20
  require "trema"
23
21
 
24
22
 
25
- describe FeaturesRequest, ".new( OPTIONAL OPTION MISSING )" do
26
- it_should_behave_like "any Openflow message with default transaction ID"
23
+ shared_examples_for "features request message" do
24
+ class FeaturesRequestController < Controller; end
25
+
26
+ it "should be logged to the switch's log", :sudo => true do
27
+ network {
28
+ vswitch( "features-request" ) { datapath_id 0xabc }
29
+ }.run( FeaturesRequestController ) {
30
+ controller( "FeaturesRequestController" ).send_message( 0xabc, subject )
31
+ IO.read( File.join( Trema.log, "openflowd.features-request.log" ) ).should include( "OFPT_FEATURES_REQUEST" )
32
+ }
33
+ end
27
34
  end
28
35
 
29
36
 
30
- describe FeaturesRequest, ".new( VALID OPTION )" do
31
- subject { FeaturesRequest.new :transaction_id => transaction_id }
32
- it_should_behave_like "any OpenFlow message with transaction_id option"
33
-
34
-
35
- context "when #features_request is sent with transaction ID(1234)" do
36
- it "should receive #features_reply with transaction ID(1234)" do
37
- class FeaturesController < Controller; end
38
- network {
39
- vswitch { datapath_id 0xabc }
40
- }.run( FeaturesController ) {
41
- features_request = FeaturesRequest.new( :transaction_id => 1234 )
42
- controller( "FeaturesController" ).send_message( 0xabc, features_request )
43
- controller( "FeaturesController" ).should_receive( :features_reply ) do | arg |
44
- arg.datapath_id.should == 0xabc
45
- arg.transaction_id.should == 1234
46
- end
47
- }
37
+ module Trema
38
+ describe FeaturesRequest, ".new" do
39
+ it_should_behave_like "any Openflow message with default transaction ID"
40
+ it_should_behave_like "features request message"
41
+ end
42
+
43
+
44
+ describe FeaturesRequest, ".new(nil)" do
45
+ subject { FeaturesRequest.new( nil ) }
46
+ it_should_behave_like "any Openflow message with default transaction ID"
47
+ it_should_behave_like "features request message"
48
+ end
49
+
50
+
51
+ describe FeaturesRequest, ".new(transaction_id)" do
52
+ subject { FeaturesRequest.new( transaction_id ) }
53
+ it_should_behave_like "any Openflow message with transaction ID"
54
+ context "when sent to a switch" do
55
+ let( :transaction_id ) { 123 }
56
+ it_should_behave_like "features request message"
57
+ end
58
+ end
59
+
60
+
61
+ describe FeaturesRequest, ".new(:transaction_id => value)" do
62
+ subject { FeaturesRequest.new( :transaction_id => transaction_id ) }
63
+ it_should_behave_like "any Openflow message with transaction ID"
64
+ context "when sent to a switch" do
65
+ let( :transaction_id ) { 123 }
66
+ it_should_behave_like "features request message"
67
+ end
68
+ end
69
+
70
+
71
+ describe FeaturesRequest, ".new(:xid => value)" do
72
+ subject { FeaturesRequest.new( :xid => xid ) }
73
+ it_should_behave_like "any Openflow message with xid"
74
+
75
+ context "when sent to a switch" do
76
+ let( :xid ) { 123 }
77
+ it_should_behave_like "features request message"
48
78
  end
49
79
  end
50
- end
51
80
 
52
81
 
53
- describe FeaturesRequest, ".new( INVALID OPTION )" do
54
- it "should raise TypeError" do
55
- expect {
56
- FeaturesRequest.new "INVALID_OPTION"
57
- }.to raise_error( TypeError )
82
+ describe FeaturesRequest, '.new("INVALID OPTION")', :nosudo => true do
83
+ it { expect { FeaturesRequest.new "INVALID OPTION" }.to raise_error( TypeError ) }
58
84
  end
59
85
  end
60
86
 
@@ -0,0 +1,99 @@
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
+ module Trema
24
+ describe FlowMod, ".new", :nosudo => true do
25
+ it_should_behave_like "any Openflow message with default transaction ID"
26
+ end
27
+
28
+
29
+ describe FlowMod, ".new(nil)", :nosudo => true do
30
+ subject { FlowMod.new( nil ) }
31
+ it_should_behave_like "any Openflow message with default transaction ID"
32
+ end
33
+
34
+
35
+ describe FlowMod, ".new(transaction_id)", :nosudo => true do
36
+ subject { FlowMod.new( transaction_id ) }
37
+ it_should_behave_like "any Openflow message with transaction ID"
38
+ end
39
+
40
+
41
+ describe FlowMod, ".new(:transaction_id => value)", :nosudo => true do
42
+ subject { FlowMod.new( :transaction_id => transaction_id ) }
43
+ it_should_behave_like "any Openflow message with transaction ID"
44
+ end
45
+
46
+
47
+ describe FlowMod, ".new(:xid => value)", :nosudo => true do
48
+ subject { FlowMod.new( :xid => xid ) }
49
+ it_should_behave_like "any Openflow message with xid"
50
+ end
51
+
52
+
53
+ describe FlowMod, ".new(:command => value)", :nosudo => true do
54
+ subject { FlowMod.new( :command => command ) }
55
+
56
+ context "command: 0", :nosudo => true do
57
+ let( :command ) { 0 }
58
+ its( :command ) { should == 0 }
59
+ end
60
+
61
+ # TODO: boundary test.
62
+ end
63
+
64
+
65
+ describe FlowMod, ".new(:idle_timeout => value)", :nosudo => true do
66
+ subject { FlowMod.new( :idle_timeout => idle_timeout ) }
67
+
68
+ context "idle_timeout: 0", :nosudo => true do
69
+ let( :idle_timeout ) { 0 }
70
+ its( :idle_timeout ) { should == 0 }
71
+ end
72
+
73
+ # TODO: boundary test.
74
+ end
75
+
76
+
77
+ describe FlowMod, ".new(:hard_timeout => value)", :nosudo => true do
78
+ subject { FlowMod.new( :hard_timeout => hard_timeout ) }
79
+
80
+ context "hard_timeout: 0", :nosudo => true do
81
+ let( :hard_timeout ) { 0 }
82
+ its( :hard_timeout ) { should == 0 }
83
+ end
84
+
85
+ # TODO: boundary test.
86
+ end
87
+
88
+
89
+ describe FlowMod, '.new("INVALID OPTION")', :nosudo => true do
90
+ it { expect { FlowMod.new "INVALID OPTION" }.to raise_error( TypeError ) }
91
+ end
92
+ end
93
+
94
+
95
+ ### Local variables:
96
+ ### mode: Ruby
97
+ ### coding: utf-8-unix
98
+ ### indent-tabs-mode: nil
99
+ ### End:
@@ -20,15 +20,15 @@
20
20
 
21
21
  require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
22
  require "trema/dsl/switch"
23
- require "trema/openflow-switch"
23
+ require "trema/hardware-switch"
24
24
 
25
25
 
26
26
  module Trema
27
- describe OpenflowSwitch, %[dpid = "0xabc"] do
27
+ describe HardwareSwitch, %[dpid = "0xabc"] do
28
28
  before :each do
29
29
  stanza = DSL::Switch.new
30
30
  stanza.dpid "0xabc"
31
- @switch = OpenflowSwitch.new( stanza )
31
+ @switch = HardwareSwitch.new( stanza )
32
32
  end
33
33
 
34
34
 
@@ -1,6 +1,4 @@
1
1
  #
2
- # Author: Yasuhito Takamiya <yasuhito@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,22 +20,38 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
20
  require "trema"
23
21
 
24
22
 
25
- describe Hello, ".new( OPTIONAL OPTION MISSING )" do
26
- it_should_behave_like "any Openflow message with default transaction ID"
27
- end
23
+ module Trema
24
+ describe Hello, ".new", :nosudo => true do
25
+ it_should_behave_like "any Openflow message with default transaction ID"
26
+ end
28
27
 
29
28
 
30
- describe Hello, ".new( VALID OPTION )" do
31
- subject { Hello.new :transaction_id => transaction_id }
32
- it_should_behave_like "any OpenFlow message with transaction_id option"
33
- end
29
+ describe Hello, ".new(nil)", :nosudo => true do
30
+ subject { Hello.new( nil ) }
31
+ it_should_behave_like "any Openflow message with default transaction ID"
32
+ end
33
+
34
+
35
+ describe Hello, ".new(transaction_id)", :nosudo => true do
36
+ subject { Hello.new( transaction_id ) }
37
+ it_should_behave_like "any Openflow message with transaction ID"
38
+ end
39
+
40
+
41
+ describe Hello, ".new(:transaction_id => value)", :nosudo => true do
42
+ subject { Hello.new( :transaction_id => transaction_id ) }
43
+ it_should_behave_like "any Openflow message with transaction ID"
44
+ end
45
+
46
+
47
+ describe Hello, ".new(:xid => value)", :nosudo => true do
48
+ subject { Hello.new( :xid => xid ) }
49
+ it_should_behave_like "any Openflow message with xid"
50
+ end
34
51
 
35
52
 
36
- describe Hello, ".new( INVALID_OPTIONS )" do
37
- it "should raise a TypeError" do
38
- expect {
39
- Hello.new "INVALID OPTIONS"
40
- }.to raise_error( TypeError )
53
+ describe Hello, '.new("INVALID OPTION")', :nosudo => true do
54
+ it { expect { Hello.new "INVALID OPTION" }.to raise_error( TypeError ) }
41
55
  end
42
56
  end
43
57
 
@@ -0,0 +1,54 @@
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/ip"
21
+
22
+
23
+ module Trema
24
+ describe IP do
25
+ context "when creating" do
26
+ subject { IP.new( ip_address, prefixlen ) }
27
+
28
+ context %{when "192.168.1.1/32"} do
29
+ let( :ip_address ) { "192.168.1.1" }
30
+ let( :prefixlen ) { 32 }
31
+
32
+ its( :to_s ) { should == "192.168.1.1" }
33
+ its( :to_i ) { should == 3232235777 }
34
+ its( :to_a ) { should == [ 0xc0, 0xa8, 0x01, 0x01 ] }
35
+ end
36
+
37
+ context %{when "10.1.1.1/8"} do
38
+ let( :ip_address ) { "10.1.1.1" }
39
+ let( :prefixlen ) { 8 }
40
+
41
+ its( :to_s ) { should == "10.0.0.0" }
42
+ its( :to_i ) { should == 10 * 256 * 256 * 256 }
43
+ its( :to_a ) { should == [ 0x0a, 0x00, 0x00, 0x00 ] }
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+
50
+ ### Local variables:
51
+ ### mode: Ruby
52
+ ### coding: utf-8-unix
53
+ ### indent-tabs-mode: nil
54
+ ### End:
@@ -1,6 +1,4 @@
1
1
  #
2
- # Author: Yasuhito Takamiya <yasuhito@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
@@ -23,82 +21,69 @@ require "trema/mac"
23
21
 
24
22
 
25
23
  module Trema
26
- describe Mac do
27
- context "when creating from an invalid value" do
28
- context %{when "INVALID MAC ADDRESS" } do
29
- it "should raise an error" do
30
- lambda do
31
- Mac.new( "INVALID MAC ADDRESS" )
32
- end.should raise_error( %{Invalid MAC address: "INVALID MAC ADDRESS"} )
33
- end
34
- end
35
-
36
-
37
- context "when -1" do
38
- it "should raise an error" do
39
- lambda do
40
- Mac.new( -1 )
41
- end.should raise_error( "Invalid MAC address: -1" )
42
- end
43
- end
44
-
24
+ describe Mac, ".new(invalid_value)" do
25
+ subject { Mac.new( value ) }
45
26
 
46
- context "when 0x1000000000000" do
47
- it "should raise an error" do
48
- lambda do
49
- Mac.new( 0x1000000000000 )
50
- end.should raise_error( "Invalid MAC address: #{ 0x1000000000000 }" )
51
- end
52
- end
53
-
54
-
55
- context %{when "[ 1, 2, 3 ]" } do
56
- it "should raise an error" do
57
- lambda do
58
- Mac.new( [ 1, 2, 3 ] )
59
- end.should raise_error( "Invalid MAC address: [1, 2, 3]" )
60
- end
61
- end
27
+ context %{when "INVALID MAC ADDRESS"} do
28
+ let( :value ) { "INVALID MAC ADDRESS" }
29
+ it { expect { subject }.to raise_error( ArgumentError ) }
62
30
  end
63
31
 
32
+ context "when -1" do
33
+ let( :value ) { -1 }
34
+ it { expect { subject }.to raise_error( ArgumentError ) }
35
+ end
64
36
 
65
- context "when creating" do
66
- subject { Mac.new( mac_address ) }
67
-
68
-
69
- context %{when "11:22:33:44:55:66"} do
70
- let( :mac_address ) { "11:22:33:44:55:66" }
71
-
72
- it { should == Mac.new( "11:22:33:44:55:66" ) }
73
- its( :value ) { should == 0x112233445566 }
74
- its( :to_s ) { should == "11:22:33:44:55:66" }
75
- its( :to_short ) { should == [ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 ] }
76
- end
37
+ context "when 0x1000000000000" do
38
+ let( :value ) { 0x1000000000000 }
39
+ it { expect { subject }.to raise_error( ArgumentError ) }
40
+ end
77
41
 
42
+ context "when [ 1, 2, 3 ]" do
43
+ let( :value ) { [ 1, 2, 3 ] }
44
+ it { expect { subject }.to raise_error( TypeError ) }
45
+ end
46
+ end
78
47
 
79
- context "when 0" do
80
- let( :mac_address ) { 0 }
81
48
 
82
- it { should == Mac.new( 0 ) }
83
- its( :value ) { should == 0 }
84
- its( :to_s ) { should == "00:00:00:00:00:00" }
85
- its( :to_short ) { should == [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] }
86
- end
49
+ describe Mac, ".new(value)" do
50
+ subject { Mac.new( value ) }
87
51
 
52
+ context %{when "11:22:33:44:55:66"} do
53
+ let( :value ) { "11:22:33:44:55:66" }
54
+ it { should == Mac.new( "11:22:33:44:55:66" ) }
55
+ its( :value ) { should == 0x112233445566 }
56
+ its( :to_s ) { should == "11:22:33:44:55:66" }
57
+ its( :to_a ) { should == [ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 ] }
58
+ its( :multicast? ){ should be_true }
59
+ its( :broadcast? ){ should be_false }
60
+ end
88
61
 
89
- context "when 0xffffffffffff" do
90
- let( :mac_address ) { 0xffffffffffff }
62
+ context "when 0" do
63
+ let( :value ) { 0 }
64
+ it { should == Mac.new( 0 ) }
65
+ its( :value ) { should == 0 }
66
+ its( :to_s ) { should == "00:00:00:00:00:00" }
67
+ its( :to_a ) { should == [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] }
68
+ its( :multicast? ){ should be_false }
69
+ its( :broadcast? ){ should be_false }
70
+ end
91
71
 
92
- it { should == Mac.new( 0xffffffffffff ) }
93
- its( :value ) { should == 0xffffffffffff }
94
- its( :to_s ) { should == "ff:ff:ff:ff:ff:ff" }
95
- its( :to_short ) { should == [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ] }
96
- end
72
+ context "when 0xffffffffffff" do
73
+ let( :value ) { 0xffffffffffff }
74
+ it { should == Mac.new( 0xffffffffffff ) }
75
+ its( :value ) { should == 0xffffffffffff }
76
+ its( :to_s ) { should == "ff:ff:ff:ff:ff:ff" }
77
+ its( :to_a ) { should == [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ] }
78
+ its( :multicast? ){ should be_true }
79
+ its( :broadcast? ){ should be_true }
97
80
  end
81
+ end
98
82
 
99
83
 
84
+ describe Mac do
100
85
  context "when querying FDB" do
101
- it "should be used for FDB keys" do
86
+ it "can be used for Hash keys" do
102
87
  fdb = {}
103
88
  fdb[ Mac.new( "00:00:00:00:00:01" ) ] = "Port #1"
104
89
  fdb[ Mac.new( "00:00:00:00:00:01" ) ].should == "Port #1"