trema 0.4.6 → 0.4.7

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 (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
@@ -22,9 +22,9 @@ class VendorActionSampleController < Controller
22
22
  OVS_VENDOR_ID = 0x00002320
23
23
  OVSAST_NOTE = 8
24
24
 
25
- def switch_ready datapath_id
26
- body = [ OVSAST_NOTE, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 ].pack( "nC6" )
27
- actions = VendorAction.new( OVS_VENDOR_ID, body.unpack( "C*" ) )
25
+ def switch_ready(datapath_id)
26
+ body = [OVSAST_NOTE, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00].pack('nC6')
27
+ actions = VendorAction.new(OVS_VENDOR_ID, body.unpack('C*'))
28
28
  send_flow_mod_modify(
29
29
  datapath_id,
30
30
  :hard_timeout => 60,
@@ -22,12 +22,12 @@ class VendorStatsRequestSample < Controller
22
22
  OVS_VENDOR_ID = 0x00002320
23
23
  OVSST_FLOW = 0
24
24
 
25
- def switch_ready datapath_id
25
+ def switch_ready(datapath_id)
26
26
  send_vendor_stats_request datapath_id
27
27
  end
28
28
 
29
29
 
30
- def stats_reply datapath_id, message
30
+ def stats_reply(datapath_id, message)
31
31
  if message.type == StatsReply::OFPST_VENDOR
32
32
  vendor_stats_reply datapath_id, message
33
33
  end
@@ -37,14 +37,14 @@ class VendorStatsRequestSample < Controller
37
37
  private
38
38
 
39
39
 
40
- def vendor_stats_reply datapath_id, message
41
- info "[vendor_stats_reply]"
42
- info "vendor_id: 0x%08x" % message.stats.first.vendor_id
40
+ def vendor_stats_reply(datapath_id, message)
41
+ info '[vendor_stats_reply]'
42
+ info 'vendor_id: 0x%08x' % message.stats.first.vendor_id
43
43
  info "data: [#{ message.stats.first.data.map { | n | "0x%02x" % n }.join ", " }]"
44
44
  end
45
45
 
46
46
 
47
- def send_vendor_stats_request datapath_id
47
+ def send_vendor_stats_request(datapath_id)
48
48
  data = [
49
49
  OVSST_FLOW,
50
50
  0x0, 0x0, 0x0, 0x0,
@@ -52,9 +52,9 @@ class VendorStatsRequestSample < Controller
52
52
  0x0,
53
53
  0xff,
54
54
  0x0, 0x0, 0x0
55
- ].pack( "NC4 nnCC3" )
56
- vendor_request = VendorStatsRequest.new( :vendor_id => OVS_VENDOR_ID, :data => data.unpack( "C*" ) )
57
- send_message( datapath_id, vendor_request )
55
+ ].pack('NC4 nnCC3')
56
+ vendor_request = VendorStatsRequest.new(:vendor_id => OVS_VENDOR_ID, :data => data.unpack('C*'))
57
+ send_message(datapath_id, vendor_request)
58
58
  end
59
59
  end
60
60
 
@@ -17,8 +17,8 @@
17
17
 
18
18
 
19
19
  class PacketInDumper < Controller
20
- def packet_in datapath_id, message
21
- info "received a packet_in"
20
+ def packet_in(datapath_id, message)
21
+ info 'received a packet_in'
22
22
  info "datapath_id: #{ datapath_id.to_hex }"
23
23
  info "transaction_id: #{ message.transaction_id.to_hex }"
24
24
  info "buffer_id: #{ message.buffer_id.to_hex }"
@@ -19,15 +19,15 @@
19
19
  class PatchPanel < Controller
20
20
  def start
21
21
  @patch = []
22
- File.open( "./patch-panel.conf" ).each_line do | each |
23
- if /^(\d+)\s+(\d+)$/=~ each
24
- @patch << [ $1.to_i, $2.to_i ]
22
+ File.open('./patch-panel.conf').each_line do | each |
23
+ if /^(\d+)\s+(\d+)$/ =~ each
24
+ @patch << [$1.to_i, $2.to_i]
25
25
  end
26
26
  end
27
27
  end
28
28
 
29
29
 
30
- def switch_ready datapath_id
30
+ def switch_ready(datapath_id)
31
31
  @patch.each do | port_a, port_b |
32
32
  make_patch datapath_id, port_a, port_b
33
33
  end
@@ -37,16 +37,16 @@ class PatchPanel < Controller
37
37
  private
38
38
 
39
39
 
40
- def make_patch datapath_id, port_a, port_b
40
+ def make_patch(datapath_id, port_a, port_b)
41
41
  send_flow_mod_add(
42
42
  datapath_id,
43
- :match => Match.new( :in_port => port_a ),
44
- :actions => SendOutPort.new( port_b )
43
+ :match => Match.new(:in_port => port_a),
44
+ :actions => SendOutPort.new(port_b)
45
45
  )
46
46
  send_flow_mod_add(
47
47
  datapath_id,
48
- :match => Match.new( :in_port => port_b ),
49
- :actions => SendOutPort.new( port_a )
48
+ :match => Match.new(:in_port => port_b),
49
+ :actions => SendOutPort.new(port_a)
50
50
  )
51
51
  end
52
52
  end
@@ -19,16 +19,16 @@
19
19
 
20
20
 
21
21
  class RepeaterHub < Controller
22
- def packet_in datapath_id, message
22
+ def packet_in(datapath_id, message)
23
23
  send_flow_mod_add(
24
24
  datapath_id,
25
- :match => ExactMatch.from( message ),
26
- :actions => ActionOutput.new( OFPP_FLOOD )
25
+ :match => ExactMatch.from(message),
26
+ :actions => ActionOutput.new(OFPP_FLOOD)
27
27
  )
28
28
  send_packet_out(
29
29
  datapath_id,
30
30
  :packet_in => message,
31
- :actions => ActionOutput.new( OFPP_FLOOD )
31
+ :actions => ActionOutput.new(OFPP_FLOOD)
32
32
  )
33
33
  end
34
34
  end
@@ -16,131 +16,131 @@
16
16
  #
17
17
 
18
18
 
19
- require File.join( File.dirname( __FILE__ ), "..", "..", "..", "spec", "spec_helper" )
20
- require File.join( File.dirname( __FILE__ ), "repeater-hub" )
19
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec', 'spec_helper')
20
+ require File.join(File.dirname(__FILE__), 'repeater-hub')
21
21
 
22
22
 
23
23
  describe RepeaterHub do
24
24
  around do | example |
25
- network {
26
- vswitch("switch") { datapath_id "0xabc" }
25
+ network do
26
+ vswitch('switch') { datapath_id '0xabc' }
27
27
 
28
- vhost("host1") { promisc "on" }
29
- vhost("host2") { promisc "on" }
30
- vhost("host3") { promisc "on" }
28
+ vhost('host1') { promisc 'on' }
29
+ vhost('host2') { promisc 'on' }
30
+ vhost('host3') { promisc 'on' }
31
31
 
32
- link "switch", "host1"
33
- link "switch", "host2"
34
- link "switch", "host3"
35
- }.run( RepeaterHub ) {
32
+ link 'switch', 'host1'
33
+ link 'switch', 'host2'
34
+ link 'switch', 'host3'
35
+ end.run(RepeaterHub) do
36
36
  example.run
37
- }
37
+ end
38
38
  end
39
39
 
40
40
 
41
- context "when host1 sends one packet to host2" do
42
- it "should #packet_in" do
43
- controller( "RepeaterHub" ).should_receive( :packet_in )
41
+ context 'when host1 sends one packet to host2' do
42
+ it 'should #packet_in' do
43
+ controller('RepeaterHub').should_receive(:packet_in)
44
44
 
45
- send_packets "host1", "host2"
45
+ send_packets 'host1', 'host2'
46
46
  sleep 2 # FIXME: wait to send_packets
47
47
  end
48
48
 
49
49
 
50
- it "should #send_flow_mod_add" do
51
- controller( "RepeaterHub" ).should_receive( :send_flow_mod_add )
50
+ it 'should #send_flow_mod_add' do
51
+ controller('RepeaterHub').should_receive(:send_flow_mod_add)
52
52
 
53
- send_packets "host1", "host2"
53
+ send_packets 'host1', 'host2'
54
54
  sleep 2 # FIXME: wait to send_packets
55
55
  end
56
56
 
57
57
 
58
- describe "switch" do
59
- before { send_packets "host1", "host2" }
58
+ describe 'switch' do
59
+ before { send_packets 'host1', 'host2' }
60
60
 
61
- subject { vswitch( "switch" ) }
61
+ subject { vswitch('switch') }
62
62
 
63
- it { should have( 1 ).flows }
64
- its( "flows.first.actions" ) { should == "FLOOD" }
63
+ it { should have(1).flows }
64
+ its('flows.first.actions') { should == 'FLOOD' }
65
65
  end
66
66
 
67
67
 
68
- describe "host" do
69
- before { send_packets "host1", "host2" }
68
+ describe 'host' do
69
+ before { send_packets 'host1', 'host2' }
70
70
 
71
- subject { vhost( host_name ) }
71
+ subject { vhost(host_name) }
72
72
 
73
- context "RX stats of host2" do
74
- let( :host_name ) { "host2" }
75
- its( "rx_stats.n_pkts" ) { should == 1 }
73
+ context 'RX stats of host2' do
74
+ let(:host_name) { 'host2' }
75
+ its('rx_stats.n_pkts') { should == 1 }
76
76
  end
77
77
 
78
- context "RX stats of host3" do
79
- let( :host_name ) { "host3" }
80
- its( "rx_stats.n_pkts" ) { should == 1 }
78
+ context 'RX stats of host3' do
79
+ let(:host_name) { 'host3' }
80
+ its('rx_stats.n_pkts') { should == 1 }
81
81
  end
82
82
  end
83
83
  end
84
84
 
85
85
 
86
- context "when host1 sends one more packet after the first packet" do
87
- before { send_packets "host1", "host2" }
86
+ context 'when host1 sends one more packet after the first packet' do
87
+ before { send_packets 'host1', 'host2' }
88
88
 
89
- it "should not #packet_in" do
90
- controller( "RepeaterHub" ).should_not_receive( :packet_in )
89
+ it 'should not #packet_in' do
90
+ controller('RepeaterHub').should_not_receive(:packet_in)
91
91
 
92
- send_packets "host1", "host2"
92
+ send_packets 'host1', 'host2'
93
93
  end
94
94
 
95
- it "should not #send_flow_mod_add" do
96
- controller( "RepeaterHub" ).should_not_receive( :send_flow_mod_add )
95
+ it 'should not #send_flow_mod_add' do
96
+ controller('RepeaterHub').should_not_receive(:send_flow_mod_add)
97
97
 
98
- send_packets "host1", "host2"
98
+ send_packets 'host1', 'host2'
99
99
  end
100
100
 
101
101
 
102
- describe "switch" do
103
- before { send_packets "host1", "host2" }
102
+ describe 'switch' do
103
+ before { send_packets 'host1', 'host2' }
104
104
 
105
- subject { vswitch( "switch" ) }
105
+ subject { vswitch('switch') }
106
106
 
107
- it { should have( 1 ).flows }
108
- its( "flows.first.actions" ) { should == "FLOOD" }
107
+ it { should have(1).flows }
108
+ its('flows.first.actions') { should == 'FLOOD' }
109
109
  end
110
110
 
111
111
 
112
- describe "host" do
113
- before { send_packets "host1", "host2" }
112
+ describe 'host' do
113
+ before { send_packets 'host1', 'host2' }
114
114
 
115
- subject { vhost( host_name ) }
115
+ subject { vhost(host_name) }
116
116
 
117
- context "RX stats of host2" do
118
- let( :host_name ) { "host2" }
119
- its( "rx_stats.n_pkts" ) { should == 2 }
117
+ context 'RX stats of host2' do
118
+ let(:host_name) { 'host2' }
119
+ its('rx_stats.n_pkts') { should == 2 }
120
120
  end
121
121
 
122
- context "RX stats of host3" do
123
- let( :host_name ) { "host3" }
124
- its( "rx_stats.n_pkts" ) { should == 2 }
122
+ context 'RX stats of host3' do
123
+ let(:host_name) { 'host3' }
124
+ its('rx_stats.n_pkts') { should == 2 }
125
125
  end
126
126
  end
127
127
  end
128
128
 
129
129
 
130
- context "when host1 sends 100 packets to host2" do
131
- describe "host" do
132
- before { send_packets "host1", "host2", :pps => 100 }
130
+ context 'when host1 sends 100 packets to host2' do
131
+ describe 'host' do
132
+ before { send_packets 'host1', 'host2', :pps => 100 }
133
133
 
134
- subject { vhost( host_name ) }
134
+ subject { vhost(host_name) }
135
135
 
136
- context "RX stats of host2" do
137
- let( :host_name ) { "host2" }
138
- its( "rx_stats.n_pkts" ) { should == 100 }
136
+ context 'RX stats of host2' do
137
+ let(:host_name) { 'host2' }
138
+ its('rx_stats.n_pkts') { should == 100 }
139
139
  end
140
140
 
141
- context "RX stats of host3" do
142
- let( :host_name ) { "host3" }
143
- its( "rx_stats.n_pkts" ) { should == 100 }
141
+ context 'RX stats of host3' do
142
+ let(:host_name) { 'host3' }
143
+ its('rx_stats.n_pkts') { should == 100 }
144
144
  end
145
145
  end
146
146
  end
@@ -24,24 +24,24 @@ class ARPEntry
24
24
  attr_reader :hwaddr
25
25
  attr_writer :age_max
26
26
 
27
- def initialize port, hwaddr, age_max
27
+ def initialize(port, hwaddr, age_max)
28
28
  @port = port
29
29
  @hwaddr = hwaddr
30
30
  @age_max = age_max
31
31
  @last_updated = Time.now
32
- info "New entry: MAC addr = #{ @hwaddr.to_s }, port = #{ @port }"
32
+ info "New entry: MAC addr = #{ @hwaddr }, port = #{ @port }"
33
33
  end
34
34
 
35
- def update port, hwaddr
35
+ def update(port, hwaddr)
36
36
  @port = port
37
37
  @hwaddr = hwaddr
38
38
  @last_updated = Time.now
39
- info "Update entry: MAC addr = #{ @hwaddr.to_s }, port = #{ @port }"
39
+ info "Update entry: MAC addr = #{ @hwaddr }, port = #{ @port }"
40
40
  end
41
41
 
42
42
  def aged_out?
43
43
  aged_out = Time.now - @last_updated > @age_max
44
- info "Age out: An ARP entry (MAC address = #{ @hwaddr.to_s }, port number = #{ @port }) has been aged-out" if aged_out
44
+ info "Age out: An ARP entry (MAC address = #{ @hwaddr }, port number = #{ @port }) has been aged-out" if aged_out
45
45
  aged_out
46
46
  end
47
47
  end
@@ -53,7 +53,7 @@ class ARPTable
53
53
  @db = {}
54
54
  end
55
55
 
56
- def update port, ipaddr, hwaddr
56
+ def update(port, ipaddr, hwaddr)
57
57
  entry = @db[ipaddr.to_i]
58
58
  if entry
59
59
  entry.update(port, hwaddr)
@@ -63,7 +63,7 @@ class ARPTable
63
63
  end
64
64
  end
65
65
 
66
- def lookup ipaddr
66
+ def lookup(ipaddr)
67
67
  @db[ipaddr.to_i]
68
68
  end
69
69
 
@@ -28,56 +28,56 @@ class Interface
28
28
  attr_reader :masklen
29
29
  attr_reader :port
30
30
 
31
- def initialize options
31
+ def initialize(options)
32
32
  @port = options[:port]
33
33
  @hwaddr = Pio::Mac.new(options[:hwaddr])
34
34
  @ipaddr = Pio::IPv4Address.new(options[:ipaddr])
35
35
  @masklen = options[:masklen]
36
36
  end
37
37
 
38
- def has? mac
38
+ def has?(mac)
39
39
  mac == hwaddr
40
40
  end
41
41
  end
42
42
 
43
43
  class Interfaces
44
- def initialize interfaces = []
44
+ def initialize(interfaces = [])
45
45
  @list = []
46
46
  interfaces.each do |each|
47
47
  @list << Interface.new(each)
48
48
  end
49
49
  end
50
50
 
51
- def find_by_port port
51
+ def find_by_port(port)
52
52
  @list.find do |each|
53
53
  each.port == port
54
54
  end
55
55
  end
56
56
 
57
- def find_by_ipaddr ipaddr
57
+ def find_by_ipaddr(ipaddr)
58
58
  @list.find do |each|
59
59
  each.ipaddr.to_i == ipaddr.to_i
60
60
  end
61
61
  end
62
62
 
63
- def find_by_prefix ipaddr
63
+ def find_by_prefix(ipaddr)
64
64
  @list.find do |each|
65
65
  masklen = each.masklen
66
66
  each.ipaddr.mask(masklen).to_s == ipaddr.mask(masklen).to_s
67
67
  end
68
68
  end
69
69
 
70
- def find_by_port_and_ipaddr port, ipaddr
70
+ def find_by_port_and_ipaddr(port, ipaddr)
71
71
  @list.find do |each|
72
- each.port == port and each.ipaddr.to_i == ipaddr.to_i
72
+ each.port == port && each.ipaddr.to_i == ipaddr.to_i
73
73
  end
74
74
  end
75
75
 
76
- def ours? port, macda
76
+ def ours?(port, macda)
77
77
  true if macda.broadcast?
78
78
 
79
79
  interface = find_by_port(port)
80
- if not interface.nil? and interface.has?(macda)
80
+ unless interface.nil? && interface.has?(macda)
81
81
  true
82
82
  end
83
83
  end
@@ -22,28 +22,28 @@ require 'pio'
22
22
  class RoutingTable
23
23
  ADDR_LEN = 32
24
24
 
25
- def initialize route = []
25
+ def initialize(route = [])
26
26
  @db = Array.new(ADDR_LEN + 1) { Hash.new }
27
27
  route.each do |each|
28
28
  add(each)
29
29
  end
30
30
  end
31
31
 
32
- def add options
32
+ def add(options)
33
33
  dest = Pio::IPv4Address.new(options[:destination])
34
34
  masklen = options[:masklen]
35
35
  prefix = dest.mask(masklen)
36
36
  @db[masklen][prefix.to_i] = Pio::IPv4Address.new(options[:nexthop])
37
37
  end
38
38
 
39
- def delete options
39
+ def delete(options)
40
40
  dest = Pio::IPv4Address.new(options[:destination])
41
41
  masklen = options[:masklen]
42
42
  prefix = dest.mask(masklen)
43
43
  @db[masklen].delete(prefix.to_i)
44
44
  end
45
45
 
46
- def lookup dest
46
+ def lookup(dest)
47
47
  (0..ADDR_LEN).reverse_each do |masklen|
48
48
  prefix = dest.mask(masklen)
49
49
  entry = @db[masklen][prefix.to_i]