trema 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.travis.yml +24 -7
  4. data/Gemfile +19 -27
  5. data/Guardfile +6 -0
  6. data/README.md +13 -5
  7. data/Rakefile +418 -415
  8. data/bin/quality +2 -2
  9. data/bin/trema +103 -105
  10. data/bin/trema-config +7 -7
  11. data/build.rb +2 -2
  12. data/cruise.rb +109 -83
  13. data/features/dsl/switch_port_specifier.feature +1 -1
  14. data/features/examples/dumper.feature +9 -41
  15. data/features/examples/hello_trema.feature +1 -1
  16. data/features/examples/learning_switch.feature +7 -7
  17. data/features/examples/list_switches.feature +5 -5
  18. data/features/examples/message.set_config.feature +11 -11
  19. data/features/examples/message.vendor-action.feature +7 -7
  20. data/features/examples/message.vendor-stats-request.feature +1 -1
  21. data/features/examples/multi_learning_switch.feature +7 -7
  22. data/features/examples/openflow_message.echo.feature +15 -15
  23. data/features/examples/openflow_message.features_request.feature +12 -12
  24. data/features/examples/openflow_message.hello.feature +13 -13
  25. data/features/examples/packet_in.feature +8 -8
  26. data/features/examples/patch_panel.feature +1 -1
  27. data/features/examples/repeater_hub.feature +7 -7
  28. data/features/examples/switch_info.feature +16 -16
  29. data/features/examples/switch_monitor.feature +11 -11
  30. data/features/examples/transparent_firewall.feature +73 -0
  31. data/features/handlers/switch_ready.feature +1 -1
  32. data/features/step_definitions/misc_steps.rb +24 -24
  33. data/features/step_definitions/send_packets_steps.rb +2 -2
  34. data/features/step_definitions/stats_steps.rb +6 -6
  35. data/features/support/env.rb +15 -15
  36. data/features/support/hooks.rb +9 -9
  37. data/features/switch_event/add_forward_entry.feature +3 -3
  38. data/features/switch_event/delete_forward_entry.feature +3 -3
  39. data/features/switch_event/dump_forward_entries.feature +2 -2
  40. data/features/switch_event/set_forward_entries.feature +2 -2
  41. data/features/trema_commands/dump_flows.feature +1 -0
  42. data/features/trema_commands/help.feature +1 -0
  43. data/features/trema_commands/help_option.feature +1 -0
  44. data/features/trema_commands/kill.feature +1 -0
  45. data/features/trema_commands/killall.feature +1 -0
  46. data/features/trema_commands/port_down.feature +1 -0
  47. data/features/trema_commands/port_up.feature +1 -0
  48. data/features/trema_commands/reset_stats.feature +1 -0
  49. data/features/trema_commands/run.feature +1 -0
  50. data/features/trema_commands/send_packets.feature +2 -1
  51. data/features/trema_commands/show_stats.feature +1 -0
  52. data/features/trema_commands/up.feature +1 -0
  53. data/features/trema_commands/version.feature +1 -0
  54. data/features/trema_commands/version_option.feature +1 -0
  55. data/rubocop-todo.yml +159 -0
  56. data/ruby/blocker.rb +15 -17
  57. data/ruby/extconf.rb +19 -19
  58. data/ruby/sub-process.rb +29 -29
  59. data/ruby/trema/aggregate-stats-reply.rb +2 -2
  60. data/ruby/trema/app.rb +13 -13
  61. data/ruby/trema/cli.rb +45 -45
  62. data/ruby/trema/command.rb +14 -14
  63. data/ruby/trema/command/dump_flows.rb +5 -5
  64. data/ruby/trema/command/kill.rb +13 -13
  65. data/ruby/trema/command/killall.rb +1 -1
  66. data/ruby/trema/command/netns.rb +3 -3
  67. data/ruby/trema/command/port_down.rb +7 -7
  68. data/ruby/trema/command/port_up.rb +7 -7
  69. data/ruby/trema/command/reset_stats.rb +6 -6
  70. data/ruby/trema/command/ruby.rb +2 -2
  71. data/ruby/trema/command/run.rb +23 -23
  72. data/ruby/trema/command/send_packets.rb +9 -9
  73. data/ruby/trema/command/shell.rb +14 -16
  74. data/ruby/trema/command/show_stats.rb +9 -9
  75. data/ruby/trema/command/up.rb +4 -4
  76. data/ruby/trema/command/version.rb +1 -1
  77. data/ruby/trema/controller.rb +10 -10
  78. data/ruby/trema/custom-switch.rb +4 -4
  79. data/ruby/trema/daemon.rb +21 -21
  80. data/ruby/trema/desc-stats-reply.rb +2 -2
  81. data/ruby/trema/dsl.rb +5 -5
  82. data/ruby/trema/dsl/configuration.rb +7 -7
  83. data/ruby/trema/dsl/context.rb +10 -10
  84. data/ruby/trema/dsl/custom-switch.rb +3 -3
  85. data/ruby/trema/dsl/link.rb +2 -2
  86. data/ruby/trema/dsl/netns.rb +9 -9
  87. data/ruby/trema/dsl/parser.rb +14 -14
  88. data/ruby/trema/dsl/rswitch.rb +3 -3
  89. data/ruby/trema/dsl/run.rb +4 -4
  90. data/ruby/trema/dsl/runner.rb +20 -20
  91. data/ruby/trema/dsl/stanza.rb +5 -5
  92. data/ruby/trema/dsl/switch.rb +14 -14
  93. data/ruby/trema/dsl/syntax.rb +54 -54
  94. data/ruby/trema/dsl/vhost.rb +9 -9
  95. data/ruby/trema/dsl/vswitch.rb +4 -4
  96. data/ruby/trema/enqueue.rb +11 -11
  97. data/ruby/trema/exact-match.rb +1 -1
  98. data/ruby/trema/executables.rb +19 -19
  99. data/ruby/trema/flow-stats-reply.rb +2 -2
  100. data/ruby/trema/flow.rb +8 -8
  101. data/ruby/trema/hardware-switch.rb +2 -2
  102. data/ruby/trema/host.rb +18 -18
  103. data/ruby/trema/link.rb +9 -9
  104. data/ruby/trema/mac.rb +1 -5
  105. data/ruby/trema/match.c +0 -1
  106. data/ruby/trema/monkey-patch/integer.rb +3 -3
  107. data/ruby/trema/monkey-patch/integer/base-conversions.rb +1 -1
  108. data/ruby/trema/monkey-patch/integer/ranges.rb +2 -2
  109. data/ruby/trema/monkey-patch/integer/validators.rb +1 -1
  110. data/ruby/trema/monkey-patch/module.rb +2 -2
  111. data/ruby/trema/monkey-patch/module/class-method.rb +2 -2
  112. data/ruby/trema/monkey-patch/module/deprecation.rb +1 -1
  113. data/ruby/trema/monkey-patch/string.rb +1 -1
  114. data/ruby/trema/monkey-patch/string/inflectors.rb +7 -7
  115. data/ruby/trema/netns.rb +6 -6
  116. data/ruby/trema/network-component.rb +7 -7
  117. data/ruby/trema/ofctl.rb +13 -13
  118. data/ruby/trema/open-vswitch.rb +25 -25
  119. data/ruby/trema/openflow-switch.rb +1 -1
  120. data/ruby/trema/ordered-hash.rb +8 -8
  121. data/ruby/trema/packet-in.c +0 -1
  122. data/ruby/trema/packet-queue.rb +8 -8
  123. data/ruby/trema/packetin-filter.rb +9 -9
  124. data/ruby/trema/path.rb +32 -32
  125. data/ruby/trema/phost.rb +5 -5
  126. data/ruby/trema/port-mod.c +0 -1
  127. data/ruby/trema/port-stats-reply.rb +2 -2
  128. data/ruby/trema/port-status-add.rb +2 -2
  129. data/ruby/trema/port-status-delete.rb +2 -2
  130. data/ruby/trema/port-status-modify.rb +2 -2
  131. data/ruby/trema/port.c +0 -1
  132. data/ruby/trema/process.rb +7 -7
  133. data/ruby/trema/queue-stats-reply.rb +2 -2
  134. data/ruby/trema/ruby-switch.rb +6 -6
  135. data/ruby/trema/send-out-port.rb +11 -11
  136. data/ruby/trema/set-eth-addr.rb +5 -5
  137. data/ruby/trema/set-eth-dst-addr.rb +1 -1
  138. data/ruby/trema/set-eth-src-addr.rb +1 -1
  139. data/ruby/trema/set-ip-addr.rb +6 -6
  140. data/ruby/trema/set-ip-dst-addr.rb +1 -1
  141. data/ruby/trema/set-ip-src-addr.rb +1 -1
  142. data/ruby/trema/set-ip-tos.rb +6 -6
  143. data/ruby/trema/set-transport-dst-port.rb +2 -2
  144. data/ruby/trema/set-transport-port.rb +7 -7
  145. data/ruby/trema/set-transport-src-port.rb +3 -3
  146. data/ruby/trema/set-vlan-priority.rb +6 -6
  147. data/ruby/trema/set-vlan-vid.rb +6 -6
  148. data/ruby/trema/shell.rb +10 -10
  149. data/ruby/trema/shell/down.rb +3 -3
  150. data/ruby/trema/shell/killall.rb +1 -1
  151. data/ruby/trema/shell/link.rb +14 -14
  152. data/ruby/trema/shell/reset_stats.rb +6 -6
  153. data/ruby/trema/shell/run.rb +7 -7
  154. data/ruby/trema/shell/send_packets.rb +3 -3
  155. data/ruby/trema/shell/show_stats.rb +7 -7
  156. data/ruby/trema/shell/up.rb +5 -5
  157. data/ruby/trema/shell/vhost.rb +4 -4
  158. data/ruby/trema/shell/vswitch.rb +7 -7
  159. data/ruby/trema/stats-helper.rb +3 -3
  160. data/ruby/trema/stats-reply.c +0 -1
  161. data/ruby/trema/strip-vlan-header.rb +1 -1
  162. data/ruby/trema/switch-daemon.rb +9 -9
  163. data/ruby/trema/switch-manager.rb +9 -9
  164. data/ruby/trema/switch.rb +7 -7
  165. data/ruby/trema/table-stats-reply.rb +2 -2
  166. data/ruby/trema/timers.rb +12 -12
  167. data/ruby/trema/trema.c +0 -1
  168. data/ruby/trema/tremashark.rb +1 -1
  169. data/ruby/trema/util.rb +25 -27
  170. data/ruby/trema/vendor-action.rb +10 -10
  171. data/ruby/trema/vendor-stats-reply.rb +2 -2
  172. data/ruby/trema/version.rb +1 -1
  173. data/spec/spec_helper.rb +50 -52
  174. data/spec/support/action.rb +9 -12
  175. data/spec/support/mandatory-option.rb +15 -18
  176. data/spec/support/matchers/constant.rb +7 -7
  177. data/spec/support/openflow-message.rb +76 -79
  178. data/spec/support/port-status.rb +7 -10
  179. data/spec/trema/app_spec.rb +27 -27
  180. data/spec/trema/barrier-reply_spec.rb +10 -10
  181. data/spec/trema/barrier-request_spec.rb +35 -35
  182. data/spec/trema/cli_spec.rb +63 -63
  183. data/spec/trema/controller_spec.rb +3 -3
  184. data/spec/trema/default-logger_spec.rb +4 -4
  185. data/spec/trema/dsl/configuration_spec.rb +47 -47
  186. data/spec/trema/dsl/link_spec.rb +11 -11
  187. data/spec/trema/dsl/run_spec.rb +19 -19
  188. data/spec/trema/dsl/runner_spec.rb +91 -91
  189. data/spec/trema/dsl/switch_spec.rb +16 -16
  190. data/spec/trema/dsl/syntax_spec.rb +22 -22
  191. data/spec/trema/dsl/vhost_spec.rb +37 -37
  192. data/spec/trema/dsl/vswitch_spec.rb +21 -21
  193. data/spec/trema/echo-reply_spec.rb +29 -29
  194. data/spec/trema/echo-request_spec.rb +54 -54
  195. data/spec/trema/enqueue_spec.rb +25 -25
  196. data/spec/trema/error_spec.rb +30 -30
  197. data/spec/trema/executables_spec.rb +20 -20
  198. data/spec/trema/features-reply_spec.rb +41 -41
  199. data/spec/trema/features-request_spec.rb +35 -35
  200. data/spec/trema/flow-mod_spec.rb +32 -32
  201. data/spec/trema/flow-removed_spec.rb +62 -62
  202. data/spec/trema/get-config-reply_spec.rb +14 -12
  203. data/spec/trema/get-config-request_spec.rb +35 -35
  204. data/spec/trema/hardware-switch_spec.rb +12 -12
  205. data/spec/trema/hello_spec.rb +17 -17
  206. data/spec/trema/host_spec.rb +71 -71
  207. data/spec/trema/link_spec.rb +13 -13
  208. data/spec/trema/list-switches-reply_spec.rb +10 -10
  209. data/spec/trema/match_spec.rb +41 -41
  210. data/spec/trema/open-vswitch_spec.rb +45 -45
  211. data/spec/trema/openflow-error_spec.rb +67 -65
  212. data/spec/trema/packet-in_spec.rb +450 -446
  213. data/spec/trema/packet-out_spec.rb +42 -42
  214. data/spec/trema/packetin-filter_spec.rb +5 -5
  215. data/spec/trema/port-mod_spec.rb +32 -32
  216. data/spec/trema/port-status-add_spec.rb +3 -3
  217. data/spec/trema/port-status-delete_spec.rb +3 -3
  218. data/spec/trema/port-status-modify_spec.rb +16 -16
  219. data/spec/trema/port-status_spec.rb +2 -2
  220. data/spec/trema/port_spec.rb +21 -21
  221. data/spec/trema/process_spec.rb +22 -22
  222. data/spec/trema/queue-get-config-reply_spec.rb +21 -20
  223. data/spec/trema/queue-get-config-request_spec.rb +24 -24
  224. data/spec/trema/send-out-port_spec.rb +42 -42
  225. data/spec/trema/set-config_spec.rb +31 -31
  226. data/spec/trema/set-eth-addr_spec.rb +21 -21
  227. data/spec/trema/set-ip-addr_spec.rb +29 -29
  228. data/spec/trema/set-ip-tos_spec.rb +26 -26
  229. data/spec/trema/set-transport-dst-port_spec.rb +22 -22
  230. data/spec/trema/set-transport-src-port_spec.rb +22 -22
  231. data/spec/trema/set-vlan-priority_spec.rb +23 -23
  232. data/spec/trema/set-vlan-vid_spec.rb +23 -23
  233. data/spec/trema/shell/vhost_spec.rb +21 -21
  234. data/spec/trema/shell/vswitch_spec.rb +30 -30
  235. data/spec/trema/stats-reply_spec.rb +183 -173
  236. data/spec/trema/stats-request_spec.rb +66 -66
  237. data/spec/trema/strip-vlan-header_spec.rb +11 -11
  238. data/spec/trema/switch-daemon_spec.rb +34 -34
  239. data/spec/trema/switch-disconnected_spec.rb +17 -17
  240. data/spec/trema/switch-manager_spec.rb +6 -6
  241. data/spec/trema/tremashark_spec.rb +4 -4
  242. data/spec/trema/util_spec.rb +35 -35
  243. data/spec/trema/vendor-action_spec.rb +26 -26
  244. data/spec/trema/vendor_spec.rb +27 -27
  245. data/spec/trema_spec.rb +2 -2
  246. data/src/examples/cbench_switch/cbench-switch.rb +3 -3
  247. data/src/examples/dumper/dumper.rb +31 -31
  248. data/src/examples/hello_trema/hello-trema.rb +2 -2
  249. data/src/examples/learning_switch/fdb.rb +14 -14
  250. data/src/examples/learning_switch/learning-switch.rb +12 -10
  251. data/src/examples/learning_switch/learning_switch.c +22 -39
  252. data/src/examples/list_switches/list-switches.rb +3 -3
  253. data/src/examples/match_compare/match-compare.rb +20 -20
  254. data/src/examples/multi_learning_switch/multi-learning-switch.rb +12 -12
  255. data/src/examples/openflow_message/echo.rb +4 -4
  256. data/src/examples/openflow_message/example.rb +7 -7
  257. data/src/examples/openflow_message/features-request.rb +31 -31
  258. data/src/examples/openflow_message/hello.rb +2 -2
  259. data/src/examples/openflow_message/set-config.rb +4 -4
  260. data/src/examples/openflow_message/vendor-action.rb +3 -3
  261. data/src/examples/openflow_message/vendor-stats-request.rb +9 -9
  262. data/src/examples/packet_in/packet-in.rb +2 -2
  263. data/src/examples/patch_panel/patch-panel.rb +9 -9
  264. data/src/examples/repeater_hub/repeater-hub.rb +4 -4
  265. data/src/examples/repeater_hub/repeater-hub_spec.rb +65 -65
  266. data/src/examples/simple_router/arp-table.rb +7 -7
  267. data/src/examples/simple_router/interface.rb +10 -10
  268. data/src/examples/simple_router/routing-table.rb +4 -4
  269. data/src/examples/simple_router/simple-router.rb +3 -3
  270. data/src/examples/switch_info/switch-info.rb +9 -9
  271. data/src/examples/switch_monitor/switch-monitor.rb +4 -4
  272. data/src/examples/traffic_monitor/counter.rb +6 -6
  273. data/src/examples/traffic_monitor/fdb.rb +4 -4
  274. data/src/examples/traffic_monitor/traffic-monitor.rb +12 -12
  275. data/src/examples/transparent_firewall/README.md +61 -0
  276. data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +713 -0
  277. data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +3440 -0
  278. data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +11342 -0
  279. data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +1937 -0
  280. data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +7329 -0
  281. data/src/examples/transparent_firewall/block-rfc1918.rb +86 -0
  282. data/src/examples/transparent_firewall/pass-delegated.rb +178 -0
  283. data/src/examples/transparent_firewall/regen_aggregated.sh +53 -0
  284. data/src/examples/transparent_firewall/stats-to-cidrs.rb +59 -0
  285. data/src/lib/messenger.c +14 -5
  286. data/src/lib/openflow_message.c +0 -5
  287. data/tasks/rubocop.rake +22 -0
  288. data/trema +1 -1
  289. data/trema-config +1 -1
  290. data/trema.gemspec +22 -22
  291. metadata +30 -16
@@ -15,13 +15,13 @@
15
15
  #
16
16
 
17
17
 
18
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
19
- require "trema"
18
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
19
+ require 'trema'
20
20
 
21
21
 
22
22
  describe Trema::PacketIn do
23
23
  def send_and_wait
24
- send_packets "host1", "host2"
24
+ send_packets 'host1', 'host2'
25
25
  sleep 2
26
26
  end
27
27
 
@@ -29,82 +29,86 @@ describe Trema::PacketIn do
29
29
  class PacketInController < Controller; end
30
30
 
31
31
  class PacketInSendController < Controller
32
- def packet_in datapath_id, message
32
+ def packet_in(datapath_id, message)
33
33
  send_flow_mod_add(
34
34
  datapath_id,
35
- :match => Match.from( message ),
36
- :actions => Trema::ActionOutput.new( :port => 2 )
35
+ :match => Match.from(message),
36
+ :actions => Trema::ActionOutput.new(:port => 2)
37
37
  )
38
38
  send_packet_out(
39
39
  datapath_id,
40
40
  :packet_in => message,
41
- :actions => Trema::ActionOutput.new( :port => 2 )
41
+ :actions => Trema::ActionOutput.new(:port => 2)
42
42
  )
43
43
  end
44
44
  end
45
45
 
46
- context "when instance is created" do
47
- it "should have valid datapath_id and in_port" do
48
- network {
49
- vswitch( "test" ) { datapath_id 0xabc }
50
- vhost "host1"
51
- vhost "host2"
52
- link "test", "host1"
53
- link "test", "host2"
54
- }.run( PacketInController ) {
55
- controller( "PacketInController" ).should_receive( :packet_in ) do | datapath_id, message |
56
- expect( datapath_id ).to eq( 0xabc )
57
- expect( message.datapath_id ).to eq( 0xabc )
58
- expect( message.in_port ).to be > 0
46
+ context 'when instance is created' do
47
+ it 'should have valid datapath_id and in_port' do
48
+ network do
49
+ vswitch('test') { datapath_id 0xabc }
50
+ vhost 'host1'
51
+ vhost 'host2'
52
+ link 'test', 'host1'
53
+ link 'test', 'host2'
54
+ end.run(PacketInController) do
55
+ controller('PacketInController').should_receive(:packet_in) do | datapath_id, message |
56
+ expect(datapath_id).to eq(0xabc)
57
+ expect(message.datapath_id).to eq(0xabc)
58
+ expect(message.in_port).to be > 0
59
59
  end
60
60
  send_and_wait
61
- }
61
+ end
62
62
  end
63
63
 
64
64
 
65
- it "should have vaild user data" do
66
- network {
67
- vswitch( "test" ) { datapath_id 0xabc }
68
- vhost( "host1" ) { mac "00:00:00:00:00:01"
69
- ip "192.168.1.1" }
70
- vhost( "host2" ) { mac "00:00:00:00:00:02"
71
- ip "192.168.1.2" }
72
- link "test", "host1"
73
- link "test", "host2"
74
- }.run( PacketInController ) {
75
- controller( "PacketInController" ).should_receive( :packet_in ) do | datapath_id, message |
65
+ it 'should have vaild user data' do
66
+ network do
67
+ vswitch('test') { datapath_id 0xabc }
68
+ vhost('host1') do
69
+ mac '00:00:00:00:00:01'
70
+ ip '192.168.1.1'
71
+ end
72
+ vhost('host2') do
73
+ mac '00:00:00:00:00:02'
74
+ ip '192.168.1.2'
75
+ end
76
+ link 'test', 'host1'
77
+ link 'test', 'host2'
78
+ end.run(PacketInController) do
79
+ controller('PacketInController').should_receive(:packet_in) do | datapath_id, message |
76
80
  # packet_in expected to have data portion.
77
- expect( message.total_len ).to be > 20
78
- expect( message.data ).to be_instance_of( String )
79
- expect( message.buffered? ).to be_false
80
-
81
- expect( message.macsa ).to be_instance_of( Pio::Mac )
82
- expect( message.macsa.to_s ).to eq( "00:00:00:00:00:01" )
83
- expect( message.macda ).to be_instance_of( Pio::Mac )
84
- expect( message.macda.to_s ).to eq( "00:00:00:00:00:02" )
85
-
86
- expect( message.eth_type ).to eq( 0x0800 )
87
- expect( message.ipv4? ).to be_true
88
- expect( message.ipv4_version ).to eq( 4 )
89
- expect( message.ipv4_saddr ).to be_instance_of( Pio::IPv4Address )
90
- expect( message.ipv4_saddr.to_s ).to eq( "192.168.1.1" )
91
- expect( message.ipv4_daddr ).to be_instance_of( Pio::IPv4Address )
92
- expect( message.ipv4_daddr.to_s ).to eq( "192.168.1.2" )
81
+ expect(message.total_len).to be > 20
82
+ expect(message.data).to be_instance_of(String)
83
+ expect(message.buffered?).to be_false
84
+
85
+ expect(message.macsa).to be_instance_of(Pio::Mac)
86
+ expect(message.macsa.to_s).to eq('00:00:00:00:00:01')
87
+ expect(message.macda).to be_instance_of(Pio::Mac)
88
+ expect(message.macda.to_s).to eq('00:00:00:00:00:02')
89
+
90
+ expect(message.eth_type).to eq(0x0800)
91
+ expect(message.ipv4?).to be_true
92
+ expect(message.ipv4_version).to eq(4)
93
+ expect(message.ipv4_saddr).to be_instance_of(Pio::IPv4Address)
94
+ expect(message.ipv4_saddr.to_s).to eq('192.168.1.1')
95
+ expect(message.ipv4_daddr).to be_instance_of(Pio::IPv4Address)
96
+ expect(message.ipv4_daddr.to_s).to eq('192.168.1.2')
93
97
  end
94
98
  send_and_wait
95
- }
99
+ end
96
100
  end
97
101
  end
98
102
 
99
- context "when reading packet content" do
100
- it "should have correct ARP packet fields" do
101
- network {
102
- vswitch( "packet-in" ) { datapath_id 0xabc }
103
- vhost "host1"
104
- vhost ( "host2" ) { mac "00:00:00:00:00:02" }
105
- link "host1", "packet-in"
106
- link "host2", "packet-in"
107
- }.run( PacketInSendController ) {
103
+ context 'when reading packet content' do
104
+ it 'should have correct ARP packet fields' do
105
+ network do
106
+ vswitch('packet-in') { datapath_id 0xabc }
107
+ vhost 'host1'
108
+ vhost ( 'host2') { mac '00:00:00:00:00:02' }
109
+ link 'host1', 'packet-in'
110
+ link 'host2', 'packet-in'
111
+ end.run(PacketInSendController) do
108
112
  data = [
109
113
  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # dst
110
114
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # src
@@ -125,97 +129,97 @@ describe Trema::PacketIn do
125
129
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126
130
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127
131
  0x00, 0x00
128
- ].pack( "C*" )
129
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
130
- expect( message.in_port ).to be > 0
131
- expect( message.vtag? ).to be_false
132
- expect( message.arp? ).to be_true
133
- expect( message.rarp? ).to be_false
134
- expect( message.ipv4? ).to be_false
135
- expect( message.lldp? ).to be_false
136
- expect( message.tcp? ).to be_false
137
- expect( message.udp? ).to be_false
138
- expect( message.icmpv4? ).to be_false
139
- expect( message.igmp? ).to be_false
140
-
141
- expect( message.arp_oper ).to eq( 2 )
142
- expect( message.arp_sha.to_s ).to eq( "00:00:00:00:00:01" )
143
- expect( message.arp_spa.to_s ).to eq( "192.168.0.1" )
144
- expect( message.arp_tha.to_s ).to eq( "00:00:00:00:00:02" )
145
- expect( message.arp_tpa.to_s ).to eq( "192.168.0.2" )
146
- expect( message.arp_request? ).to be_false
147
- expect( message.arp_reply? ).to be_true
148
-
149
- expect( message.rarp_oper ).to be_nil
150
- expect( message.rarp_sha ).to be_nil
151
- expect( message.rarp_spa ).to be_nil
152
- expect( message.rarp_tha ).to be_nil
153
- expect( message.rarp_tpa ).to be_nil
154
- expect( message.rarp_request? ).to be_false
155
- expect( message.rarp_reply? ).to be_false
156
-
157
- expect( message.vlan_tpid ).to be_nil
158
- expect( message.vlan_tci ).to be_nil
159
- expect( message.vlan_prio ).to be_nil
160
- expect( message.vlan_cfi ).to be_nil
161
- expect( message.vlan_vid ).to be_nil
162
-
163
- expect( message.ipv4_version ).to be_nil
164
- expect( message.ipv4_ihl ).to be_nil
165
- expect( message.ipv4_tos ).to be_nil
166
- expect( message.ipv4_tot_len ).to be_nil
167
- expect( message.ipv4_id ).to be_nil
168
- expect( message.ipv4_frag_off ).to be_nil
169
- expect( message.ipv4_ttl ).to be_nil
170
- expect( message.ipv4_protocol ).to be_nil
171
- expect( message.ipv4_checksum ).to be_nil
172
- expect( message.ipv4_saddr ).to be_nil
173
- expect( message.ipv4_daddr ).to be_nil
174
-
175
- expect( message.icmpv4_type ).to be_nil
176
- expect( message.icmpv4_code ).to be_nil
177
- expect( message.icmpv4_checksum ).to be_nil
178
- expect( message.icmpv4_id ).to be_nil
179
- expect( message.icmpv4_seq ).to be_nil
180
- expect( message.icmpv4_gateway ).to be_nil
181
-
182
- expect( message.igmp_type ).to be_nil
183
- expect( message.igmp_checksum ).to be_nil
184
- expect( message.igmp_group ).to be_nil
185
-
186
- expect( message.tcp_src_port ).to be_nil
187
- expect( message.tcp_dst_port ).to be_nil
188
- expect( message.tcp_seq_no ).to be_nil
189
- expect( message.tcp_ack_no ).to be_nil
190
- expect( message.tcp_offset ).to be_nil
191
- expect( message.tcp_flags ).to be_nil
192
- expect( message.tcp_window ).to be_nil
193
- expect( message.tcp_checksum ).to be_nil
194
- expect( message.tcp_urgent ).to be_nil
195
-
196
- expect( message.udp_src_port ).to be_nil
197
- expect( message.udp_dst_port ).to be_nil
198
- expect( message.udp_checksum ).to be_nil
199
- expect( message.udp_len ).to be_nil
132
+ ].pack('C*')
133
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
134
+ expect(message.in_port).to be > 0
135
+ expect(message.vtag?).to be_false
136
+ expect(message.arp?).to be_true
137
+ expect(message.rarp?).to be_false
138
+ expect(message.ipv4?).to be_false
139
+ expect(message.lldp?).to be_false
140
+ expect(message.tcp?).to be_false
141
+ expect(message.udp?).to be_false
142
+ expect(message.icmpv4?).to be_false
143
+ expect(message.igmp?).to be_false
144
+
145
+ expect(message.arp_oper).to eq(2)
146
+ expect(message.arp_sha.to_s).to eq('00:00:00:00:00:01')
147
+ expect(message.arp_spa.to_s).to eq('192.168.0.1')
148
+ expect(message.arp_tha.to_s).to eq('00:00:00:00:00:02')
149
+ expect(message.arp_tpa.to_s).to eq('192.168.0.2')
150
+ expect(message.arp_request?).to be_false
151
+ expect(message.arp_reply?).to be_true
152
+
153
+ expect(message.rarp_oper).to be_nil
154
+ expect(message.rarp_sha).to be_nil
155
+ expect(message.rarp_spa).to be_nil
156
+ expect(message.rarp_tha).to be_nil
157
+ expect(message.rarp_tpa).to be_nil
158
+ expect(message.rarp_request?).to be_false
159
+ expect(message.rarp_reply?).to be_false
160
+
161
+ expect(message.vlan_tpid).to be_nil
162
+ expect(message.vlan_tci).to be_nil
163
+ expect(message.vlan_prio).to be_nil
164
+ expect(message.vlan_cfi).to be_nil
165
+ expect(message.vlan_vid).to be_nil
166
+
167
+ expect(message.ipv4_version).to be_nil
168
+ expect(message.ipv4_ihl).to be_nil
169
+ expect(message.ipv4_tos).to be_nil
170
+ expect(message.ipv4_tot_len).to be_nil
171
+ expect(message.ipv4_id).to be_nil
172
+ expect(message.ipv4_frag_off).to be_nil
173
+ expect(message.ipv4_ttl).to be_nil
174
+ expect(message.ipv4_protocol).to be_nil
175
+ expect(message.ipv4_checksum).to be_nil
176
+ expect(message.ipv4_saddr).to be_nil
177
+ expect(message.ipv4_daddr).to be_nil
178
+
179
+ expect(message.icmpv4_type).to be_nil
180
+ expect(message.icmpv4_code).to be_nil
181
+ expect(message.icmpv4_checksum).to be_nil
182
+ expect(message.icmpv4_id).to be_nil
183
+ expect(message.icmpv4_seq).to be_nil
184
+ expect(message.icmpv4_gateway).to be_nil
185
+
186
+ expect(message.igmp_type).to be_nil
187
+ expect(message.igmp_checksum).to be_nil
188
+ expect(message.igmp_group).to be_nil
189
+
190
+ expect(message.tcp_src_port).to be_nil
191
+ expect(message.tcp_dst_port).to be_nil
192
+ expect(message.tcp_seq_no).to be_nil
193
+ expect(message.tcp_ack_no).to be_nil
194
+ expect(message.tcp_offset).to be_nil
195
+ expect(message.tcp_flags).to be_nil
196
+ expect(message.tcp_window).to be_nil
197
+ expect(message.tcp_checksum).to be_nil
198
+ expect(message.tcp_urgent).to be_nil
199
+
200
+ expect(message.udp_src_port).to be_nil
201
+ expect(message.udp_dst_port).to be_nil
202
+ expect(message.udp_checksum).to be_nil
203
+ expect(message.udp_len).to be_nil
200
204
  end
201
205
 
202
- controller( "PacketInSendController" ).send_packet_out(
206
+ controller('PacketInSendController').send_packet_out(
203
207
  0xabc,
204
208
  :data => data,
205
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
209
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
206
210
  )
207
211
  sleep 2
208
- }
212
+ end
209
213
  end
210
214
 
211
- it "should have correct RARP packet fields" do
212
- network {
213
- vswitch( "packet-in" ) { datapath_id 0xabc }
214
- vhost "host1"
215
- vhost ( "host2" ) { mac "00:00:00:00:00:02" }
216
- link "host1", "packet-in"
217
- link "host2", "packet-in"
218
- }.run( PacketInSendController ) {
215
+ it 'should have correct RARP packet fields' do
216
+ network do
217
+ vswitch('packet-in') { datapath_id 0xabc }
218
+ vhost 'host1'
219
+ vhost ( 'host2') { mac '00:00:00:00:00:02' }
220
+ link 'host1', 'packet-in'
221
+ link 'host2', 'packet-in'
222
+ end.run(PacketInSendController) do
219
223
  data = [
220
224
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, # dst
221
225
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # src
@@ -236,101 +240,101 @@ describe Trema::PacketIn do
236
240
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237
241
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238
242
  0x00, 0x00
239
- ].pack( "C*" )
240
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
241
- expect( message.in_port ).to be > 0
242
- expect( message.vtag? ).to be_false
243
- expect( message.arp? ).to be_false
244
- expect( message.rarp? ).to be_true
245
- expect( message.ipv4? ).to be_false
246
- expect( message.lldp? ).to be_false
247
- expect( message.tcp? ).to be_false
248
- expect( message.udp? ).to be_false
249
- expect( message.icmpv4? ).to be_false
250
- expect( message.igmp? ).to be_false
251
-
252
- expect( message.arp_oper ).to be_nil
253
- expect( message.arp_sha ).to be_nil
254
- expect( message.arp_spa ).to be_nil
255
- expect( message.arp_tha ).to be_nil
256
- expect( message.arp_tpa ).to be_nil
257
- expect( message.arp_request? ).to be_false
258
- expect( message.arp_reply? ).to be_false
259
-
260
- expect( message.rarp_oper ).to eq( 3 )
261
- expect( message.rarp_sha.to_s ).to eq( "00:00:00:00:00:01" )
262
- expect( message.rarp_spa.to_s ).to eq( "192.168.0.1" )
263
- expect( message.rarp_tha.to_s ).to eq( "00:00:00:00:00:02" )
264
- expect( message.rarp_tpa.to_s ).to eq( "0.0.0.0" )
265
- expect( message.rarp_request? ).to be_true
266
- expect( message.rarp_reply? ).to be_false
267
-
268
- expect( message.vlan_tpid ).to be_nil
269
- expect( message.vlan_tci ).to be_nil
270
- expect( message.vlan_prio ).to be_nil
271
- expect( message.vlan_cfi ).to be_nil
272
- expect( message.vlan_vid ).to be_nil
273
-
274
- expect( message.ipv4_version ).to be_nil
275
- expect( message.ipv4_ihl ).to be_nil
276
- expect( message.ipv4_tos ).to be_nil
277
- expect( message.ipv4_tot_len ).to be_nil
278
- expect( message.ipv4_id ).to be_nil
279
- expect( message.ipv4_frag_off ).to be_nil
280
- expect( message.ipv4_ttl ).to be_nil
281
- expect( message.ipv4_protocol ).to be_nil
282
- expect( message.ipv4_checksum ).to be_nil
283
- expect( message.ipv4_saddr ).to be_nil
284
- expect( message.ipv4_daddr ).to be_nil
285
-
286
- expect( message.icmpv4_type ).to be_nil
287
- expect( message.icmpv4_code ).to be_nil
288
- expect( message.icmpv4_checksum ).to be_nil
289
- expect( message.icmpv4_id ).to be_nil
290
- expect( message.icmpv4_seq ).to be_nil
291
- expect( message.icmpv4_gateway ).to be_nil
292
-
293
- expect( message.igmp_type ).to be_nil
294
- expect( message.igmp_checksum ).to be_nil
295
- expect( message.igmp_group ).to be_nil
296
-
297
- expect( message.tcp_src_port ).to be_nil
298
- expect( message.tcp_dst_port ).to be_nil
299
- expect( message.tcp_seq_no ).to be_nil
300
- expect( message.tcp_ack_no ).to be_nil
301
- expect( message.tcp_offset ).to be_nil
302
- expect( message.tcp_flags ).to be_nil
303
- expect( message.tcp_window ).to be_nil
304
- expect( message.tcp_checksum ).to be_nil
305
- expect( message.tcp_urgent ).to be_nil
306
-
307
- expect( message.udp_src_port ).to be_nil
308
- expect( message.udp_dst_port ).to be_nil
309
- expect( message.udp_checksum ).to be_nil
310
- expect( message.udp_len ).to be_nil
243
+ ].pack('C*')
244
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
245
+ expect(message.in_port).to be > 0
246
+ expect(message.vtag?).to be_false
247
+ expect(message.arp?).to be_false
248
+ expect(message.rarp?).to be_true
249
+ expect(message.ipv4?).to be_false
250
+ expect(message.lldp?).to be_false
251
+ expect(message.tcp?).to be_false
252
+ expect(message.udp?).to be_false
253
+ expect(message.icmpv4?).to be_false
254
+ expect(message.igmp?).to be_false
255
+
256
+ expect(message.arp_oper).to be_nil
257
+ expect(message.arp_sha).to be_nil
258
+ expect(message.arp_spa).to be_nil
259
+ expect(message.arp_tha).to be_nil
260
+ expect(message.arp_tpa).to be_nil
261
+ expect(message.arp_request?).to be_false
262
+ expect(message.arp_reply?).to be_false
263
+
264
+ expect(message.rarp_oper).to eq(3)
265
+ expect(message.rarp_sha.to_s).to eq('00:00:00:00:00:01')
266
+ expect(message.rarp_spa.to_s).to eq('192.168.0.1')
267
+ expect(message.rarp_tha.to_s).to eq('00:00:00:00:00:02')
268
+ expect(message.rarp_tpa.to_s).to eq('0.0.0.0')
269
+ expect(message.rarp_request?).to be_true
270
+ expect(message.rarp_reply?).to be_false
271
+
272
+ expect(message.vlan_tpid).to be_nil
273
+ expect(message.vlan_tci).to be_nil
274
+ expect(message.vlan_prio).to be_nil
275
+ expect(message.vlan_cfi).to be_nil
276
+ expect(message.vlan_vid).to be_nil
277
+
278
+ expect(message.ipv4_version).to be_nil
279
+ expect(message.ipv4_ihl).to be_nil
280
+ expect(message.ipv4_tos).to be_nil
281
+ expect(message.ipv4_tot_len).to be_nil
282
+ expect(message.ipv4_id).to be_nil
283
+ expect(message.ipv4_frag_off).to be_nil
284
+ expect(message.ipv4_ttl).to be_nil
285
+ expect(message.ipv4_protocol).to be_nil
286
+ expect(message.ipv4_checksum).to be_nil
287
+ expect(message.ipv4_saddr).to be_nil
288
+ expect(message.ipv4_daddr).to be_nil
289
+
290
+ expect(message.icmpv4_type).to be_nil
291
+ expect(message.icmpv4_code).to be_nil
292
+ expect(message.icmpv4_checksum).to be_nil
293
+ expect(message.icmpv4_id).to be_nil
294
+ expect(message.icmpv4_seq).to be_nil
295
+ expect(message.icmpv4_gateway).to be_nil
296
+
297
+ expect(message.igmp_type).to be_nil
298
+ expect(message.igmp_checksum).to be_nil
299
+ expect(message.igmp_group).to be_nil
300
+
301
+ expect(message.tcp_src_port).to be_nil
302
+ expect(message.tcp_dst_port).to be_nil
303
+ expect(message.tcp_seq_no).to be_nil
304
+ expect(message.tcp_ack_no).to be_nil
305
+ expect(message.tcp_offset).to be_nil
306
+ expect(message.tcp_flags).to be_nil
307
+ expect(message.tcp_window).to be_nil
308
+ expect(message.tcp_checksum).to be_nil
309
+ expect(message.tcp_urgent).to be_nil
310
+
311
+ expect(message.udp_src_port).to be_nil
312
+ expect(message.udp_dst_port).to be_nil
313
+ expect(message.udp_checksum).to be_nil
314
+ expect(message.udp_len).to be_nil
311
315
  end
312
316
 
313
- controller( "PacketInSendController" ).send_packet_out(
317
+ controller('PacketInSendController').send_packet_out(
314
318
  0xabc,
315
319
  :data => data,
316
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
320
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
317
321
  )
318
322
  sleep 2
319
- }
323
+ end
320
324
  end
321
325
 
322
- it "should have correct TCP packet fields" do
323
- network {
324
- vswitch( "packet-in" ) { datapath_id 0xabc }
325
- vhost "host1"
326
- vhost ( "host2" ) {
327
- ip "192.168.0.2"
328
- netmask "255.255.0.0"
329
- mac "00:00:00:00:00:02"
330
- }
331
- link "host1", "packet-in"
332
- link "host2", "packet-in"
333
- }.run( PacketInSendController ) {
326
+ it 'should have correct TCP packet fields' do
327
+ network do
328
+ vswitch('packet-in') { datapath_id 0xabc }
329
+ vhost 'host1'
330
+ vhost ( 'host2') do
331
+ ip '192.168.0.2'
332
+ netmask '255.255.0.0'
333
+ mac '00:00:00:00:00:02'
334
+ end
335
+ link 'host1', 'packet-in'
336
+ link 'host2', 'packet-in'
337
+ end.run(PacketInSendController) do
334
338
  data = [
335
339
  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # dst
336
340
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # src
@@ -356,75 +360,75 @@ describe Trema::PacketIn do
356
360
  0x2e, 0x86, # checksum
357
361
  0x00, 0x00, # urgent pointer
358
362
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
359
- ].pack( "C*" )
360
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
361
- expect( message.in_port ).to be > 0
362
- expect( message.vtag? ).to be_false
363
- expect( message.arp? ).to be_false
364
- expect( message.rarp? ).to be_false
365
- expect( message.ipv4? ).to be_true
366
- expect( message.lldp? ).to be_false
367
- expect( message.udp? ).to be_false
368
- expect( message.tcp? ).to be_true
369
- expect( message.icmpv4? ).to be_false
370
- expect( message.igmp? ).to be_false
371
-
372
- expect( message.ipv4_version ).to eq( 4 )
373
- expect( message.ipv4_ihl ).to eq( 5 )
374
- expect( message.ipv4_tos ).to eq( 0 )
375
- expect( message.ipv4_tot_len ).to eq( 0x28 )
376
- expect( message.ipv4_id ).to eq( 0 )
377
- expect( message.ipv4_frag_off ).to eq( 0 )
378
- expect( message.ipv4_ttl ).to eq( 0 )
379
- expect( message.ipv4_protocol ).to eq( 6 )
380
- expect( message.ipv4_checksum ).to eq( 0x397d )
381
- expect( message.ipv4_saddr.to_s ).to eq( "192.168.0.1" )
382
- expect( message.ipv4_daddr.to_s ).to eq( "192.168.0.2" )
383
-
384
- expect( message.tcp_src_port ).to eq( 1 )
385
- expect( message.tcp_dst_port ).to eq( 2 )
386
- expect( message.tcp_seq_no ).to eq( 0 )
387
- expect( message.tcp_ack_no ).to eq( 0 )
388
- expect( message.tcp_offset ).to eq( 5 )
389
- expect( message.tcp_flags ).to eq( 0 )
390
- expect( message.tcp_window ).to eq( 0 )
391
- expect( message.tcp_checksum ).to eq( 11910 ) # 0x2e86
392
- expect( message.tcp_urgent ).to eq( 0 )
393
-
394
- expect( message.arp_oper ).to be_nil
395
- expect( message.arp_sha ).to be_nil
396
- expect( message.arp_spa ).to be_nil
397
- expect( message.arp_tha ).to be_nil
398
- expect( message.arp_tpa ).to be_nil
399
-
400
- expect( message.rarp_oper ).to be_nil
401
- expect( message.rarp_sha ).to be_nil
402
- expect( message.rarp_spa ).to be_nil
403
- expect( message.rarp_tha ).to be_nil
404
- expect( message.rarp_tpa ).to be_nil
363
+ ].pack('C*')
364
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
365
+ expect(message.in_port).to be > 0
366
+ expect(message.vtag?).to be_false
367
+ expect(message.arp?).to be_false
368
+ expect(message.rarp?).to be_false
369
+ expect(message.ipv4?).to be_true
370
+ expect(message.lldp?).to be_false
371
+ expect(message.udp?).to be_false
372
+ expect(message.tcp?).to be_true
373
+ expect(message.icmpv4?).to be_false
374
+ expect(message.igmp?).to be_false
375
+
376
+ expect(message.ipv4_version).to eq(4)
377
+ expect(message.ipv4_ihl).to eq(5)
378
+ expect(message.ipv4_tos).to eq(0)
379
+ expect(message.ipv4_tot_len).to eq(0x28)
380
+ expect(message.ipv4_id).to eq(0)
381
+ expect(message.ipv4_frag_off).to eq(0)
382
+ expect(message.ipv4_ttl).to eq(0)
383
+ expect(message.ipv4_protocol).to eq(6)
384
+ expect(message.ipv4_checksum).to eq(0x397d)
385
+ expect(message.ipv4_saddr.to_s).to eq('192.168.0.1')
386
+ expect(message.ipv4_daddr.to_s).to eq('192.168.0.2')
387
+
388
+ expect(message.tcp_src_port).to eq(1)
389
+ expect(message.tcp_dst_port).to eq(2)
390
+ expect(message.tcp_seq_no).to eq(0)
391
+ expect(message.tcp_ack_no).to eq(0)
392
+ expect(message.tcp_offset).to eq(5)
393
+ expect(message.tcp_flags).to eq(0)
394
+ expect(message.tcp_window).to eq(0)
395
+ expect(message.tcp_checksum).to eq(11910) # 0x2e86
396
+ expect(message.tcp_urgent).to eq(0)
397
+
398
+ expect(message.arp_oper).to be_nil
399
+ expect(message.arp_sha).to be_nil
400
+ expect(message.arp_spa).to be_nil
401
+ expect(message.arp_tha).to be_nil
402
+ expect(message.arp_tpa).to be_nil
403
+
404
+ expect(message.rarp_oper).to be_nil
405
+ expect(message.rarp_sha).to be_nil
406
+ expect(message.rarp_spa).to be_nil
407
+ expect(message.rarp_tha).to be_nil
408
+ expect(message.rarp_tpa).to be_nil
405
409
  end
406
410
 
407
- controller( "PacketInSendController" ).send_packet_out(
411
+ controller('PacketInSendController').send_packet_out(
408
412
  0xabc,
409
413
  :data => data,
410
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
414
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
411
415
  )
412
416
  sleep 2
413
- }
417
+ end
414
418
  end
415
419
 
416
- it "should have correct UDP packet fields" do
417
- network {
418
- vswitch( "packet-in" ) { datapath_id 0xabc }
419
- vhost "host1"
420
- vhost ( "host2" ) {
421
- ip "192.168.0.2"
422
- netmask "255.255.0.0"
423
- mac "00:00:00:00:00:02"
424
- }
425
- link "host1", "packet-in"
426
- link "host2", "packet-in"
427
- }.run( PacketInSendController ) {
420
+ it 'should have correct UDP packet fields' do
421
+ network do
422
+ vswitch('packet-in') { datapath_id 0xabc }
423
+ vhost 'host1'
424
+ vhost ( 'host2') do
425
+ ip '192.168.0.2'
426
+ netmask '255.255.0.0'
427
+ mac '00:00:00:00:00:02'
428
+ end
429
+ link 'host1', 'packet-in'
430
+ link 'host2', 'packet-in'
431
+ end.run(PacketInSendController) do
428
432
  data = [
429
433
  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # dst
430
434
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # src
@@ -447,59 +451,59 @@ describe Trema::PacketIn do
447
451
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
448
452
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
449
453
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
450
- ].pack( "C*" )
451
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
452
- expect( message.in_port ).to be > 0
453
- expect( message.vtag? ).to be_false
454
- expect( message.arp? ).to be_false
455
- expect( message.rarp? ).to be_false
456
- expect( message.ipv4? ).to be_true
457
- expect( message.lldp? ).to be_false
458
- expect( message.tcp? ).to be_false
459
- expect( message.udp? ).to be_true
460
- expect( message.icmpv4? ).to be_false
461
- expect( message.igmp? ).to be_false
462
-
463
-
464
- expect( message.ipv4_version ).to eq( 4 )
465
- expect( message.ipv4_ihl ).to eq( 5 )
466
- expect( message.ipv4_tos ).to eq( 0 )
467
- expect( message.ipv4_tot_len ).to eq( 0x32 )
468
- expect( message.ipv4_id ).to eq( 0 )
469
- expect( message.ipv4_frag_off ).to eq( 0 )
470
- expect( message.ipv4_ttl ).to eq( 0x40 )
471
- expect( message.ipv4_protocol ).to eq( 17 )
472
- expect( message.ipv4_checksum ).to eq( 0xf968 )
473
- expect( message.ipv4_saddr.to_s ).to eq( "192.168.0.1" )
474
- expect( message.ipv4_daddr.to_s ).to eq( "192.168.0.2" )
475
-
476
- expect( message.udp_src_port ).to eq( 1 )
477
- expect( message.udp_dst_port ).to eq( 2 )
478
- expect( message.udp_checksum ).to eq( 0 )
479
- expect( message.udp_len ).to eq( 0x1e )
454
+ ].pack('C*')
455
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
456
+ expect(message.in_port).to be > 0
457
+ expect(message.vtag?).to be_false
458
+ expect(message.arp?).to be_false
459
+ expect(message.rarp?).to be_false
460
+ expect(message.ipv4?).to be_true
461
+ expect(message.lldp?).to be_false
462
+ expect(message.tcp?).to be_false
463
+ expect(message.udp?).to be_true
464
+ expect(message.icmpv4?).to be_false
465
+ expect(message.igmp?).to be_false
466
+
467
+
468
+ expect(message.ipv4_version).to eq(4)
469
+ expect(message.ipv4_ihl).to eq(5)
470
+ expect(message.ipv4_tos).to eq(0)
471
+ expect(message.ipv4_tot_len).to eq(0x32)
472
+ expect(message.ipv4_id).to eq(0)
473
+ expect(message.ipv4_frag_off).to eq(0)
474
+ expect(message.ipv4_ttl).to eq(0x40)
475
+ expect(message.ipv4_protocol).to eq(17)
476
+ expect(message.ipv4_checksum).to eq(0xf968)
477
+ expect(message.ipv4_saddr.to_s).to eq('192.168.0.1')
478
+ expect(message.ipv4_daddr.to_s).to eq('192.168.0.2')
479
+
480
+ expect(message.udp_src_port).to eq(1)
481
+ expect(message.udp_dst_port).to eq(2)
482
+ expect(message.udp_checksum).to eq(0)
483
+ expect(message.udp_len).to eq(0x1e)
480
484
  end
481
485
 
482
- controller( "PacketInSendController" ).send_packet_out(
486
+ controller('PacketInSendController').send_packet_out(
483
487
  0xabc,
484
488
  :data => data,
485
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
489
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
486
490
  )
487
491
  sleep 2
488
- }
492
+ end
489
493
  end
490
494
 
491
- it "should have correct VLAN and ICMPv4 packet fields" do
492
- network {
493
- vswitch( "packet-in" ) { datapath_id 0xabc }
494
- vhost "host1"
495
- vhost ( "host2" ) {
496
- ip "192.168.32.1"
497
- netmask "255.255.255.0"
498
- mac "00:00:00:00:00:02"
499
- }
500
- link "host1", "packet-in"
501
- link "host2", "packet-in"
502
- }.run( PacketInSendController ) {
495
+ it 'should have correct VLAN and ICMPv4 packet fields' do
496
+ network do
497
+ vswitch('packet-in') { datapath_id 0xabc }
498
+ vhost 'host1'
499
+ vhost ( 'host2') do
500
+ ip '192.168.32.1'
501
+ netmask '255.255.255.0'
502
+ mac '00:00:00:00:00:02'
503
+ end
504
+ link 'host1', 'packet-in'
505
+ link 'host2', 'packet-in'
506
+ end.run(PacketInSendController) do
503
507
  data = [
504
508
  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # dst
505
509
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # src
@@ -529,67 +533,67 @@ describe Trema::PacketIn do
529
533
  0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
530
534
  0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61,
531
535
  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69
532
- ].pack( "C*" )
533
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
534
- expect( message.in_port ).to be > 0
535
- expect( message.vtag? ).to be_true
536
- expect( message.arp? ).to be_false
537
- expect( message.rarp? ).to be_false
538
- expect( message.ipv4? ).to be_true
539
- expect( message.lldp? ).to be_false
540
- expect( message.udp? ).to be_false
541
- expect( message.tcp? ).to be_false
542
- expect( message.icmpv4? ).to be_true
543
- expect( message.igmp? ).to be_false
544
-
545
- expect( message.vlan_tpid ).to eq( 0x8100 )
546
- expect( message.vlan_tci ).to eq( 0x0f9f )
547
- expect( message.vlan_prio ).to eq( 0 )
548
- expect( message.vlan_cfi ).to eq( 0 )
549
- expect( message.vlan_vid ).to eq( 0xf9f )
550
- expect( message.eth_type ).to eq( 0x0800 )
551
-
552
- expect( message.ipv4_version ).to eq( 4 )
553
- expect( message.ipv4_ihl ).to eq( 5 )
554
- expect( message.ipv4_tos ).to eq( 0 )
555
- expect( message.ipv4_tot_len ).to eq( 0x003c )
556
- expect( message.ipv4_id ).to eq( 0x8c1b )
557
- expect( message.ipv4_frag_off ).to eq( 0 )
558
- expect( message.ipv4_ttl ).to eq( 0x80 )
559
- expect( message.ipv4_protocol ).to eq( 1 )
560
- expect( message.ipv4_checksum ).to eq( 0xed09 )
561
- expect( message.ipv4_saddr.to_s ).to eq( "192.168.32.74" )
562
- expect( message.ipv4_daddr.to_s ).to eq( "192.168.32.1" )
563
-
564
- expect( message.icmpv4_type ).to eq( 8 )
565
- expect( message.icmpv4_code ).to eq( 0 )
566
- expect( message.icmpv4_checksum ).to eq( 0xe95b )
567
- expect( message.icmpv4_id ).to eq( 0x0400 )
568
- expect( message.icmpv4_seq ).to eq( 0x6000 )
569
-
570
- expect( message.icmpv4_echo_reply? ).to be_false
571
- expect( message.icmpv4_dst_unreach? ).to be_false
572
- expect( message.icmpv4_redirect? ).to be_false
573
- expect( message.icmpv4_echo_request? ).to be_true
536
+ ].pack('C*')
537
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
538
+ expect(message.in_port).to be > 0
539
+ expect(message.vtag?).to be_true
540
+ expect(message.arp?).to be_false
541
+ expect(message.rarp?).to be_false
542
+ expect(message.ipv4?).to be_true
543
+ expect(message.lldp?).to be_false
544
+ expect(message.udp?).to be_false
545
+ expect(message.tcp?).to be_false
546
+ expect(message.icmpv4?).to be_true
547
+ expect(message.igmp?).to be_false
548
+
549
+ expect(message.vlan_tpid).to eq(0x8100)
550
+ expect(message.vlan_tci).to eq(0x0f9f)
551
+ expect(message.vlan_prio).to eq(0)
552
+ expect(message.vlan_cfi).to eq(0)
553
+ expect(message.vlan_vid).to eq(0xf9f)
554
+ expect(message.eth_type).to eq(0x0800)
555
+
556
+ expect(message.ipv4_version).to eq(4)
557
+ expect(message.ipv4_ihl).to eq(5)
558
+ expect(message.ipv4_tos).to eq(0)
559
+ expect(message.ipv4_tot_len).to eq(0x003c)
560
+ expect(message.ipv4_id).to eq(0x8c1b)
561
+ expect(message.ipv4_frag_off).to eq(0)
562
+ expect(message.ipv4_ttl).to eq(0x80)
563
+ expect(message.ipv4_protocol).to eq(1)
564
+ expect(message.ipv4_checksum).to eq(0xed09)
565
+ expect(message.ipv4_saddr.to_s).to eq('192.168.32.74')
566
+ expect(message.ipv4_daddr.to_s).to eq('192.168.32.1')
567
+
568
+ expect(message.icmpv4_type).to eq(8)
569
+ expect(message.icmpv4_code).to eq(0)
570
+ expect(message.icmpv4_checksum).to eq(0xe95b)
571
+ expect(message.icmpv4_id).to eq(0x0400)
572
+ expect(message.icmpv4_seq).to eq(0x6000)
573
+
574
+ expect(message.icmpv4_echo_reply?).to be_false
575
+ expect(message.icmpv4_dst_unreach?).to be_false
576
+ expect(message.icmpv4_redirect?).to be_false
577
+ expect(message.icmpv4_echo_request?).to be_true
574
578
  end
575
579
 
576
- controller( "PacketInSendController" ).send_packet_out(
580
+ controller('PacketInSendController').send_packet_out(
577
581
  0xabc,
578
582
  :data => data,
579
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
583
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
580
584
  )
581
585
  sleep 2
582
- }
586
+ end
583
587
  end
584
588
 
585
- it "should have correct IGMP packet fields" do
586
- network {
587
- vswitch( "packet-in" ) { datapath_id 0xabc }
588
- vhost "host1"
589
- vhost "host2"
590
- link "host1", "packet-in"
591
- link "host2", "packet-in"
592
- }.run( PacketInSendController ) {
589
+ it 'should have correct IGMP packet fields' do
590
+ network do
591
+ vswitch('packet-in') { datapath_id 0xabc }
592
+ vhost 'host1'
593
+ vhost 'host2'
594
+ link 'host1', 'packet-in'
595
+ link 'host2', 'packet-in'
596
+ end.run(PacketInSendController) do
593
597
  data = [
594
598
  0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, # dst
595
599
  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # src
@@ -614,58 +618,58 @@ describe Trema::PacketIn do
614
618
  0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
615
619
  0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61,
616
620
  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69
617
- ].pack( "C*" )
618
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
619
- expect( message.in_port ).to be > 0
620
- expect( message.vtag? ).to be_false
621
- expect( message.arp? ).to be_false
622
- expect( message.rarp? ).to be_false
623
- expect( message.ipv4? ).to be_true
624
- expect( message.lldp? ).to be_false
625
- expect( message.udp? ).to be_false
626
- expect( message.tcp? ).to be_false
627
- expect( message.icmpv4? ).to be_false
628
- expect( message.igmp? ).to be_true
629
-
630
- expect( message.igmp_membership_query? ).to be_true
631
- expect( message.igmp_v1_membership_report? ).to be_false
632
- expect( message.igmp_v2_membership_report? ).to be_false
633
- expect( message.igmp_v2_leave_group? ).to be_false
634
- expect( message.igmp_v3_membership_report? ).to be_false
635
-
636
- expect( message.ipv4_version ).to eq( 4 )
637
- expect( message.ipv4_ihl ).to eq( 6 )
638
- expect( message.ipv4_tos ).to eq( 0xc0 )
639
- expect( message.ipv4_tot_len ).to eq( 0x0020 )
640
- expect( message.ipv4_id ).to eq( 0x3aea )
641
- expect( message.ipv4_frag_off ).to eq( 0 )
642
- expect( message.ipv4_ttl ).to eq( 1 )
643
- expect( message.ipv4_protocol ).to eq( 2 )
644
- expect( message.ipv4_checksum ).to eq( 0xe458 )
645
- expect( message.ipv4_saddr.to_s ).to eq( "192.168.100.43" )
646
- expect( message.ipv4_daddr.to_s ).to eq( "224.0.0.1" )
647
-
648
- expect( message.igmp_type ).to eq( 0x11 )
649
- expect( message.igmp_checksum ).to eq( 0xee9b )
621
+ ].pack('C*')
622
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
623
+ expect(message.in_port).to be > 0
624
+ expect(message.vtag?).to be_false
625
+ expect(message.arp?).to be_false
626
+ expect(message.rarp?).to be_false
627
+ expect(message.ipv4?).to be_true
628
+ expect(message.lldp?).to be_false
629
+ expect(message.udp?).to be_false
630
+ expect(message.tcp?).to be_false
631
+ expect(message.icmpv4?).to be_false
632
+ expect(message.igmp?).to be_true
633
+
634
+ expect(message.igmp_membership_query?).to be_true
635
+ expect(message.igmp_v1_membership_report?).to be_false
636
+ expect(message.igmp_v2_membership_report?).to be_false
637
+ expect(message.igmp_v2_leave_group?).to be_false
638
+ expect(message.igmp_v3_membership_report?).to be_false
639
+
640
+ expect(message.ipv4_version).to eq(4)
641
+ expect(message.ipv4_ihl).to eq(6)
642
+ expect(message.ipv4_tos).to eq(0xc0)
643
+ expect(message.ipv4_tot_len).to eq(0x0020)
644
+ expect(message.ipv4_id).to eq(0x3aea)
645
+ expect(message.ipv4_frag_off).to eq(0)
646
+ expect(message.ipv4_ttl).to eq(1)
647
+ expect(message.ipv4_protocol).to eq(2)
648
+ expect(message.ipv4_checksum).to eq(0xe458)
649
+ expect(message.ipv4_saddr.to_s).to eq('192.168.100.43')
650
+ expect(message.ipv4_daddr.to_s).to eq('224.0.0.1')
651
+
652
+ expect(message.igmp_type).to eq(0x11)
653
+ expect(message.igmp_checksum).to eq(0xee9b)
650
654
  end
651
655
 
652
- controller( "PacketInSendController" ).send_packet_out(
656
+ controller('PacketInSendController').send_packet_out(
653
657
  0xabc,
654
658
  :data => data,
655
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
659
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
656
660
  )
657
661
  sleep 2
658
- }
662
+ end
659
663
  end
660
664
 
661
- it "should have correct LLDP packet fields" do
662
- network {
663
- vswitch( "packet-in" ) { datapath_id 0xabc }
664
- vhost "host1"
665
- vhost "host2"
666
- link "host1", "packet-in"
667
- link "host2", "packet-in"
668
- }.run( PacketInSendController ) {
665
+ it 'should have correct LLDP packet fields' do
666
+ network do
667
+ vswitch('packet-in') { datapath_id 0xabc }
668
+ vhost 'host1'
669
+ vhost 'host2'
670
+ link 'host1', 'packet-in'
671
+ link 'host2', 'packet-in'
672
+ end.run(PacketInSendController) do
669
673
  data = [
670
674
  0x01, 0x80, 0xC2, 0x00, 0x00, 0x0E, # dst
671
675
  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # src
@@ -680,27 +684,27 @@ describe Trema::PacketIn do
680
684
  0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
681
685
  0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
682
686
  0xa5, 0xa5, 0xa5, 0xa5, 0xa5
683
- ].pack( "C*" )
684
- controller( "PacketInSendController" ).should_receive( :packet_in ) do | datapath_id, message |
685
- expect( message.in_port ).to be > 0
686
- expect( message.vtag? ).to be_false
687
- expect( message.arp? ).to be_false
688
- expect( message.rarp? ).to be_false
689
- expect( message.ipv4? ).to be_false
690
- expect( message.lldp? ).to be_true
691
- expect( message.udp? ).to be_false
692
- expect( message.tcp? ).to be_false
693
- expect( message.icmpv4? ).to be_false
694
- expect( message.igmp? ).to be_false
687
+ ].pack('C*')
688
+ controller('PacketInSendController').should_receive(:packet_in) do | datapath_id, message |
689
+ expect(message.in_port).to be > 0
690
+ expect(message.vtag?).to be_false
691
+ expect(message.arp?).to be_false
692
+ expect(message.rarp?).to be_false
693
+ expect(message.ipv4?).to be_false
694
+ expect(message.lldp?).to be_true
695
+ expect(message.udp?).to be_false
696
+ expect(message.tcp?).to be_false
697
+ expect(message.icmpv4?).to be_false
698
+ expect(message.igmp?).to be_false
695
699
  end
696
700
 
697
- controller( "PacketInSendController" ).send_packet_out(
701
+ controller('PacketInSendController').send_packet_out(
698
702
  0xabc,
699
703
  :data => data,
700
- :actions => Trema::ActionOutput.new( :port => Controller::OFPP_CONTROLLER )
704
+ :actions => Trema::ActionOutput.new(:port => Controller::OFPP_CONTROLLER)
701
705
  )
702
706
  sleep 2
703
- }
707
+ end
704
708
  end
705
709
  end
706
710
  end