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
@@ -53,7 +53,7 @@ describe Match, ".new" do
53
53
  its( :nw_dst ) { subject.prefixlen.should == 24 }
54
54
  its( :tp_src ) { should == 10 }
55
55
  its( :tp_dst ) { should == 20 }
56
- its( :to_s ) { should == "wildcards = 0x20000, in_port = 1, dl_src = 00:00:00:00:00:01, dl_dst = 00:00:00:00:00:02, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 17, nw_src = 192.168.0.1/32, nw_dst = 192.168.0.0/24, tp_src = 10, tp_dst = 20" }
56
+ its( :to_s ) { should == "wildcards = 0x20000(nw_dst(8)), in_port = 1, dl_src = 00:00:00:00:00:01, dl_dst = 00:00:00:00:00:02, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 17, nw_src = 192.168.0.1/32, nw_dst = 192.168.0.0/24, tp_src = 10, tp_dst = 20" }
57
57
  end
58
58
 
59
59
 
@@ -23,13 +23,13 @@ require "trema/open-vswitch"
23
23
 
24
24
 
25
25
  module Trema
26
- describe Switch do
26
+ describe OpenflowSwitch do
27
27
  around do | example |
28
28
  begin
29
- Switch.clear
29
+ OpenflowSwitch.clear
30
30
  example.run
31
31
  ensure
32
- Switch.clear
32
+ OpenflowSwitch.clear
33
33
  end
34
34
  end
35
35
 
@@ -38,10 +38,10 @@ module Trema
38
38
  OpenVswitch.new mock( "stanza 1", :name => "vswitch 1", :validate => true )
39
39
  OpenVswitch.new mock( "stanza 2", :name => "vswitch 2", :validate => true )
40
40
 
41
- Switch.should have( 3 ).vswitches
42
- Switch[ "vswitch 0" ].should_not be_nil
43
- Switch[ "vswitch 1" ].should_not be_nil
44
- Switch[ "vswitch 2" ].should_not be_nil
41
+ OpenflowSwitch.should have( 3 ).vswitches
42
+ OpenflowSwitch[ "vswitch 0" ].should_not be_nil
43
+ OpenflowSwitch[ "vswitch 1" ].should_not be_nil
44
+ OpenflowSwitch[ "vswitch 2" ].should_not be_nil
45
45
  end
46
46
  end
47
47
 
@@ -27,11 +27,11 @@ describe Trema::PacketIn do
27
27
  send_packets "host1", "host2"
28
28
  sleep 2
29
29
  end
30
-
31
-
30
+
31
+
32
32
  class PacketInController < Controller; end
33
33
 
34
- class PacketInSendController < Controller
34
+ class PacketInSendController < Controller
35
35
  def packet_in datapath_id, message
36
36
  send_flow_mod_add(
37
37
  datapath_id,
@@ -45,7 +45,7 @@ describe Trema::PacketIn do
45
45
  )
46
46
  end
47
47
  end
48
-
48
+
49
49
  context "when instance is created" do
50
50
  it "should have valid datapath_id and in_port" do
51
51
  network {
@@ -55,7 +55,7 @@ describe Trema::PacketIn do
55
55
  link "test", "host1"
56
56
  link "test", "host2"
57
57
  }.run( PacketInController ) {
58
- controller( "PacketInController" ).should_receive( :packet_in ) do | datapath_id, message |
58
+ controller( "PacketInController" ).should_receive( :packet_in ) do | datapath_id, message |
59
59
  datapath_id.should == 0xabc
60
60
  message.datapath_id.should == 0xabc
61
61
  message.in_port.should > 0
@@ -63,19 +63,19 @@ describe Trema::PacketIn do
63
63
  send_and_wait
64
64
  }
65
65
  end
66
-
67
-
66
+
67
+
68
68
  it "should have vaild user data" do
69
69
  network {
70
70
  vswitch( "test" ) { datapath_id 0xabc }
71
- vhost( "host1" ) { mac "00:00:00:00:00:01"
71
+ vhost( "host1" ) { mac "00:00:00:00:00:01"
72
72
  ip "192.168.1.1" }
73
- vhost( "host2" ) { mac "00:00:00:00:00:02"
73
+ vhost( "host2" ) { mac "00:00:00:00:00:02"
74
74
  ip "192.168.1.2" }
75
75
  link "test", "host1"
76
76
  link "test", "host2"
77
77
  }.run( PacketInController ) {
78
- controller( "PacketInController" ).should_receive( :packet_in ) do | datapath_id, message |
78
+ controller( "PacketInController" ).should_receive( :packet_in ) do | datapath_id, message |
79
79
  # packet_in expected to have data portion.
80
80
  message.total_len.should > 20
81
81
  message.data.should be_instance_of( String )
@@ -129,7 +129,7 @@ describe Trema::PacketIn do
129
129
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130
130
  0x00, 0x00
131
131
  ].pack( "C*" )
132
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
132
+ controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
133
133
  message.in_port.should > 0
134
134
  message.vtag?.should be_false
135
135
  message.arp?.should be_true
@@ -144,6 +144,52 @@ describe Trema::PacketIn do
144
144
  message.arp_spa.to_s.should == "192.168.0.1"
145
145
  message.arp_tha.to_s.should == "00:00:00:00:00:02"
146
146
  message.arp_tpa.to_s.should == "192.168.0.2"
147
+ message.arp_request?.should be_false
148
+ message.arp_reply?.should be_true
149
+
150
+ message.vlan_tpid.should be_nil
151
+ message.vlan_tci.should be_nil
152
+ message.vlan_prio.should be_nil
153
+ message.vlan_cfi.should be_nil
154
+ message.vlan_vid.should be_nil
155
+
156
+ message.ipv4_version.should be_nil
157
+ message.ipv4_ihl.should be_nil
158
+ message.ipv4_tos.should be_nil
159
+ message.ipv4_tot_len.should be_nil
160
+ message.ipv4_id.should be_nil
161
+ message.ipv4_frag_off.should be_nil
162
+ message.ipv4_ttl.should be_nil
163
+ message.ipv4_protocol.should be_nil
164
+ message.ipv4_checksum.should be_nil
165
+ message.ipv4_saddr.should be_nil
166
+ message.ipv4_daddr.should be_nil
167
+
168
+ message.icmpv4_type.should be_nil
169
+ message.icmpv4_code.should be_nil
170
+ message.icmpv4_checksum.should be_nil
171
+ message.icmpv4_id.should be_nil
172
+ message.icmpv4_seq.should be_nil
173
+ message.icmpv4_gateway.should be_nil
174
+
175
+ message.igmp_type.should be_nil
176
+ message.igmp_checksum.should be_nil
177
+ message.igmp_group.should be_nil
178
+
179
+ message.tcp_src_port.should be_nil
180
+ message.tcp_dst_port.should be_nil
181
+ message.tcp_seq_no.should be_nil
182
+ message.tcp_ack_no.should be_nil
183
+ message.tcp_offset.should be_nil
184
+ message.tcp_flags.should be_nil
185
+ message.tcp_window.should be_nil
186
+ message.tcp_checksum.should be_nil
187
+ message.tcp_urgent.should be_nil
188
+
189
+ message.udp_src_port.should be_nil
190
+ message.udp_dst_port.should be_nil
191
+ message.udp_checksum.should be_nil
192
+ message.udp_len.should be_nil
147
193
  end
148
194
 
149
195
  controller( "PacketInSendController" ).send_packet_out(
@@ -186,14 +232,14 @@ describe Trema::PacketIn do
186
232
  0x00, 0x02, # dst port
187
233
  0x00, 0x00, 0x00, 0x00, # sequence number
188
234
  0x00, 0x00, 0x00, 0x00, # acknowledgement number
189
- 0x50, # data offset,
235
+ 0x50, # data offset,
190
236
  0x00, # flags
191
237
  0x00, 0x00, # window size
192
238
  0x2e, 0x86, # checksum
193
239
  0x00, 0x00, # urgent pointer
194
240
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
195
241
  ].pack( "C*" )
196
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
242
+ controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
197
243
  message.in_port.should > 0
198
244
  message.vtag?.should be_false
199
245
  message.arp?.should be_false
@@ -224,6 +270,12 @@ describe Trema::PacketIn do
224
270
  message.tcp_window.should == 0
225
271
  message.tcp_checksum.should == 11910 # 0x2e86
226
272
  message.tcp_urgent.should == 0
273
+
274
+ message.arp_oper.should be_nil
275
+ message.arp_sha.should be_nil
276
+ message.arp_spa.should be_nil
277
+ message.arp_tha.should be_nil
278
+ message.arp_tpa.should be_nil
227
279
  end
228
280
 
229
281
  controller( "PacketInSendController" ).send_packet_out(
@@ -270,7 +322,7 @@ describe Trema::PacketIn do
270
322
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271
323
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
272
324
  ].pack( "C*" )
273
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
325
+ controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
274
326
  message.in_port.should > 0
275
327
  message.vtag?.should be_false
276
328
  message.arp?.should be_false
@@ -347,7 +399,7 @@ describe Trema::PacketIn do
347
399
  0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61,
348
400
  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69
349
401
  ].pack( "C*" )
350
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
402
+ controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
351
403
  message.in_port.should > 0
352
404
  message.vtag?.should be_true
353
405
  message.arp?.should be_false
@@ -381,6 +433,11 @@ describe Trema::PacketIn do
381
433
  message.icmpv4_checksum.should == 0xe95b
382
434
  message.icmpv4_id.should == 0x0400
383
435
  message.icmpv4_seq.should == 0x6000
436
+
437
+ message.icmpv4_echo_reply?.should be_false
438
+ message.icmpv4_dst_unreach?.should be_false
439
+ message.icmpv4_redirect?.should be_false
440
+ message.icmpv4_echo_request?.should be_true
384
441
  end
385
442
 
386
443
  controller( "PacketInSendController" ).send_packet_out(
@@ -425,7 +482,7 @@ describe Trema::PacketIn do
425
482
  0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61,
426
483
  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69
427
484
  ].pack( "C*" )
428
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
485
+ controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
429
486
  message.in_port.should > 0
430
487
  message.vtag?.should be_false
431
488
  message.arp?.should be_false
@@ -0,0 +1,32 @@
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 Trema::PortStatusAdd do
24
+ it_should_behave_like "port status message", :klass => Trema::PortStatusAdd
25
+ end
26
+
27
+
28
+ ### Local variables:
29
+ ### mode: Ruby
30
+ ### coding: utf-8-unix
31
+ ### indent-tabs-mode: nil
32
+ ### End:
@@ -0,0 +1,32 @@
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 Trema::PortStatusDelete do
24
+ it_should_behave_like "port status message", :klass => Trema::PortStatusDelete
25
+ end
26
+
27
+
28
+ ### Local variables:
29
+ ### mode: Ruby
30
+ ### coding: utf-8-unix
31
+ ### indent-tabs-mode: nil
32
+ ### End:
@@ -0,0 +1,71 @@
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 Trema::PortStatusModify do
24
+ it_should_behave_like "port status message", :klass => Trema::PortStatusModify
25
+ end
26
+
27
+
28
+ module Trema
29
+ class PortStatusController < Controller
30
+ def features_reply dpid, message
31
+ message.ports.select( &:up? ).each do | each |
32
+ port_mod = PortMod.new(
33
+ :port_no => each.number,
34
+ :hw_addr => each.hw_addr,
35
+ :config => Port::OFPPC_PORT_DOWN,
36
+ :mask => Port::OFPPC_PORT_DOWN,
37
+ :advertise => 0
38
+ )
39
+ send_message dpid, port_mod
40
+ end
41
+ end
42
+ end
43
+
44
+
45
+ describe Controller do
46
+ context "when one port goes down" do
47
+ it "should receive port_status (modify)" do
48
+ network {
49
+ vswitch { datapath_id 0xabc }
50
+ vhost "host"
51
+ link "host", "0xabc"
52
+ }.run( PortStatusController ) {
53
+ controller( "PortStatusController" ).should_receive( :port_status ).with do | dpid, message |
54
+ dpid.should == 0xabc
55
+ message.should be_an_instance_of( PortStatusModify )
56
+ end
57
+
58
+ controller( "PortStatusController" ).send_message 0xabc, FeaturesRequest.new
59
+ sleep 2 # FIXME: wait to receive port_status
60
+ }
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+
67
+ ### Local variables:
68
+ ### mode: Ruby
69
+ ### coding: utf-8-unix
70
+ ### indent-tabs-mode: nil
71
+ ### End:
@@ -22,82 +22,11 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
22
22
  require "trema"
23
23
 
24
24
 
25
- describe Trema::PortStatus, ".new( VALID OPTIONS )" do
26
- class PortStatusController < Controller
27
- def features_reply message
28
- ports = message.ports.select{ |each| each.config == 0 }.sort
29
- if ports.length > 0
30
- port_mod = PortMod.new(
31
- :port_no => ports[0].number,
32
- :hw_addr => ports[0].hw_addr,
33
- :config => 1, #config port down
34
- :mask => 1, #mask
35
- :advertise => 0
36
- )
37
- send_message message.datapath_id, port_mod
38
- end
39
- end
40
- end
41
-
42
-
43
- it "should have datapath_id" do
44
- PortStatus.new( :datapath_id => 0xabc ).datapath_id.should == 0xabc
45
- end
46
-
47
-
48
- it "should have transaction_id" do
49
- PortStatus.new( :transaction_id => 123 ).transaction_id.should == 123
50
- end
51
-
52
-
53
- it "should have reason" do
54
- PortStatus.new( :reason => 2 ).reason.should == 2
55
- end
56
-
57
-
58
- it "should have phy_port" do
59
- port = mock( "port" )
60
- PortStatus.new( :phy_port => port ).phy_port.should == port
61
- end
62
-
63
-
64
- context "when #port_mod is sent" do
65
- it "should #port_status" do
66
- network {
67
- vswitch("port-status") { datapath_id 0xabc }
68
- vhost "host1"
69
- vhost "host2"
70
- link "host1", "port-status"
71
- link "host2", "port-status"
72
- }.run( PortStatusController ) {
73
- controller( "PortStatusController" ).should_receive( :port_status )
74
- controller( "PortStatusController" ).send_message( 0xabc, FeaturesRequest.new )
75
- sleep 2 # FIXME: wait to receive port_status
76
- }
77
- end
78
- end
79
-
80
-
81
- context "when #port_mod(port#1,down) is sent" do
82
- it "should #port_status(port#1,down)" do
83
- network {
84
- vswitch( "port-status" ) { datapath_id 0xabc }
85
- vhost "host1"
86
- vhost "host2"
87
- link "host1", "port-status"
88
- link "host2", "port-status"
89
- }.run( PortStatusController ) {
90
- controller( "PortStatusController" ).send_message( 0xabc, FeaturesRequest.new )
91
- controller( "PortStatusController" ).should_receive( :port_status ) do | message |
92
- message.datapath_id.should == 0xabc
93
- message.phy_port.number.should == 1
94
- message.phy_port.config.should == 1
95
- message.reason.should == 2
96
- end
97
- sleep 1 # FIXME: wait to receive port_status
98
- }
99
- end
100
- end
25
+ describe Trema::PortStatus do
26
+ subject { Trema::PortStatus }
27
+ its( :constants ) { should include "OFPPR_ADD" }
28
+ its( :constants ) { should include "OFPPR_DELETE" }
29
+ its( :constants ) { should include "OFPPR_MODIFY" }
101
30
  end
102
31
 
103
32