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
@@ -86,36 +86,32 @@ learn( hash_table *forwarding_db, struct key new_key, uint16_t port_no ) {
86
86
  entry->last_update = now();
87
87
  }
88
88
 
89
+ static void
90
+ send_packet_out( packet_in packet_in, openflow_actions *actions ) {
91
+ buffer *frame = duplicate_buffer( packet_in.data );
92
+ fill_ether_padding( frame );
93
+
94
+ buffer *packet_out = create_packet_out(
95
+ get_transaction_id(),
96
+ UINT32_MAX,
97
+ packet_in.in_port,
98
+ actions,
99
+ frame
100
+ );
101
+
102
+ free_buffer( frame );
103
+ send_openflow_message( packet_in.datapath_id, packet_out );
104
+ free_buffer( packet_out );
105
+ }
106
+
89
107
 
90
108
  static void
91
109
  do_flooding( packet_in packet_in ) {
92
110
  openflow_actions *actions = create_actions();
93
111
  append_action_output( actions, OFPP_FLOOD, UINT16_MAX );
94
112
 
95
- buffer *packet_out;
96
- if ( packet_in.buffer_id == UINT32_MAX ) {
97
- buffer *frame = duplicate_buffer( packet_in.data );
98
- fill_ether_padding( frame );
99
- packet_out = create_packet_out(
100
- get_transaction_id(),
101
- packet_in.buffer_id,
102
- packet_in.in_port,
103
- actions,
104
- frame
105
- );
106
- free_buffer( frame );
107
- }
108
- else {
109
- packet_out = create_packet_out(
110
- get_transaction_id(),
111
- packet_in.buffer_id,
112
- packet_in.in_port,
113
- actions,
114
- NULL
115
- );
116
- }
117
- send_openflow_message( packet_in.datapath_id, packet_out );
118
- free_buffer( packet_out );
113
+ send_packet_out( packet_in, actions );
114
+
119
115
  delete_actions( actions );
120
116
  }
121
117
 
@@ -136,7 +132,7 @@ send_packet( uint16_t destination_port, packet_in packet_in ) {
136
132
  60,
137
133
  0,
138
134
  UINT16_MAX,
139
- packet_in.buffer_id,
135
+ UINT32_MAX,
140
136
  OFPP_NONE,
141
137
  OFPFF_SEND_FLOW_REM,
142
138
  actions
@@ -144,20 +140,7 @@ send_packet( uint16_t destination_port, packet_in packet_in ) {
144
140
  send_openflow_message( packet_in.datapath_id, flow_mod );
145
141
  free_buffer( flow_mod );
146
142
 
147
- if ( packet_in.buffer_id == UINT32_MAX ) {
148
- buffer *frame = duplicate_buffer( packet_in.data );
149
- fill_ether_padding( frame );
150
- buffer *packet_out = create_packet_out(
151
- get_transaction_id(),
152
- packet_in.buffer_id,
153
- packet_in.in_port,
154
- actions,
155
- frame
156
- );
157
- send_openflow_message( packet_in.datapath_id, packet_out );
158
- free_buffer( packet_out );
159
- free_buffer( frame );
160
- }
143
+ send_packet_out( packet_in, actions );
161
144
 
162
145
  delete_actions( actions );
163
146
  }
@@ -23,14 +23,14 @@ class ListSwitches < Controller
23
23
  periodic_timer_event :timeout, 30
24
24
 
25
25
 
26
- def list_switches_reply dpids
27
- info "switches = %s" % dpids.collect { | each | sprintf( "0x%x", each ) }.join( ", " )
26
+ def list_switches_reply(dpids)
27
+ info 'switches = %s' % dpids.collect { | each | sprintf('0x%x', each) }.join(', ')
28
28
  shutdown!
29
29
  end
30
30
 
31
31
 
32
32
  def timeout
33
- error "List switches request timeout."
33
+ error 'List switches request timeout.'
34
34
  shutdown!
35
35
  end
36
36
  end
@@ -25,16 +25,16 @@ class MatchCompare < Controller
25
25
  end
26
26
 
27
27
 
28
- def packet_in datapath_id, message
29
- match = ExactMatch.from( message )
30
- action, log = lookup_rules( datapath_id, match )
31
- info "action=#{ action }, datapath_id=#{ datapath_id.to_hex }, message={#{ match.to_s }}" if log
28
+ def packet_in(datapath_id, message)
29
+ match = ExactMatch.from(message)
30
+ action, log = lookup_rules(datapath_id, match)
31
+ info "action=#{ action }, datapath_id=#{ datapath_id.to_hex }, message={#{ match }}" if log
32
32
  if action == :allow
33
- actions = ActionOutput.new( OFPP_FLOOD )
34
- send_flow_mod_add( datapath_id, :match => match, :idle_timeout => 60, :actions => actions )
35
- send_packet_out( datapath_id, :packet_in => message, :actions => actions )
33
+ actions = ActionOutput.new(OFPP_FLOOD)
34
+ send_flow_mod_add(datapath_id, :match => match, :idle_timeout => 60, :actions => actions)
35
+ send_packet_out(datapath_id, :packet_in => message, :actions => actions)
36
36
  else
37
- send_flow_mod_add( datapath_id, :match => match, :idle_timeout => 60 )
37
+ send_flow_mod_add(datapath_id, :match => match, :idle_timeout => 60)
38
38
  end
39
39
  end
40
40
 
@@ -45,7 +45,7 @@ class MatchCompare < Controller
45
45
  def add_rules
46
46
  dl_type_arp = 0x0806
47
47
  dl_type_ipv4 = 0x0800
48
- network = "192.168.0.0/16"
48
+ network = '192.168.0.0/16'
49
49
 
50
50
  allow :dl_type => dl_type_arp
51
51
  allow :dl_type => dl_type_ipv4, :nw_src => network, :log => true
@@ -54,38 +54,38 @@ class MatchCompare < Controller
54
54
  end
55
55
 
56
56
 
57
- def allow hash = {}
57
+ def allow(hash = {})
58
58
  add_rule :allow, hash
59
59
  end
60
60
 
61
61
 
62
- def block hash = {}
62
+ def block(hash = {})
63
63
  add_rule :block, hash
64
64
  end
65
65
 
66
66
 
67
- def add_rule action, hash
68
- datapath_id = hash.key?( :datapath_id ) && hash.delete( :datapath_id ) || nil
69
- log = hash.key?( :log ) && hash.delete( :log ) || false
70
- rule = Struct.new( :action, :datapath_id, :match, :log )
71
- @rules << rule.new( action, datapath_id, Match.new( hash ), log )
67
+ def add_rule(action, hash)
68
+ datapath_id = hash.key?(:datapath_id) && hash.delete(:datapath_id) || nil
69
+ log = hash.key?(:log) && hash.delete(:log) || false
70
+ rule = Struct.new(:action, :datapath_id, :match, :log)
71
+ @rules << rule.new(action, datapath_id, Match.new(hash), log)
72
72
  end
73
73
 
74
74
 
75
- def lookup_rules datapath_id, match
75
+ def lookup_rules(datapath_id, match)
76
76
  action = :block # default action
77
77
  log = false
78
78
  @rules.each do | each |
79
- if !each.datapath_id.nil? && datapath_id != each.datapath_id
79
+ if each.datapath_id && datapath_id != each.datapath_id
80
80
  next
81
81
  end
82
- if each.match.compare( match )
82
+ if each.match.compare(match)
83
83
  action = each.action
84
84
  log = each.log
85
85
  break
86
86
  end
87
87
  end
88
- return action, log
88
+ [action, log]
89
89
  end
90
90
  end
91
91
 
@@ -18,10 +18,10 @@
18
18
  #
19
19
 
20
20
 
21
- $LOAD_PATH << File.join( File.dirname( __FILE__ ), "../learning_switch/" )
21
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '../learning_switch/')
22
22
 
23
23
 
24
- require "fdb"
24
+ require 'fdb'
25
25
 
26
26
 
27
27
  #
@@ -33,15 +33,15 @@ class MultiLearningSwitch < Controller
33
33
 
34
34
  def start
35
35
  @fdbs = Hash.new do | hash, datapath_id |
36
- hash[ datapath_id ] = FDB.new
36
+ hash[ datapath_id] = FDB.new
37
37
  end
38
38
  end
39
39
 
40
40
 
41
- def packet_in datapath_id, message
42
- fdb = @fdbs[ datapath_id ]
41
+ def packet_in(datapath_id, message)
42
+ fdb = @fdbs[ datapath_id]
43
43
  fdb.learn message.macsa, message.in_port
44
- port_no = fdb.port_no_of( message.macda )
44
+ port_no = fdb.port_no_of(message.macda)
45
45
  if port_no
46
46
  flow_mod datapath_id, message, port_no
47
47
  packet_out datapath_id, message, port_no
@@ -63,25 +63,25 @@ class MultiLearningSwitch < Controller
63
63
  ##############################################################################
64
64
 
65
65
 
66
- def flow_mod datapath_id, message, port_no
66
+ def flow_mod(datapath_id, message, port_no)
67
67
  send_flow_mod_add(
68
68
  datapath_id,
69
- :match => ExactMatch.from( message ),
70
- :actions => ActionOutput.new( :port => port_no )
69
+ :match => ExactMatch.from(message),
70
+ :actions => ActionOutput.new(:port => port_no)
71
71
  )
72
72
  end
73
73
 
74
74
 
75
- def packet_out datapath_id, message, port_no
75
+ def packet_out(datapath_id, message, port_no)
76
76
  send_packet_out(
77
77
  datapath_id,
78
78
  :packet_in => message,
79
- :actions => ActionOutput.new( :port => port_no )
79
+ :actions => ActionOutput.new(:port => port_no)
80
80
  )
81
81
  end
82
82
 
83
83
 
84
- def flood datapath_id, message
84
+ def flood(datapath_id, message)
85
85
  packet_out datapath_id, message, OFPP_FLOOD
86
86
  end
87
87
  end
@@ -18,7 +18,7 @@
18
18
  #
19
19
 
20
20
 
21
- require "example"
21
+ require 'example'
22
22
 
23
23
 
24
24
  class EchoController < Controller
@@ -26,20 +26,20 @@ class EchoController < Controller
26
26
 
27
27
 
28
28
  class << self
29
- def run args
29
+ def run(args)
30
30
  usage unless Example.options_parse args
31
31
  end
32
32
 
33
33
 
34
34
  def usage
35
35
  puts Example.cmd_usage
36
- puts "Send count number of echo requests to datapath_id."
36
+ puts 'Send count number of echo requests to datapath_id.'
37
37
  exit false
38
38
  end
39
39
  end
40
40
 
41
41
 
42
- def switch_ready msg_datapath_id
42
+ def switch_ready(msg_datapath_id)
43
43
  may_raise_error msg_datapath_id
44
44
  send_nr_msgs EchoRequest
45
45
  end
@@ -23,11 +23,11 @@ module Example
23
23
  attr_accessor :count, :datapath_id
24
24
 
25
25
 
26
- def options_parse args
26
+ def options_parse(args)
27
27
  case args.length
28
28
  when 2
29
- @datapath_id = args[ 0 ] =~ /^0x/ ? args[ 0 ].hex : args[ 0 ].to_i
30
- @count = args[ 1 ].to_i
29
+ @datapath_id = args[ 0] =~ /^0x/ ? args[ 0].hex : args[ 0].to_i
30
+ @count = args[ 1].to_i
31
31
  else
32
32
  return false
33
33
  end
@@ -40,14 +40,14 @@ module Example
40
40
  end
41
41
 
42
42
 
43
- def may_raise_error msg_datapath_id
44
- raise ArgumentError, "Given datapath_id does not match configured datapath_id" if msg_datapath_id != Example::datapath_id
43
+ def may_raise_error(msg_datapath_id)
44
+ fail ArgumentError, 'Given datapath_id does not match configured datapath_id' if msg_datapath_id != Example::datapath_id
45
45
  end
46
46
 
47
47
 
48
- def send_nr_msgs kclass
48
+ def send_nr_msgs(kclass)
49
49
  Example::count.times do
50
- self.send_message Example::datapath_id, kclass.new
50
+ send_message Example::datapath_id, kclass.new
51
51
  end
52
52
  end
53
53
  end
@@ -20,12 +20,12 @@
20
20
 
21
21
 
22
22
  class FeaturesRequestController < Controller
23
- def switch_ready datapath_id
23
+ def switch_ready(datapath_id)
24
24
  send_message datapath_id, FeaturesRequest.new
25
25
  end
26
26
 
27
27
 
28
- def features_reply datapath_id, message
28
+ def features_reply(datapath_id, message)
29
29
  info "datapath_id: #{ datapath_id.to_hex }"
30
30
  info "transaction_id: #{ message.transaction_id.to_hex }"
31
31
  info "n_buffers: #{ message.n_buffers }"
@@ -41,42 +41,42 @@ class FeaturesRequestController < Controller
41
41
  ##############################################################################
42
42
 
43
43
 
44
- def print_capabilities capabilities
45
- info "capabilities:"
46
- info " OFPC_FLOW_STATS" if capabilities & OFPC_FLOW_STATS != 0
47
- info " OFPC_TABLE_STATS" if capabilities & OFPC_TABLE_STATS != 0
48
- info " OFPC_PORT_STATS" if capabilities & OFPC_PORT_STATS != 0
49
- info " OFPC_STP" if capabilities & OFPC_STP != 0
50
- info " OFPC_RESERVED" if capabilities & OFPC_RESERVED != 0
51
- info " OFPC_IP_REASM" if capabilities & OFPC_IP_REASM != 0
52
- info " OFPC_QUEUE_STATS" if capabilities & OFPC_QUEUE_STATS != 0
53
- info " OFPC_ARP_MATCH_IP" if capabilities & OFPC_ARP_MATCH_IP != 0
44
+ def print_capabilities(capabilities)
45
+ info 'capabilities:'
46
+ info ' OFPC_FLOW_STATS' if capabilities & OFPC_FLOW_STATS != 0
47
+ info ' OFPC_TABLE_STATS' if capabilities & OFPC_TABLE_STATS != 0
48
+ info ' OFPC_PORT_STATS' if capabilities & OFPC_PORT_STATS != 0
49
+ info ' OFPC_STP' if capabilities & OFPC_STP != 0
50
+ info ' OFPC_RESERVED' if capabilities & OFPC_RESERVED != 0
51
+ info ' OFPC_IP_REASM' if capabilities & OFPC_IP_REASM != 0
52
+ info ' OFPC_QUEUE_STATS' if capabilities & OFPC_QUEUE_STATS != 0
53
+ info ' OFPC_ARP_MATCH_IP' if capabilities & OFPC_ARP_MATCH_IP != 0
54
54
  end
55
55
 
56
56
 
57
- def print_actions actions
58
- info "actions:"
59
- info " OFPAT_OUTPUT" if actions & ( 1 << OFPAT_OUTPUT ) != 0
60
- info " OFPAT_SET_VLAN_VID" if actions & ( 1 << OFPAT_SET_VLAN_VID ) != 0
61
- info " OFPAT_SET_VLAN_PCP" if actions & ( 1 << OFPAT_SET_VLAN_PCP ) != 0
62
- info " OFPAT_STRIP_VLAN" if actions & ( 1 << OFPAT_STRIP_VLAN ) != 0
63
- info " OFPAT_SET_DL_SRC" if actions & ( 1 << OFPAT_SET_DL_SRC ) != 0
64
- info " OFPAT_SET_DL_DST" if actions & ( 1 << OFPAT_SET_DL_DST ) != 0
65
- info " OFPAT_SET_NW_SRC" if actions & ( 1 << OFPAT_SET_NW_SRC ) != 0
66
- info " OFPAT_SET_NW_DST" if actions & ( 1 << OFPAT_SET_NW_DST ) != 0
67
- info " OFPAT_SET_NW_TOS" if actions & ( 1 << OFPAT_SET_NW_TOS ) != 0
68
- info " OFPAT_SET_TP_SRC" if actions & ( 1 << OFPAT_SET_TP_SRC ) != 0
69
- info " OFPAT_SET_TP_DST" if actions & ( 1 << OFPAT_SET_TP_DST ) != 0
70
- info " OFPAT_ENQUEUE" if actions & ( 1 << OFPAT_ENQUEUE ) != 0
71
- info " OFPAT_VENDOR" if actions & OFPAT_VENDOR != 0
57
+ def print_actions(actions)
58
+ info 'actions:'
59
+ info ' OFPAT_OUTPUT' if actions & ( 1 << OFPAT_OUTPUT) != 0
60
+ info ' OFPAT_SET_VLAN_VID' if actions & ( 1 << OFPAT_SET_VLAN_VID) != 0
61
+ info ' OFPAT_SET_VLAN_PCP' if actions & ( 1 << OFPAT_SET_VLAN_PCP) != 0
62
+ info ' OFPAT_STRIP_VLAN' if actions & ( 1 << OFPAT_STRIP_VLAN) != 0
63
+ info ' OFPAT_SET_DL_SRC' if actions & ( 1 << OFPAT_SET_DL_SRC) != 0
64
+ info ' OFPAT_SET_DL_DST' if actions & ( 1 << OFPAT_SET_DL_DST) != 0
65
+ info ' OFPAT_SET_NW_SRC' if actions & ( 1 << OFPAT_SET_NW_SRC) != 0
66
+ info ' OFPAT_SET_NW_DST' if actions & ( 1 << OFPAT_SET_NW_DST) != 0
67
+ info ' OFPAT_SET_NW_TOS' if actions & ( 1 << OFPAT_SET_NW_TOS) != 0
68
+ info ' OFPAT_SET_TP_SRC' if actions & ( 1 << OFPAT_SET_TP_SRC) != 0
69
+ info ' OFPAT_SET_TP_DST' if actions & ( 1 << OFPAT_SET_TP_DST) != 0
70
+ info ' OFPAT_ENQUEUE' if actions & ( 1 << OFPAT_ENQUEUE) != 0
71
+ info ' OFPAT_VENDOR' if actions & OFPAT_VENDOR != 0
72
72
  end
73
73
 
74
74
 
75
- def print_ports ports
76
- info "ports:"
75
+ def print_ports(ports)
76
+ info 'ports:'
77
77
  ports.each do | each |
78
- info " port_no: %u" % each.number
79
- info " hw_addr = #{ each.hw_addr.to_s }"
78
+ info ' port_no: %u' % each.number
79
+ info " hw_addr = #{ each.hw_addr }"
80
80
  info " name = #{ each.name }"
81
81
  info " config = #{ each.config.to_hex }"
82
82
  info " state = #{ each.state.to_hex }"
@@ -24,11 +24,11 @@ class HelloController < Controller
24
24
  STDERR.puts "Usage: #{ File.basename __FILE__ } COUNT"
25
25
  shutdown!
26
26
  end
27
- @count = ARGV[ 0 ].to_i
27
+ @count = ARGV[ 0].to_i
28
28
  end
29
29
 
30
30
 
31
- def switch_ready datapath_id
31
+ def switch_ready(datapath_id)
32
32
  @count.times do
33
33
  send_message datapath_id, Hello.new
34
34
  end
@@ -19,7 +19,7 @@
19
19
  #
20
20
 
21
21
 
22
- require "example"
22
+ require 'example'
23
23
 
24
24
 
25
25
  class SetConfigController < Controller
@@ -27,20 +27,20 @@ class SetConfigController < Controller
27
27
 
28
28
 
29
29
  class << self
30
- def run args
30
+ def run(args)
31
31
  usage unless Example.options_parse args
32
32
  end
33
33
 
34
34
 
35
35
  def usage
36
36
  puts Example.cmd_usage
37
- puts "Send count number of set-config messages to datapath_id."
37
+ puts 'Send count number of set-config messages to datapath_id.'
38
38
  exit false
39
39
  end
40
40
  end
41
41
 
42
42
 
43
- def switch_ready msg_datapath_id
43
+ def switch_ready(msg_datapath_id)
44
44
  may_raise_error msg_datapath_id
45
45
  send_nr_msgs SetConfig
46
46
  end