trema 0.4.7 → 0.4.8

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 (718) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +33 -54
  3. data/.hound.yml +3 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +17 -1
  6. data/.travis.yml +14 -18
  7. data/CHANGELOG.md +10 -0
  8. data/Gemfile +1 -26
  9. data/README.md +25 -241
  10. data/Rakefile +4 -1056
  11. data/bin/.gitignore +3 -0
  12. data/bin/trema +163 -237
  13. data/features/cleanup_on_failure.feature +118 -0
  14. data/features/logging.feature +73 -0
  15. data/features/open_flow13.feature +21 -0
  16. data/features/step_definitions/.gitignore +35 -0
  17. data/features/step_definitions/.rubocop.yml +5 -0
  18. data/features/step_definitions/.travis.yml +19 -0
  19. data/features/step_definitions/Gemfile +9 -0
  20. data/features/step_definitions/Guardfile +4 -0
  21. data/features/step_definitions/LICENSE +675 -0
  22. data/features/step_definitions/README.md +7 -0
  23. data/features/step_definitions/Rakefile +10 -0
  24. data/features/step_definitions/show_stats_steps.rb +56 -0
  25. data/features/step_definitions/virtual_link_steps.rb +8 -0
  26. data/features/support/env.rb +0 -73
  27. data/features/support/hooks.rb +6 -50
  28. data/features/trema_delete_link.feature +30 -0
  29. data/features/trema_killall.feature +56 -0
  30. data/features/trema_run.feature +47 -0
  31. data/features/trema_start.feature +73 -0
  32. data/features/trema_stop.feature +50 -0
  33. data/lib/trema.rb +4 -0
  34. data/lib/trema/command.rb +184 -0
  35. data/lib/trema/controller.rb +289 -0
  36. data/lib/trema/dirs.rb +14 -0
  37. data/lib/trema/drb.rb +32 -0
  38. data/lib/trema/logger.rb +63 -0
  39. data/lib/trema/monkey_patch/integer.rb +8 -0
  40. data/lib/trema/monkey_patch/integer/base_conversions.rb +12 -0
  41. data/lib/trema/monkey_patch/integer/durations.rb +12 -0
  42. data/lib/trema/switch.rb +83 -0
  43. data/lib/trema/version.rb +5 -0
  44. data/spec/spec_helper.rb +9 -178
  45. data/spec/trema/controller_spec.rb +4 -53
  46. data/tasks/.gitignore +34 -0
  47. data/tasks/LICENSE +675 -0
  48. data/tasks/README.md +6 -0
  49. data/tasks/cucumber.rake +14 -0
  50. data/tasks/flay.rake +15 -0
  51. data/tasks/flog.rake +25 -0
  52. data/tasks/gem.rake +15 -0
  53. data/tasks/reek.rake +11 -0
  54. data/tasks/relish.rake +8 -0
  55. data/tasks/rspec.rake +8 -0
  56. data/tasks/rubocop.rake +2 -16
  57. data/tasks/yard.rake +11 -0
  58. data/trema.gemspec +24 -23
  59. metadata +180 -720
  60. data/.yardopts +0 -4
  61. data/Doxyfile +0 -1679
  62. data/Guardfile +0 -14
  63. data/bin/quality +0 -31
  64. data/bin/trema-config +0 -59
  65. data/build.rb +0 -32
  66. data/cruise.rb +0 -409
  67. data/features/.nav +0 -50
  68. data/features/README.md +0 -7
  69. data/features/core/get_pid_by_trema_name.feature +0 -137
  70. data/features/core/packetin_filter.feature +0 -55
  71. data/features/core/switch_manager.feature +0 -41
  72. data/features/core/trema-config.feature +0 -55
  73. data/features/dsl/switch_port_specifier.feature +0 -15
  74. data/features/examples/dumper.feature +0 -35
  75. data/features/examples/hello_trema.feature +0 -23
  76. data/features/examples/learning_switch.feature +0 -37
  77. data/features/examples/list_switches.feature +0 -24
  78. data/features/examples/message.set_config.feature +0 -27
  79. data/features/examples/message.vendor-action.feature +0 -25
  80. data/features/examples/message.vendor-stats-request.feature +0 -20
  81. data/features/examples/multi_learning_switch.feature +0 -107
  82. data/features/examples/openflow_message.echo.feature +0 -59
  83. data/features/examples/openflow_message.features_request.feature +0 -35
  84. data/features/examples/openflow_message.hello.feature +0 -59
  85. data/features/examples/packet_in.feature +0 -33
  86. data/features/examples/packetin_filter_config.feature +0 -95
  87. data/features/examples/patch_panel.feature +0 -29
  88. data/features/examples/repeater_hub.feature +0 -52
  89. data/features/examples/switch_info.feature +0 -51
  90. data/features/examples/switch_monitor.feature +0 -35
  91. data/features/examples/transparent_firewall.feature +0 -73
  92. data/features/handlers/switch_ready.feature +0 -40
  93. data/features/step_definitions/misc_steps.rb +0 -85
  94. data/features/step_definitions/send_packets_steps.rb +0 -33
  95. data/features/step_definitions/stats_steps.rb +0 -39
  96. data/features/switch_event/C-add_forward_entry.feature +0 -114
  97. data/features/switch_event/C-delete_forward_entry.feature +0 -85
  98. data/features/switch_event/C-dump_forward_entries.feature +0 -72
  99. data/features/switch_event/C-set_forward_entries.feature +0 -77
  100. data/features/switch_event/README.md +0 -40
  101. data/features/switch_event/add_forward_entry.feature +0 -160
  102. data/features/switch_event/delete_forward_entry.feature +0 -160
  103. data/features/switch_event/dump_forward_entries.feature +0 -103
  104. data/features/switch_event/set_forward_entries.feature +0 -102
  105. data/features/trema_commands/README.md +0 -8
  106. data/features/trema_commands/dump_flows.feature +0 -41
  107. data/features/trema_commands/help.feature +0 -27
  108. data/features/trema_commands/help_option.feature +0 -20
  109. data/features/trema_commands/kill.feature +0 -56
  110. data/features/trema_commands/killall.feature +0 -32
  111. data/features/trema_commands/port_down.feature +0 -71
  112. data/features/trema_commands/port_up.feature +0 -75
  113. data/features/trema_commands/reset_stats.feature +0 -56
  114. data/features/trema_commands/run.feature +0 -56
  115. data/features/trema_commands/send_packets.feature +0 -46
  116. data/features/trema_commands/show_stats.feature +0 -66
  117. data/features/trema_commands/up.feature +0 -34
  118. data/features/trema_commands/version.feature +0 -10
  119. data/features/trema_commands/version_option.feature +0 -8
  120. data/rubocop-todo.yml +0 -159
  121. data/ruby/.gitignore +0 -4
  122. data/ruby/blocker.rb +0 -74
  123. data/ruby/extconf.rb +0 -80
  124. data/ruby/sub-process.rb +0 -289
  125. data/ruby/trema/action-common.c +0 -46
  126. data/ruby/trema/action-common.h +0 -38
  127. data/ruby/trema/action.rb +0 -33
  128. data/ruby/trema/aggregate-stats-reply.rb +0 -68
  129. data/ruby/trema/app.rb +0 -114
  130. data/ruby/trema/barrier-reply.c +0 -98
  131. data/ruby/trema/barrier-reply.h +0 -44
  132. data/ruby/trema/barrier-request.c +0 -135
  133. data/ruby/trema/barrier-request.h +0 -42
  134. data/ruby/trema/cli.rb +0 -267
  135. data/ruby/trema/command.rb +0 -41
  136. data/ruby/trema/command/dump_flows.rb +0 -43
  137. data/ruby/trema/command/kill.rb +0 -75
  138. data/ruby/trema/command/killall.rb +0 -38
  139. data/ruby/trema/command/netns.rb +0 -38
  140. data/ruby/trema/command/port_down.rb +0 -43
  141. data/ruby/trema/command/port_up.rb +0 -43
  142. data/ruby/trema/command/reset_stats.rb +0 -41
  143. data/ruby/trema/command/ruby.rb +0 -38
  144. data/ruby/trema/command/run.rb +0 -110
  145. data/ruby/trema/command/send_packets.rb +0 -46
  146. data/ruby/trema/command/shell.rb +0 -57
  147. data/ruby/trema/command/show_stats.rb +0 -65
  148. data/ruby/trema/command/up.rb +0 -44
  149. data/ruby/trema/command/version.rb +0 -35
  150. data/ruby/trema/compat.h +0 -36
  151. data/ruby/trema/controller.c +0 -691
  152. data/ruby/trema/controller.h +0 -42
  153. data/ruby/trema/controller.rb +0 -255
  154. data/ruby/trema/custom-switch.rb +0 -56
  155. data/ruby/trema/daemon.rb +0 -184
  156. data/ruby/trema/default-logger.c +0 -161
  157. data/ruby/trema/default-logger.h +0 -42
  158. data/ruby/trema/default-logger.rb +0 -29
  159. data/ruby/trema/default_openflow_channel_port.rb +0 -26
  160. data/ruby/trema/desc-stats-reply.rb +0 -75
  161. data/ruby/trema/dsl.rb +0 -32
  162. data/ruby/trema/dsl/configuration.rb +0 -145
  163. data/ruby/trema/dsl/context.rb +0 -69
  164. data/ruby/trema/dsl/custom-switch.rb +0 -44
  165. data/ruby/trema/dsl/link.rb +0 -39
  166. data/ruby/trema/dsl/netns.rb +0 -78
  167. data/ruby/trema/dsl/parser.rb +0 -70
  168. data/ruby/trema/dsl/rswitch.rb +0 -47
  169. data/ruby/trema/dsl/run.rb +0 -47
  170. data/ruby/trema/dsl/runner.rb +0 -178
  171. data/ruby/trema/dsl/stanza.rb +0 -51
  172. data/ruby/trema/dsl/switch.rb +0 -76
  173. data/ruby/trema/dsl/syntax-error.rb +0 -31
  174. data/ruby/trema/dsl/syntax.rb +0 -128
  175. data/ruby/trema/dsl/vhost.rb +0 -106
  176. data/ruby/trema/dsl/vswitch.rb +0 -45
  177. data/ruby/trema/echo-reply.c +0 -122
  178. data/ruby/trema/echo-reply.h +0 -40
  179. data/ruby/trema/echo-request.c +0 -117
  180. data/ruby/trema/echo-request.h +0 -40
  181. data/ruby/trema/echo.c +0 -99
  182. data/ruby/trema/echo.h +0 -39
  183. data/ruby/trema/enqueue.rb +0 -87
  184. data/ruby/trema/error.c +0 -262
  185. data/ruby/trema/error.h +0 -42
  186. data/ruby/trema/exact-match.rb +0 -34
  187. data/ruby/trema/executables.rb +0 -99
  188. data/ruby/trema/features-reply.c +0 -330
  189. data/ruby/trema/features-reply.h +0 -54
  190. data/ruby/trema/features-request.c +0 -134
  191. data/ruby/trema/features-request.h +0 -42
  192. data/ruby/trema/flow-mod.c +0 -150
  193. data/ruby/trema/flow-mod.h +0 -42
  194. data/ruby/trema/flow-removed.c +0 -280
  195. data/ruby/trema/flow-removed.h +0 -44
  196. data/ruby/trema/flow-stats-reply.rb +0 -107
  197. data/ruby/trema/flow.rb +0 -65
  198. data/ruby/trema/get-config-reply.c +0 -158
  199. data/ruby/trema/get-config-reply.h +0 -50
  200. data/ruby/trema/get-config-request.c +0 -136
  201. data/ruby/trema/get-config-request.h +0 -42
  202. data/ruby/trema/hardware-switch.rb +0 -86
  203. data/ruby/trema/hello.c +0 -133
  204. data/ruby/trema/hello.h +0 -42
  205. data/ruby/trema/host.rb +0 -263
  206. data/ruby/trema/link.rb +0 -177
  207. data/ruby/trema/list-switches-reply.c +0 -44
  208. data/ruby/trema/list-switches-reply.h +0 -38
  209. data/ruby/trema/mac.rb +0 -29
  210. data/ruby/trema/match.c +0 -621
  211. data/ruby/trema/match.h +0 -34
  212. data/ruby/trema/monkey-patch/integer.rb +0 -35
  213. data/ruby/trema/monkey-patch/integer/base-conversions.rb +0 -34
  214. data/ruby/trema/monkey-patch/integer/ranges.rb +0 -49
  215. data/ruby/trema/monkey-patch/integer/validators.rb +0 -36
  216. data/ruby/trema/monkey-patch/module.rb +0 -33
  217. data/ruby/trema/monkey-patch/module/class-method.rb +0 -38
  218. data/ruby/trema/monkey-patch/module/deprecation.rb +0 -39
  219. data/ruby/trema/monkey-patch/string.rb +0 -31
  220. data/ruby/trema/monkey-patch/string/inflectors.rb +0 -52
  221. data/ruby/trema/netns.rb +0 -127
  222. data/ruby/trema/network-component.rb +0 -151
  223. data/ruby/trema/ofctl.rb +0 -70
  224. data/ruby/trema/open-vswitch.rb +0 -160
  225. data/ruby/trema/openflow-error.c +0 -193
  226. data/ruby/trema/openflow-error.h +0 -51
  227. data/ruby/trema/openflow-switch.rb +0 -35
  228. data/ruby/trema/ordered-hash.rb +0 -75
  229. data/ruby/trema/packet-in.c +0 -1365
  230. data/ruby/trema/packet-in.h +0 -44
  231. data/ruby/trema/packet-queue.rb +0 -181
  232. data/ruby/trema/packetin-filter.rb +0 -124
  233. data/ruby/trema/path.rb +0 -85
  234. data/ruby/trema/phost.rb +0 -76
  235. data/ruby/trema/port-mod.c +0 -232
  236. data/ruby/trema/port-mod.h +0 -34
  237. data/ruby/trema/port-stats-reply.rb +0 -109
  238. data/ruby/trema/port-status-add.rb +0 -60
  239. data/ruby/trema/port-status-delete.rb +0 -60
  240. data/ruby/trema/port-status-modify.rb +0 -60
  241. data/ruby/trema/port-status.c +0 -192
  242. data/ruby/trema/port-status.h +0 -41
  243. data/ruby/trema/port.c +0 -398
  244. data/ruby/trema/port.h +0 -45
  245. data/ruby/trema/process.rb +0 -103
  246. data/ruby/trema/queue-get-config-reply.c +0 -205
  247. data/ruby/trema/queue-get-config-reply.h +0 -45
  248. data/ruby/trema/queue-get-config-request.c +0 -141
  249. data/ruby/trema/queue-get-config-request.h +0 -42
  250. data/ruby/trema/queue-stats-reply.rb +0 -76
  251. data/ruby/trema/ruby-switch.rb +0 -62
  252. data/ruby/trema/send-out-port.rb +0 -113
  253. data/ruby/trema/set-config.c +0 -174
  254. data/ruby/trema/set-config.h +0 -42
  255. data/ruby/trema/set-eth-addr.rb +0 -54
  256. data/ruby/trema/set-eth-dst-addr.rb +0 -52
  257. data/ruby/trema/set-eth-src-addr.rb +0 -53
  258. data/ruby/trema/set-ip-addr.rb +0 -54
  259. data/ruby/trema/set-ip-dst-addr.rb +0 -53
  260. data/ruby/trema/set-ip-src-addr.rb +0 -52
  261. data/ruby/trema/set-ip-tos.rb +0 -64
  262. data/ruby/trema/set-transport-dst-port.rb +0 -53
  263. data/ruby/trema/set-transport-port.rb +0 -53
  264. data/ruby/trema/set-transport-src-port.rb +0 -54
  265. data/ruby/trema/set-vlan-priority.rb +0 -66
  266. data/ruby/trema/set-vlan-vid.rb +0 -65
  267. data/ruby/trema/shell.rb +0 -37
  268. data/ruby/trema/shell/down.rb +0 -37
  269. data/ruby/trema/shell/killall.rb +0 -38
  270. data/ruby/trema/shell/link.rb +0 -59
  271. data/ruby/trema/shell/reset_stats.rb +0 -49
  272. data/ruby/trema/shell/run.rb +0 -67
  273. data/ruby/trema/shell/send_packets.rb +0 -40
  274. data/ruby/trema/shell/show_stats.rb +0 -47
  275. data/ruby/trema/shell/up.rb +0 -41
  276. data/ruby/trema/shell/vhost.rb +0 -42
  277. data/ruby/trema/shell/vswitch.rb +0 -47
  278. data/ruby/trema/stats-helper.rb +0 -63
  279. data/ruby/trema/stats-reply.c +0 -540
  280. data/ruby/trema/stats-reply.h +0 -51
  281. data/ruby/trema/stats-request.c +0 -715
  282. data/ruby/trema/stats-request.h +0 -40
  283. data/ruby/trema/strip-vlan-header.rb +0 -41
  284. data/ruby/trema/switch-daemon.rb +0 -90
  285. data/ruby/trema/switch-disconnected.c +0 -38
  286. data/ruby/trema/switch-disconnected.h +0 -36
  287. data/ruby/trema/switch-event.c +0 -648
  288. data/ruby/trema/switch-event.h +0 -27
  289. data/ruby/trema/switch-manager.rb +0 -119
  290. data/ruby/trema/switch.c +0 -197
  291. data/ruby/trema/switch.h +0 -40
  292. data/ruby/trema/switch.rb +0 -56
  293. data/ruby/trema/table-stats-reply.rb +0 -85
  294. data/ruby/trema/timers.rb +0 -95
  295. data/ruby/trema/trema-ruby-utils.c +0 -66
  296. data/ruby/trema/trema-ruby-utils.h +0 -42
  297. data/ruby/trema/trema.c +0 -126
  298. data/ruby/trema/tremashark.rb +0 -46
  299. data/ruby/trema/util.rb +0 -116
  300. data/ruby/trema/vendor-action.rb +0 -82
  301. data/ruby/trema/vendor-stats-reply.rb +0 -64
  302. data/ruby/trema/vendor.c +0 -230
  303. data/ruby/trema/vendor.h +0 -48
  304. data/ruby/trema/version.rb +0 -28
  305. data/spec/support/action.rb +0 -49
  306. data/spec/support/mandatory-option.rb +0 -53
  307. data/spec/support/matchers/constant.rb +0 -25
  308. data/spec/support/openflow-message.rb +0 -173
  309. data/spec/support/port-status.rb +0 -35
  310. data/spec/trema/app_spec.rb +0 -88
  311. data/spec/trema/barrier-reply_spec.rb +0 -43
  312. data/spec/trema/barrier-request_spec.rb +0 -92
  313. data/spec/trema/cli_spec.rb +0 -156
  314. data/spec/trema/default-logger_spec.rb +0 -46
  315. data/spec/trema/dsl/configuration_spec.rb +0 -120
  316. data/spec/trema/dsl/link_spec.rb +0 -50
  317. data/spec/trema/dsl/run_spec.rb +0 -72
  318. data/spec/trema/dsl/runner_spec.rb +0 -247
  319. data/spec/trema/dsl/switch_spec.rb +0 -69
  320. data/spec/trema/dsl/syntax_spec.rb +0 -110
  321. data/spec/trema/dsl/vhost_spec.rb +0 -144
  322. data/spec/trema/dsl/vswitch_spec.rb +0 -80
  323. data/spec/trema/echo-reply_spec.rb +0 -84
  324. data/spec/trema/echo-request_spec.rb +0 -128
  325. data/spec/trema/enqueue_spec.rb +0 -76
  326. data/spec/trema/error_spec.rb +0 -81
  327. data/spec/trema/executables_spec.rb +0 -54
  328. data/spec/trema/features-reply_spec.rb +0 -91
  329. data/spec/trema/features-request_spec.rb +0 -93
  330. data/spec/trema/flow-mod_spec.rb +0 -99
  331. data/spec/trema/flow-removed_spec.rb +0 -144
  332. data/spec/trema/get-config-reply_spec.rb +0 -43
  333. data/spec/trema/get-config-request_spec.rb +0 -92
  334. data/spec/trema/hardware-switch_spec.rb +0 -54
  335. data/spec/trema/hello_spec.rb +0 -63
  336. data/spec/trema/host_spec.rb +0 -191
  337. data/spec/trema/link_spec.rb +0 -62
  338. data/spec/trema/list-switches-reply_spec.rb +0 -46
  339. data/spec/trema/match_spec.rb +0 -111
  340. data/spec/trema/open-vswitch_spec.rb +0 -121
  341. data/spec/trema/openflow-error_spec.rb +0 -141
  342. data/spec/trema/packet-in_spec.rb +0 -717
  343. data/spec/trema/packet-out_spec.rb +0 -125
  344. data/spec/trema/packetin-filter_spec.rb +0 -39
  345. data/spec/trema/port-mod_spec.rb +0 -98
  346. data/spec/trema/port-status-add_spec.rb +0 -32
  347. data/spec/trema/port-status-delete_spec.rb +0 -32
  348. data/spec/trema/port-status-modify_spec.rb +0 -71
  349. data/spec/trema/port-status_spec.rb +0 -38
  350. data/spec/trema/port_spec.rb +0 -59
  351. data/spec/trema/process_spec.rb +0 -69
  352. data/spec/trema/queue-get-config-reply_spec.rb +0 -65
  353. data/spec/trema/queue-get-config-request_spec.rb +0 -67
  354. data/spec/trema/send-out-port_spec.rb +0 -106
  355. data/spec/trema/set-config_spec.rb +0 -78
  356. data/spec/trema/set-eth-addr_spec.rb +0 -62
  357. data/spec/trema/set-ip-addr_spec.rb +0 -81
  358. data/spec/trema/set-ip-tos_spec.rb +0 -70
  359. data/spec/trema/set-transport-dst-port_spec.rb +0 -65
  360. data/spec/trema/set-transport-src-port_spec.rb +0 -65
  361. data/spec/trema/set-vlan-priority_spec.rb +0 -65
  362. data/spec/trema/set-vlan-vid_spec.rb +0 -65
  363. data/spec/trema/shell/vhost_spec.rb +0 -58
  364. data/spec/trema/shell/vswitch_spec.rb +0 -87
  365. data/spec/trema/stats-reply_spec.rb +0 -363
  366. data/spec/trema/stats-request_spec.rb +0 -166
  367. data/spec/trema/strip-vlan-header_spec.rb +0 -44
  368. data/spec/trema/switch-daemon_spec.rb +0 -81
  369. data/spec/trema/switch-disconnected_spec.rb +0 -56
  370. data/spec/trema/switch-manager_spec.rb +0 -41
  371. data/spec/trema/tremashark_spec.rb +0 -39
  372. data/spec/trema/util_spec.rb +0 -88
  373. data/spec/trema/vendor-action_spec.rb +0 -75
  374. data/spec/trema/vendor_spec.rb +0 -76
  375. data/spec/trema_spec.rb +0 -94
  376. data/src/examples/cbench_switch/README +0 -21
  377. data/src/examples/cbench_switch/cbench-switch.rb +0 -38
  378. data/src/examples/cbench_switch/cbench_switch.c +0 -66
  379. data/src/examples/dumper/dumper.c +0 -362
  380. data/src/examples/dumper/dumper.conf +0 -7
  381. data/src/examples/dumper/dumper.rb +0 -195
  382. data/src/examples/hello_trema/.gitignore +0 -2
  383. data/src/examples/hello_trema/README.md +0 -2
  384. data/src/examples/hello_trema/hello-trema.rb +0 -30
  385. data/src/examples/hello_trema/hello_trema.c +0 -48
  386. data/src/examples/hello_trema/sample.conf +0 -1
  387. data/src/examples/learning_switch/README +0 -15
  388. data/src/examples/learning_switch/fdb.rb +0 -110
  389. data/src/examples/learning_switch/learning-switch.rb +0 -90
  390. data/src/examples/learning_switch/learning_switch.c +0 -217
  391. data/src/examples/learning_switch/learning_switch.conf +0 -18
  392. data/src/examples/list_switches/README +0 -19
  393. data/src/examples/list_switches/list-switches.rb +0 -43
  394. data/src/examples/list_switches/list_switches.c +0 -79
  395. data/src/examples/list_switches/list_switches.conf +0 -15
  396. data/src/examples/match_compare/match-compare.conf +0 -30
  397. data/src/examples/match_compare/match-compare.rb +0 -97
  398. data/src/examples/multi_learning_switch/README +0 -14
  399. data/src/examples/multi_learning_switch/multi-learning-switch.rb +0 -94
  400. data/src/examples/multi_learning_switch/multi_learning_switch.c +0 -294
  401. data/src/examples/multi_learning_switch/multi_learning_switch.conf +0 -17
  402. data/src/examples/openflow_message/README +0 -11
  403. data/src/examples/openflow_message/echo.c +0 -80
  404. data/src/examples/openflow_message/echo.rb +0 -56
  405. data/src/examples/openflow_message/example.rb +0 -60
  406. data/src/examples/openflow_message/features-request.rb +0 -96
  407. data/src/examples/openflow_message/features_request.c +0 -167
  408. data/src/examples/openflow_message/hello.c +0 -68
  409. data/src/examples/openflow_message/hello.rb +0 -43
  410. data/src/examples/openflow_message/set-config.rb +0 -57
  411. data/src/examples/openflow_message/set_config.c +0 -68
  412. data/src/examples/openflow_message/vendor-action.rb +0 -43
  413. data/src/examples/openflow_message/vendor-stats-request.rb +0 -66
  414. data/src/examples/openflow_message/vendor_action.c +0 -103
  415. data/src/examples/openflow_switch/echo_switch.c +0 -89
  416. data/src/examples/openflow_switch/hello_switch.c +0 -85
  417. data/src/examples/packet_in/README +0 -15
  418. data/src/examples/packet_in/packet-in.rb +0 -37
  419. data/src/examples/packet_in/packet_in.c +0 -53
  420. data/src/examples/packet_in/packet_in.conf +0 -15
  421. data/src/examples/packetin_filter_config/README +0 -12
  422. data/src/examples/packetin_filter_config/add_filter.c +0 -71
  423. data/src/examples/packetin_filter_config/delete_filter.c +0 -63
  424. data/src/examples/packetin_filter_config/delete_filter_strict.c +0 -73
  425. data/src/examples/packetin_filter_config/dump_filter.c +0 -63
  426. data/src/examples/packetin_filter_config/dump_filter_strict.c +0 -73
  427. data/src/examples/packetin_filter_config/packetin_filter_config.c +0 -132
  428. data/src/examples/packetin_filter_config/packetin_filter_config.conf +0 -7
  429. data/src/examples/packetin_filter_config/utils.c +0 -100
  430. data/src/examples/packetin_filter_config/utils.h +0 -40
  431. data/src/examples/patch_panel/network.conf +0 -14
  432. data/src/examples/patch_panel/patch-panel.conf +0 -1
  433. data/src/examples/patch_panel/patch-panel.rb +0 -59
  434. data/src/examples/repeater_hub/README +0 -8
  435. data/src/examples/repeater_hub/repeater-hub.rb +0 -41
  436. data/src/examples/repeater_hub/repeater-hub_spec.rb +0 -154
  437. data/src/examples/repeater_hub/repeater_hub.c +0 -81
  438. data/src/examples/repeater_hub/repeater_hub.conf +0 -28
  439. data/src/examples/simple_router/README +0 -18
  440. data/src/examples/simple_router/arp-table.rb +0 -81
  441. data/src/examples/simple_router/interface.rb +0 -90
  442. data/src/examples/simple_router/routing-table.rb +0 -60
  443. data/src/examples/simple_router/simple-router.rb +0 -191
  444. data/src/examples/simple_router/simple_router.conf +0 -24
  445. data/src/examples/simple_router/simple_router_netns.conf +0 -15
  446. data/src/examples/simple_router/simple_router_network.conf +0 -6
  447. data/src/examples/switch_event_config/.gitignore +0 -6
  448. data/src/examples/switch_event_config/add_forward_entry.c +0 -227
  449. data/src/examples/switch_event_config/delete_forward_entry.c +0 -226
  450. data/src/examples/switch_event_config/dump_forward_entries.c +0 -190
  451. data/src/examples/switch_event_config/network.conf +0 -2
  452. data/src/examples/switch_event_config/set_forward_entries.c +0 -210
  453. data/src/examples/switch_info/README +0 -13
  454. data/src/examples/switch_info/switch-info.rb +0 -44
  455. data/src/examples/switch_info/switch_info.c +0 -78
  456. data/src/examples/switch_info/switch_info.conf +0 -3
  457. data/src/examples/switch_monitor/switch-monitor.conf +0 -3
  458. data/src/examples/switch_monitor/switch-monitor.rb +0 -56
  459. data/src/examples/switch_monitor/switch_monitor.c +0 -152
  460. data/src/examples/traffic_monitor/counter.c +0 -72
  461. data/src/examples/traffic_monitor/counter.h +0 -46
  462. data/src/examples/traffic_monitor/counter.rb +0 -44
  463. data/src/examples/traffic_monitor/fdb.c +0 -74
  464. data/src/examples/traffic_monitor/fdb.h +0 -48
  465. data/src/examples/traffic_monitor/fdb.rb +0 -42
  466. data/src/examples/traffic_monitor/traffic-monitor.rb +0 -98
  467. data/src/examples/traffic_monitor/traffic_monitor.c +0 -161
  468. data/src/examples/traffic_monitor/traffic_monitor.conf +0 -16
  469. data/src/examples/transparent_firewall/README.md +0 -61
  470. data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +0 -713
  471. data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +0 -3440
  472. data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +0 -11342
  473. data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +0 -1937
  474. data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +0 -7329
  475. data/src/examples/transparent_firewall/block-rfc1918.rb +0 -86
  476. data/src/examples/transparent_firewall/pass-delegated.rb +0 -178
  477. data/src/examples/transparent_firewall/regen_aggregated.sh +0 -53
  478. data/src/examples/transparent_firewall/stats-to-cidrs.rb +0 -59
  479. data/src/lib/arp.h +0 -64
  480. data/src/lib/bool.h +0 -47
  481. data/src/lib/buffer.c +0 -304
  482. data/src/lib/buffer.h +0 -54
  483. data/src/lib/byteorder.c +0 -571
  484. data/src/lib/byteorder.h +0 -108
  485. data/src/lib/checks.h +0 -40
  486. data/src/lib/chibach.c +0 -392
  487. data/src/lib/chibach.h +0 -69
  488. data/src/lib/chibach_private.c +0 -168
  489. data/src/lib/chibach_private.h +0 -50
  490. data/src/lib/daemon.c +0 -429
  491. data/src/lib/daemon.h +0 -40
  492. data/src/lib/doubly_linked_list.c +0 -284
  493. data/src/lib/doubly_linked_list.h +0 -86
  494. data/src/lib/ether.c +0 -47
  495. data/src/lib/ether.h +0 -92
  496. data/src/lib/etherip.h +0 -44
  497. data/src/lib/event_forward_interface.c +0 -788
  498. data/src/lib/event_forward_interface.h +0 -138
  499. data/src/lib/event_handler.c +0 -419
  500. data/src/lib/event_handler.h +0 -57
  501. data/src/lib/external_callback.c +0 -126
  502. data/src/lib/external_callback.h +0 -46
  503. data/src/lib/hash_table.c +0 -415
  504. data/src/lib/hash_table.h +0 -136
  505. data/src/lib/icmp.h +0 -72
  506. data/src/lib/igmp.h +0 -48
  507. data/src/lib/ipv4.h +0 -64
  508. data/src/lib/ipv6.h +0 -46
  509. data/src/lib/linked_list.c +0 -244
  510. data/src/lib/linked_list.h +0 -84
  511. data/src/lib/log.c +0 -636
  512. data/src/lib/log.h +0 -77
  513. data/src/lib/management_interface.c +0 -359
  514. data/src/lib/management_interface.h +0 -40
  515. data/src/lib/management_service_interface.c +0 -102
  516. data/src/lib/management_service_interface.h +0 -134
  517. data/src/lib/match.h +0 -82
  518. data/src/lib/match_table.c +0 -606
  519. data/src/lib/match_table.h +0 -49
  520. data/src/lib/message_queue.c +0 -143
  521. data/src/lib/message_queue.h +0 -59
  522. data/src/lib/messenger.c +0 -1821
  523. data/src/lib/messenger.h +0 -145
  524. data/src/lib/openflow_application_interface.c +0 -1800
  525. data/src/lib/openflow_application_interface.h +0 -359
  526. data/src/lib/openflow_message.c +0 -4240
  527. data/src/lib/openflow_message.h +0 -291
  528. data/src/lib/openflow_service_interface.h +0 -58
  529. data/src/lib/openflow_switch_interface.c +0 -1378
  530. data/src/lib/openflow_switch_interface.h +0 -262
  531. data/src/lib/packet_info.c +0 -336
  532. data/src/lib/packet_info.h +0 -233
  533. data/src/lib/packet_parser.c +0 -522
  534. data/src/lib/packetin_filter_interface.c +0 -292
  535. data/src/lib/packetin_filter_interface.h +0 -125
  536. data/src/lib/persistent_storage.c +0 -478
  537. data/src/lib/persistent_storage.h +0 -44
  538. data/src/lib/secure_channel.c +0 -496
  539. data/src/lib/secure_channel.h +0 -43
  540. data/src/lib/stat.c +0 -248
  541. data/src/lib/stat.h +0 -51
  542. data/src/lib/tcp.h +0 -62
  543. data/src/lib/timer.c +0 -349
  544. data/src/lib/timer.h +0 -51
  545. data/src/lib/trema.c +0 -776
  546. data/src/lib/trema.h +0 -80
  547. data/src/lib/trema.hpp +0 -49
  548. data/src/lib/trema_private.c +0 -175
  549. data/src/lib/trema_private.h +0 -64
  550. data/src/lib/trema_wrapper.c +0 -59
  551. data/src/lib/trema_wrapper.h +0 -66
  552. data/src/lib/udp.h +0 -41
  553. data/src/lib/utility.c +0 -625
  554. data/src/lib/utility.h +0 -84
  555. data/src/lib/wrapper.c +0 -121
  556. data/src/lib/wrapper.h +0 -76
  557. data/src/management/application.c +0 -222
  558. data/src/management/echo.c +0 -183
  559. data/src/management/set_logging_level.c +0 -151
  560. data/src/management/show_stats.c +0 -148
  561. data/src/management/trema_manager +0 -184
  562. data/src/packetin_filter/README +0 -17
  563. data/src/packetin_filter/packetin_filter.c +0 -575
  564. data/src/switch_manager/README +0 -20
  565. data/src/switch_manager/cookie_table.c +0 -290
  566. data/src/switch_manager/cookie_table.h +0 -70
  567. data/src/switch_manager/dpid_table.c +0 -108
  568. data/src/switch_manager/dpid_table.h +0 -43
  569. data/src/switch_manager/event_forward_entry_manipulation.c +0 -120
  570. data/src/switch_manager/event_forward_entry_manipulation.h +0 -31
  571. data/src/switch_manager/ofpmsg_recv.c +0 -497
  572. data/src/switch_manager/ofpmsg_recv.h +0 -39
  573. data/src/switch_manager/ofpmsg_send.c +0 -274
  574. data/src/switch_manager/ofpmsg_send.h +0 -51
  575. data/src/switch_manager/secure_channel_listener.c +0 -296
  576. data/src/switch_manager/secure_channel_listener.h +0 -40
  577. data/src/switch_manager/secure_channel_receiver.c +0 -129
  578. data/src/switch_manager/secure_channel_receiver.h +0 -40
  579. data/src/switch_manager/secure_channel_sender.c +0 -131
  580. data/src/switch_manager/secure_channel_sender.h +0 -41
  581. data/src/switch_manager/service_interface.c +0 -180
  582. data/src/switch_manager/service_interface.h +0 -44
  583. data/src/switch_manager/switch.c +0 -988
  584. data/src/switch_manager/switch.h +0 -50
  585. data/src/switch_manager/switch_manager.c +0 -643
  586. data/src/switch_manager/switch_manager.h +0 -65
  587. data/src/switch_manager/switch_option.c +0 -30
  588. data/src/switch_manager/switch_option.h +0 -41
  589. data/src/switch_manager/switchinfo.h +0 -81
  590. data/src/switch_manager/xid_table.c +0 -182
  591. data/src/switch_manager/xid_table.h +0 -53
  592. data/src/tremashark/README +0 -79
  593. data/src/tremashark/packet_capture.c +0 -358
  594. data/src/tremashark/pcap_private.h +0 -45
  595. data/src/tremashark/pcap_queue.c +0 -195
  596. data/src/tremashark/pcap_queue.h +0 -56
  597. data/src/tremashark/plugin/.gitignore +0 -6
  598. data/src/tremashark/plugin/packet-trema/.gitignore +0 -5
  599. data/src/tremashark/plugin/packet-trema/Makefile +0 -77
  600. data/src/tremashark/plugin/packet-trema/Makefile.am +0 -110
  601. data/src/tremashark/plugin/packet-trema/Makefile.common +0 -29
  602. data/src/tremashark/plugin/packet-trema/moduleinfo.h +0 -39
  603. data/src/tremashark/plugin/packet-trema/packet-trema.c +0 -1671
  604. data/src/tremashark/plugin/packet-trema/plugin.c +0 -31
  605. data/src/tremashark/plugin/user_dlts +0 -2
  606. data/src/tremashark/queue.c +0 -167
  607. data/src/tremashark/queue.h +0 -58
  608. data/src/tremashark/stdin_relay.c +0 -257
  609. data/src/tremashark/syslog_relay.c +0 -247
  610. data/src/tremashark/tremashark.c +0 -554
  611. data/trema +0 -11
  612. data/trema-config +0 -11
  613. data/unittests/buffer_stubs.c +0 -72
  614. data/unittests/cmockery_trema.c +0 -121
  615. data/unittests/cmockery_trema.h +0 -95
  616. data/unittests/lib/buffer_test.c +0 -368
  617. data/unittests/lib/byteorder_test.c +0 -1798
  618. data/unittests/lib/daemon_test.c +0 -804
  619. data/unittests/lib/doubly_linked_list_test.c +0 -348
  620. data/unittests/lib/ether_test.c +0 -125
  621. data/unittests/lib/event_forward_interface_test.c +0 -1676
  622. data/unittests/lib/external_callback_test.c +0 -282
  623. data/unittests/lib/hash_table_test.c +0 -278
  624. data/unittests/lib/linked_list_test.c +0 -434
  625. data/unittests/lib/log_test.c +0 -672
  626. data/unittests/lib/management_interface_test.c +0 -238
  627. data/unittests/lib/management_service_interface_test.c +0 -317
  628. data/unittests/lib/match_table_test.c +0 -1507
  629. data/unittests/lib/message_queue_test.c +0 -381
  630. data/unittests/lib/messenger_test.c +0 -623
  631. data/unittests/lib/openflow_application_interface_test.c +0 -3713
  632. data/unittests/lib/openflow_message_test.c +0 -8047
  633. data/unittests/lib/packet_info_test.c +0 -558
  634. data/unittests/lib/packet_parser_test.c +0 -784
  635. data/unittests/lib/packetin_filter_interface_test.c +0 -721
  636. data/unittests/lib/persistent_storage_test.c +0 -800
  637. data/unittests/lib/stat_test.c +0 -433
  638. data/unittests/lib/test_packets/arp_rep.cap +0 -0
  639. data/unittests/lib/test_packets/arp_req.cap +0 -0
  640. data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
  641. data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
  642. data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
  643. data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
  644. data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
  645. data/unittests/lib/test_packets/ipx.cap +0 -0
  646. data/unittests/lib/test_packets/lldp.cap +0 -0
  647. data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
  648. data/unittests/lib/test_packets/rarp_req.cap +0 -0
  649. data/unittests/lib/test_packets/tcp.cap +0 -0
  650. data/unittests/lib/test_packets/tcp_syn.cap +0 -0
  651. data/unittests/lib/test_packets/udp.cap +0 -0
  652. data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
  653. data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
  654. data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
  655. data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
  656. data/unittests/lib/timer_test.c +0 -246
  657. data/unittests/lib/trema_private_test.c +0 -321
  658. data/unittests/lib/trema_test.c +0 -1030
  659. data/unittests/lib/utility_test.c +0 -711
  660. data/unittests/lib/wrapper_test.c +0 -228
  661. data/unittests/packetin_filter/packetin_filter_test.c +0 -476
  662. data/unittests/switch_manager/switch_manager_test.c +0 -1183
  663. data/unittests/wrapper_stubs.c +0 -37
  664. data/vendor/.gitignore +0 -6
  665. data/vendor/README.md +0 -29
  666. data/vendor/cmockery-20110428.tar.gz +0 -0
  667. data/vendor/oflops-0.03.trema1.tar.gz +0 -0
  668. data/vendor/oflops_no_snmp+1.0.0.diff +0 -340
  669. data/vendor/openflow-1.0.0.tar.gz +0 -0
  670. data/vendor/openflow.git.tar.gz +0 -0
  671. data/vendor/openvswitch-1.2.2.trema1.tar.gz +0 -0
  672. data/vendor/openvswitch-1.2.2_librt-check.diff +0 -21
  673. data/vendor/packet-openflow.diff +0 -13
  674. data/vendor/ruby-ifconfig-1.2/COPYING +0 -340
  675. data/vendor/ruby-ifconfig-1.2/Changelog +0 -16
  676. data/vendor/ruby-ifconfig-1.2/INSTALL +0 -239
  677. data/vendor/ruby-ifconfig-1.2/README +0 -38
  678. data/vendor/ruby-ifconfig-1.2/Rakefile +0 -14
  679. data/vendor/ruby-ifconfig-1.2/TODO +0 -8
  680. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +0 -17
  681. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +0 -10
  682. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +0 -14
  683. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +0 -17
  684. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +0 -24
  685. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +0 -60
  686. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +0 -20
  687. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +0 -10
  688. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +0 -36
  689. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +0 -10
  690. data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +0 -71
  691. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +0 -72
  692. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +0 -69
  693. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +0 -3
  694. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +0 -84
  695. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +0 -130
  696. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +0 -49
  697. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +0 -43
  698. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +0 -112
  699. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +0 -55
  700. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +0 -38
  701. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +0 -77
  702. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +0 -4
  703. data/vendor/ruby-ifconfig-1.2/setup.rb +0 -1306
  704. data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +0 -35
  705. data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +0 -33
  706. data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +0 -35
  707. data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +0 -4
  708. data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +0 -31
  709. data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +0 -33
  710. data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +0 -33
  711. data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +0 -35
  712. data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +0 -40
  713. data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +0 -39
  714. data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +0 -40
  715. data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +0 -49
  716. data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +0 -39
  717. data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +0 -39
  718. data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +0 -44
@@ -1,177 +0,0 @@
1
- #
2
- # Copyright (C) 2008-2013 NEC Corporation
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License, version 2, as
6
- # published by the Free Software Foundation.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License along
14
- # with this program; if not, write to the Free Software Foundation, Inc.,
15
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
- #
17
-
18
-
19
- require 'trema/network-component'
20
- require 'trema/path'
21
-
22
- $LOAD_PATH.unshift File.join(Trema.vendor_ruby_ifconfig, 'lib')
23
- require 'ifconfig'
24
-
25
-
26
- module Trema
27
- #
28
- # Network link between hosts and switches.
29
- #
30
- class Link < NetworkComponent
31
- #
32
- # Returns the name of link interface
33
- #
34
- # @example
35
- # link.name => "trema3-0"
36
- #
37
- # @return [String]
38
- #
39
- attr_reader :name
40
-
41
-
42
- #
43
- # Returns the name of link peer interface
44
- #
45
- # @example
46
- # link.name => "trema3-1"
47
- #
48
- # @return [String]
49
- #
50
- attr_reader :name_peer
51
-
52
-
53
- #
54
- # Returns the configuration names of link peers
55
- #
56
- # @example
57
- # link.peers => [ "host 0", "switch 1" ]
58
- #
59
- # @return [Array]
60
- #
61
- attr_reader :peers
62
-
63
-
64
- #
65
- # Creates a new Trema link from {DSL::Link}
66
- #
67
- # @example
68
- # link = Trema::Link.new( stanza )
69
- #
70
- # @return [Link]
71
- #
72
- def initialize(stanza)
73
- @link_id = Link.instances.size
74
- @stanza = stanza
75
- if real_eth?
76
- @name = real_eth
77
- @name_peer = nil
78
- @peers = @stanza.peers - [real_eth]
79
- else
80
- @name = "trema#{ @link_id }-0"
81
- @name_peer = "trema#{ @link_id }-1"
82
- @peers = @stanza.peers
83
- end
84
- Link.add self
85
- end
86
-
87
-
88
- #
89
- # Adds a virtual link
90
- #
91
- # @example
92
- # link.add!
93
- #
94
- # @return [undefined]
95
- #
96
- def add!
97
- return if real_eth?
98
- sh "sudo ip link add name #{ @name } type veth peer name #{ @name_peer }"
99
- sh "sudo /sbin/sysctl -w net.ipv6.conf.#{ @name }.disable_ipv6=1 >/dev/null 2>&1"
100
- sh "sudo /sbin/sysctl -w net.ipv6.conf.#{ @name_peer }.disable_ipv6=1 >/dev/null 2>&1"
101
- end
102
-
103
-
104
- #
105
- # Ups the peer interfaces of a virtual link
106
- #
107
- # @example
108
- # link.up!
109
- #
110
- # @return [undefined]
111
- #
112
- def up!
113
- return if real_eth?
114
- sh "sudo /sbin/ifconfig #{ @name } up"
115
- sh "sudo /sbin/ifconfig #{ @name_peer } up"
116
- end
117
-
118
-
119
- #
120
- # Creates and enables a virtual link
121
- #
122
- # @example
123
- # link.enable!
124
- #
125
- # @return [undefined]
126
- #
127
- def enable!
128
- add!
129
- up!
130
- end
131
-
132
-
133
- #
134
- # Deletes a virtual link
135
- #
136
- # @example
137
- # link.delete!
138
- #
139
- # @return [undefined]
140
- #
141
- def delete!
142
- return if real_eth?
143
- # FIXME: do not rescue nil
144
- sh "sudo ip link delete #{ @name } 2>/dev/null" rescue nil
145
- end
146
-
147
-
148
- ############################################################################
149
- private
150
- ############################################################################
151
-
152
-
153
- def real_eth
154
- interfaces = IfconfigWrapper.new.parse.interfaces
155
- @stanza.peers.each do | each |
156
- return each if interfaces.include?(each)
157
- end
158
- fail
159
- end
160
-
161
-
162
- def real_eth?
163
- interfaces = IfconfigWrapper.new.parse.interfaces
164
- @stanza.peers.each do | each |
165
- return true if interfaces.include?(each)
166
- end
167
- false
168
- end
169
- end
170
- end
171
-
172
-
173
- ### Local variables:
174
- ### mode: Ruby
175
- ### coding: utf-8-unix
176
- ### indent-tabs-mode: nil
177
- ### End:
@@ -1,44 +0,0 @@
1
- /*
2
- * Copyright (C) 2008-2013 NEC Corporation
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License, version 2, as
6
- * published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- *
13
- * You should have received a copy of the GNU General Public License along
14
- * with this program; if not, write to the Free Software Foundation, Inc.,
15
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
- */
17
-
18
-
19
- #include "trema.h"
20
- #include "ruby.h"
21
-
22
-
23
- void
24
- handle_list_switches_reply( const list_element *switches, void *controller ) {
25
- if ( rb_respond_to( ( VALUE ) controller, rb_intern( "list_switches_reply" ) ) == Qfalse ) {
26
- return;
27
- }
28
- VALUE dpids = rb_ary_new();
29
-
30
- const list_element *element = NULL;
31
- for ( element = switches; element != NULL; element = element->next ) {
32
- rb_ary_push( dpids, ULL2NUM( *( uint64_t * ) element->data ) );
33
- }
34
-
35
- rb_funcall( ( VALUE ) controller, rb_intern( "list_switches_reply" ), 1, dpids );
36
- }
37
-
38
-
39
- /*
40
- * Local variables:
41
- * c-basic-offset: 2
42
- * indent-tabs-mode: nil
43
- * End:
44
- */
@@ -1,38 +0,0 @@
1
- /*
2
- * Copyright (C) 2008-2013 NEC Corporation
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License, version 2, as
6
- * published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- *
13
- * You should have received a copy of the GNU General Public License along
14
- * with this program; if not, write to the Free Software Foundation, Inc.,
15
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
- */
17
-
18
-
19
- #ifndef LIST_SWITCHES_REPLY_H
20
- #define LIST_SWITCHES_REPLY_H
21
-
22
-
23
- #include "ruby.h"
24
- #include "trema.h"
25
-
26
-
27
- void handle_list_switches_reply( const list_element *switches, void *user_data );
28
-
29
-
30
- #endif // LIST_SWITCHES_REPLY_H
31
-
32
-
33
- /*
34
- * Local variables:
35
- * c-basic-offset: 2
36
- * indent-tabs-mode: nil
37
- * End:
38
- */
@@ -1,29 +0,0 @@
1
- #
2
- # Copyright (C) 2008-2013 NEC Corporation
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License, version 2, as
6
- # published by the Free Software Foundation.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License along
14
- # with this program; if not, write to the Free Software Foundation, Inc.,
15
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
- #
17
-
18
- require 'pio'
19
-
20
- module Trema
21
- Mac = Pio::Mac
22
- end
23
-
24
- ### Local variables:
25
- ### mode: Ruby
26
- ### coding: utf-8-unix
27
- ### indent-tabs-mode: nil
28
- ### End:
29
-
@@ -1,621 +0,0 @@
1
- /*
2
- * Copyright (C) 2008-2013 NEC Corporation
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License, version 2, as
6
- * published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- *
13
- * You should have received a copy of the GNU General Public License along
14
- * with this program; if not, write to the Free Software Foundation, Inc.,
15
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
- */
17
-
18
-
19
- #include <string.h>
20
- #include "trema.h"
21
- #include "ruby.h"
22
- #include "action-common.h"
23
-
24
-
25
- extern VALUE mTrema;
26
- VALUE cMatch;
27
-
28
-
29
- static VALUE
30
- match_alloc( VALUE klass ) {
31
- struct ofp_match *match = xmalloc( sizeof( struct ofp_match ) );
32
- return Data_Wrap_Struct( klass, NULL, xfree, match );
33
- }
34
-
35
-
36
- static struct
37
- ofp_match *get_match( VALUE self ) {
38
- struct ofp_match *match;
39
- Data_Get_Struct( self, struct ofp_match, match );
40
- return match;
41
- }
42
-
43
-
44
- /*
45
- * Creates a {Match} instance from packet_in's data, the method accepts an
46
- * additional list of symbols to wildcard set and ignore while matching flow entries.
47
- *
48
- * @overload match_from(message, *options)
49
- *
50
- * @example
51
- * def packet_in datapath_id, message
52
- * send_flow_mod(
53
- * datapath_id,
54
- * :match => Match.from( message, :dl_type, :nw_proto ),
55
- * :actions => Trema::ActionOutput.new( 2 )
56
- * )
57
- * end
58
- *
59
- * @param [PacketIn] message
60
- * the {PacketIn}'s message content.
61
- *
62
- * @param [optional, list] options
63
- * If supplied a comma-separated list of symbol ids indicating fields to be wildcarded.
64
- *
65
- * [:in_port]
66
- * the physical port number to wildcard.
67
- *
68
- * [:dl_src]
69
- * the source Ethernet address to wildcard.
70
- *
71
- * [:dl_dst]
72
- * the destination Ethernet address to wildcard.
73
- *
74
- * [:dl_vlan]
75
- * the IEEE 802.1q virtual VLAN tag to wildcard.
76
- *
77
- * [:dl_vlan_pcp]
78
- * the IEEE 802.1q priority code point to wildcard.
79
- *
80
- * [:dl_type]
81
- * the Ethernet protocol type to wildcard.
82
- *
83
- * [:nw_tos]
84
- * the IP ToS /DSCP field to wildcard.
85
- *
86
- * [:nw_proto]
87
- * the IP protocol type to wildcard.
88
- *
89
- * [:nw_src]
90
- * the IPv4 source address to wildcard.
91
- *
92
- * [:nw_dst]
93
- * the IPv4 destination address to wildcard.
94
- *
95
- * [:tp_src]
96
- * the source TCP/UDP port number to wildcard.
97
- *
98
- * [:tp_dst]
99
- * the destination TCP/UDP port number to wildcard.
100
- *
101
- * @return [Match] self
102
- * the modified or exact match from packet depending on whether the options
103
- * argument supplied or not.
104
- */
105
- static VALUE
106
- match_from( int argc, VALUE *argv, VALUE self ) {
107
- VALUE message, obj, wildcard_id, options;
108
- struct ofp_match *match = NULL;
109
- packet_in *packet = NULL;
110
- uint32_t wildcards = 0;
111
-
112
- if ( rb_scan_args( argc, argv, "1*", &message, &options ) >= 1 ) {
113
- obj = rb_funcall( self, rb_intern( "new" ), 0 );
114
- match = get_match( obj );
115
- Data_Get_Struct( message, packet_in, packet );
116
- int i;
117
- for ( i = 0; i < RARRAY_LEN( options ); i++ ) {
118
- wildcard_id = SYM2ID( RARRAY_PTR( options )[ i ] );
119
- if ( rb_intern( "in_port" ) == wildcard_id ) {
120
- wildcards |= OFPFW_IN_PORT;
121
- }
122
- if ( rb_intern( "dl_src" ) == wildcard_id ) {
123
- wildcards |= OFPFW_DL_SRC;
124
- }
125
- if ( rb_intern( "dl_dst" ) == wildcard_id ) {
126
- wildcards |= OFPFW_DL_DST;
127
- }
128
- if ( rb_intern( "dl_vlan" ) == wildcard_id ) {
129
- wildcards |= OFPFW_DL_VLAN;
130
- }
131
- if ( rb_intern( "dl_vlan_pcp" ) == wildcard_id ) {
132
- wildcards |= OFPFW_DL_VLAN_PCP;
133
- }
134
- if ( rb_intern( "dl_type" ) == wildcard_id ) {
135
- wildcards |= OFPFW_DL_TYPE;
136
- }
137
- if ( rb_intern( "nw_tos" ) == wildcard_id ) {
138
- wildcards |= OFPFW_NW_TOS;
139
- }
140
- if ( rb_intern( "nw_proto" ) == wildcard_id ) {
141
- wildcards |= OFPFW_NW_PROTO;
142
- }
143
- if ( rb_intern( "nw_src" ) == wildcard_id ) {
144
- wildcards |= OFPFW_NW_SRC_ALL;
145
- }
146
- if ( rb_intern( "nw_dst" ) == wildcard_id ) {
147
- wildcards |= OFPFW_NW_DST_ALL;
148
- }
149
- if ( rb_intern( "tp_src" ) == wildcard_id ) {
150
- wildcards |= OFPFW_TP_SRC;
151
- }
152
- if ( rb_intern( "tp_dst" ) == wildcard_id ) {
153
- wildcards |= OFPFW_TP_DST;
154
- }
155
- }
156
- set_match_from_packet( match, packet->in_port, wildcards, packet->data );
157
- }
158
- else {
159
- rb_raise( rb_eArgError, "Message is a mandatory option" );
160
- }
161
- return obj;
162
- }
163
-
164
-
165
- /*
166
- * Compare context of {Match} self with {Match} other.
167
- *
168
- * @example
169
- * def packet_in datapath_id, message
170
- * match = Match.new( :dl_type => 0x0800, :nw_src => "192.168.0.1" )
171
- * if match.compare( ExactMatch.from( message ) )
172
- * info "Received packet from 192.168.0.1"
173
- * end
174
- * end
175
- *
176
- * @return [Boolean] true if the {Match} match
177
- */
178
- static VALUE
179
- match_compare( VALUE self, VALUE other ) {
180
- return compare_match( get_match( self ), get_match( other ) ) ? Qtrue : Qfalse;
181
- }
182
-
183
-
184
- /*
185
- * Replaces context of {Match} self with {Match} other.
186
- *
187
- * @return [Match] self
188
- * the modified object instance.
189
- */
190
- static VALUE
191
- match_replace( VALUE self, VALUE other ) {
192
- memcpy( get_match( self ), get_match( other ), sizeof( struct ofp_match ) );
193
- return self;
194
- }
195
-
196
-
197
- /*
198
- * (see ActionEnqueue#to_s)
199
- */
200
- static VALUE
201
- match_to_s( VALUE self ) {
202
- char match_str[ 1024 ];
203
-
204
- match_to_string( get_match( self ), match_str, sizeof( match_str ) );
205
- return rb_str_new2( match_str );
206
- }
207
-
208
-
209
- /*
210
- * The wildcard field expressed as a 32-bit bitmap,
211
- *
212
- * @return [Number] the value of wildcards.
213
- */
214
- static VALUE
215
- match_wildcards( VALUE self ) {
216
- return UINT2NUM( ( get_match( self ) )->wildcards );
217
- }
218
-
219
-
220
- /*
221
- * @return [Number] the value of in_port.
222
- */
223
- static VALUE
224
- match_in_port( VALUE self ) {
225
- return UINT2NUM( ( get_match( self ) )->in_port );
226
- }
227
-
228
-
229
- static VALUE
230
- match_dl( VALUE self, uint8_t which ) {
231
- struct ofp_match *match;
232
- uint8_t *dl_addr;
233
-
234
- match = get_match( self );
235
- if ( which ) {
236
- dl_addr = match->dl_src;
237
- }
238
- else {
239
- dl_addr = match->dl_dst;
240
- }
241
- return rb_funcall( rb_eval_string( "Pio::Mac" ), rb_intern( "new" ), 1, ULL2NUM( mac_to_uint64( dl_addr ) ) );
242
- }
243
-
244
-
245
- /*
246
- * @return [Mac] the value of dl_src.
247
- */
248
- static VALUE
249
- match_dl_src( VALUE self ) {
250
- return match_dl( self, 1 );
251
- }
252
-
253
-
254
- /*
255
- * @return [Mac] the value of dl_dst.
256
- */
257
- static VALUE
258
- match_dl_dst( VALUE self ) {
259
- return match_dl( self, 0 );
260
- }
261
-
262
-
263
- /*
264
- * @return [Number] the value of dl_vlan.
265
- */
266
- static VALUE
267
- match_dl_vlan( VALUE self ) {
268
- return UINT2NUM( ( get_match( self ) )->dl_vlan );
269
- }
270
-
271
-
272
- /*
273
- * @return [Number] the value of dl_vlan_pcp.
274
- */
275
- static VALUE
276
- match_dl_vlan_pcp( VALUE self ) {
277
- return UINT2NUM( ( get_match( self ) )->dl_vlan_pcp );
278
- }
279
-
280
-
281
- /*
282
- * @return [Number] the value of dl_type.
283
- */
284
- static VALUE
285
- match_dl_type( VALUE self ) {
286
- return UINT2NUM( ( get_match( self ) )->dl_type );
287
- }
288
-
289
-
290
- /*
291
- * @return [Number] the value of nw_tos.
292
- */
293
- static VALUE
294
- match_nw_tos( VALUE self ) {
295
- return UINT2NUM( ( get_match( self ) )->nw_tos );
296
- }
297
-
298
-
299
- /*
300
- * @return [Number] the value of nw_proto.
301
- */
302
- static VALUE
303
- match_nw_proto( VALUE self ) {
304
- return UINT2NUM( ( get_match( self ) )->nw_proto );
305
- }
306
-
307
-
308
- static VALUE
309
- match_nw( VALUE self, uint8_t which ) {
310
- struct ofp_match *match;
311
- uint32_t nw_addr;
312
- uint32_t masklen;
313
-
314
- match = get_match( self );
315
- if ( which ) {
316
- nw_addr = match->nw_src;
317
- masklen = ( match->wildcards & OFPFW_NW_SRC_MASK ) >> OFPFW_NW_SRC_SHIFT;
318
- }
319
- else {
320
- nw_addr = match->nw_dst;
321
- masklen = ( match->wildcards & OFPFW_NW_DST_MASK ) >> OFPFW_NW_DST_SHIFT;
322
- }
323
- uint32_t prefixlen = masklen > 32 ? 0 : 32 - masklen;
324
- VALUE ipv4_addr = rb_funcall( rb_eval_string( "Pio::IPv4Address" ), rb_intern( "new" ), 1, UINT2NUM( nw_addr ) );
325
- return rb_funcall( ipv4_addr, rb_intern( "mask" ), 1, UINT2NUM( prefixlen ) );;
326
- }
327
-
328
-
329
- /*
330
- * An IPv4 source address in its numeric representation.
331
- *
332
- * @return [IP] the value of nw_src.
333
- */
334
- static VALUE
335
- match_nw_src( VALUE self ) {
336
- return match_nw( self, 1 );
337
- }
338
-
339
-
340
- /*
341
- * An IPv4 destination address in its numeric representation.
342
- *
343
- * @return [IP] the value of nw_dst.
344
- */
345
- static VALUE
346
- match_nw_dst( VALUE self ) {
347
- return match_nw( self, 0 );
348
- }
349
-
350
-
351
- /*
352
- * @return [Number] the value of tp_src.
353
- */
354
- static VALUE
355
- match_tp_src( VALUE self ) {
356
- return UINT2NUM( ( get_match( self ) )->tp_src );
357
- }
358
-
359
-
360
- /*
361
- * @return [Number] the value of tp_dst.
362
- */
363
- static VALUE
364
- match_tp_dst( VALUE self ) {
365
- return UINT2NUM( ( get_match( self ) )->tp_dst );
366
- }
367
-
368
-
369
- /*
370
- * Creates a {Match} instance which describe fields such as MAC addresses, IP
371
- * addresses, TCP/UDP ports of a flow to match against. An exact match
372
- * flow would match on all fields whereas don't care bits are wildcarded and
373
- * ignored.
374
- *
375
- * @overload initialize(options={})
376
- *
377
- * @example
378
- * Match.new(
379
- * :in_port => port_no,
380
- * :dl_src => "xx:xx:xx;xx:xx:xx",
381
- * :dl_dst => "xx:xx:xx:xx:xx:xx",
382
- * :dl_type => ethertype,
383
- * :dl_vlan => vlan,
384
- * :dl_vlan_pcp => priority,
385
- * :nw_tos => tos,
386
- * :nw_proto => proto,
387
- * :nw_src => ip_address/netmask,
388
- * :nw_dst => ip_address/netmask,
389
- * :tp_src => port,
390
- * :tp_dst => port,
391
- * )
392
- *
393
- * @param [Hash] options the options hash.
394
- *
395
- * @option options [Number] :in_port
396
- * the physical port number to match.
397
- *
398
- * @option options [String,Number,Mac] :dl_src
399
- * the source ethernet address to match specified either as 6
400
- * pairs of hexadecimal digits delimited by colon or as a
401
- * hexadecimal number or as a Mac object.
402
- * (eg. "00:11:22:33:44:55" or 0x001122334455 or Mac.new("00:11:22:33:44:55")).
403
- *
404
- * @option options [String,Number] :dl_dst
405
- * the destination ethernet address to match specified either as a
406
- * 6 pairs of hexadecimal digits delimited by colon or as a
407
- * hexadecimal number or as a Mac object.
408
- * (eg. "00:11:22:33:44:55" or 0x001122334455 or Mac.new("00:11:22:33:44:55")).
409
- *
410
- * @option options [Number] :dl_type
411
- * the Ethernet protocol type to match. Can be specified either as a decimal
412
- * or hexadecimal number. (eg 0x0800 to match IP packets, 0x08006 to match
413
- * ARP packets, 0x88cc for LLDP packets).
414
- *
415
- * @option options [Number] :dl_vlan
416
- * the IEEE 802.1q virtual VLAN tag to match specified as a 12-bit number
417
- * 0 to 4095 inclusive.
418
- *
419
- * @option options [Number] :dl_vlan_pcp
420
- * the IEEE 802.1q Priority Code Point (PCP) to match specified as a value of
421
- * 0 to 7 inclusive. A higher value indicates a higher priority frame.
422
- *
423
- * @option options [Number] :nw_tos
424
- * the IP ToS/DSCP field to match specified as a decimal number between 0 and
425
- * 255 inclusive.
426
- *
427
- * @option options [Number] :nw_proto
428
- * Depending on the dl_type the IP protocol type to match. (eg if dl_type
429
- * equals 0x0800 UDP packets can be match by setting nw_proto to 17.)
430
- * to match TCP packets). When dl_type = 0x0806 is set to arp it matches the
431
- * lower 8 bits of the ARP opcode.
432
- *
433
- * @option options [String] :nw_src
434
- * the IPv4 source address to match if dl_type is set to 0x0800.
435
- *
436
- * @option options [String] :nw_dst
437
- * the IPv4 destination address to match if dl_type is set to 0x0800.
438
- *
439
- * @option options [Number] :tp_src
440
- * the source TCP/UDP port number to match specified as a decimal number
441
- * between 0 and 65535 inclusive. The value dl_type and nw_proto must be set
442
- * to specify TCP or UDP.
443
- *
444
- * @option options [Number] :tp_dst
445
- * the destination TCP/UDP port number to match specified as a decimal number
446
- * between 0 and 65535 inclusive.
447
- *
448
- * @return [Match] self an object that encapsulates and wraps the +struct ofp_match+
449
- */
450
- static VALUE
451
- match_init( int argc, VALUE *argv, VALUE self ) {
452
- struct ofp_match *match;
453
- VALUE options;
454
-
455
- // Always clear the memory as the unused memory locations are
456
- // exposed to both the user and the OpenFlow controller.
457
- Data_Get_Struct( self, struct ofp_match, match );
458
- memset( match, 0, sizeof( *match ) );
459
-
460
- // Default matches all packets.
461
- match->wildcards = ( OFPFW_ALL & ~( OFPFW_NW_SRC_MASK | OFPFW_NW_DST_MASK ) )
462
- | OFPFW_NW_SRC_ALL | OFPFW_NW_DST_ALL;
463
-
464
- if ( rb_scan_args( argc, argv, "01", &options ) >= 1 ) {
465
- if ( options != Qnil ) {
466
- VALUE in_port = rb_hash_aref( options, ID2SYM( rb_intern( "in_port" ) ) );
467
- if ( in_port != Qnil ) {
468
- match->in_port = ( uint16_t ) NUM2UINT( in_port );
469
- match->wildcards &= ( uint32_t ) ~OFPFW_IN_PORT;
470
- }
471
-
472
- VALUE dl_src = rb_hash_aref( options, ID2SYM( rb_intern( "dl_src" ) ) );
473
- if ( dl_src != Qnil ) {
474
- VALUE dl_addr;
475
- if ( rb_obj_is_kind_of( dl_src, rb_eval_string( "Pio::Mac" ) ) ) {
476
- dl_addr = dl_src;
477
- }
478
- else {
479
- dl_addr = rb_funcall( rb_eval_string( "Pio::Mac" ), rb_intern( "new" ), 1, dl_src );
480
- }
481
- dl_addr_to_a( dl_addr, match->dl_src );
482
- match->wildcards &= ( uint32_t ) ~OFPFW_DL_SRC;
483
- }
484
-
485
- VALUE dl_dst = rb_hash_aref( options, ID2SYM( rb_intern( "dl_dst" ) ) );
486
- if ( dl_dst != Qnil ) {
487
- VALUE dl_addr;
488
- if ( rb_obj_is_kind_of( dl_dst, rb_eval_string( "Pio::Mac" ) ) ) {
489
- dl_addr = dl_dst;
490
- }
491
- else {
492
- dl_addr = rb_funcall( rb_eval_string( "Pio::Mac" ), rb_intern( "new" ), 1, dl_dst );
493
- }
494
- dl_addr_to_a( dl_addr, match->dl_dst );
495
- match->wildcards &= ( uint32_t ) ~OFPFW_DL_DST;
496
- }
497
-
498
- VALUE dl_type = rb_hash_aref( options, ID2SYM( rb_intern( "dl_type" ) ) );
499
- if ( dl_type != Qnil ) {
500
- match->dl_type = ( uint16_t ) NUM2UINT( dl_type );
501
- match->wildcards &= ( uint32_t ) ~OFPFW_DL_TYPE;
502
- }
503
-
504
- VALUE dl_vlan = rb_hash_aref( options, ID2SYM( rb_intern( "dl_vlan" ) ) );
505
- if ( dl_vlan != Qnil ) {
506
- match->dl_vlan = ( uint16_t ) NUM2UINT( dl_vlan );
507
- match->wildcards &= ( uint32_t ) ~OFPFW_DL_VLAN;
508
- }
509
-
510
- VALUE dl_vlan_pcp = rb_hash_aref( options, ID2SYM( rb_intern( "dl_vlan_pcp" ) ) );
511
- if ( dl_vlan_pcp != Qnil ) {
512
- match->dl_vlan_pcp = ( uint8_t ) NUM2UINT( dl_vlan_pcp );
513
- match->wildcards &= ( uint32_t ) ~OFPFW_DL_VLAN_PCP;
514
- }
515
-
516
- VALUE nw_tos = rb_hash_aref( options, ID2SYM( rb_intern( "nw_tos" ) ) );
517
- if ( nw_tos != Qnil ) {
518
- match->nw_tos = ( uint8_t ) NUM2UINT( nw_tos );
519
- match->wildcards &= ( uint32_t ) ~OFPFW_NW_TOS;
520
- }
521
-
522
- VALUE nw_proto = rb_hash_aref( options, ID2SYM( rb_intern( "nw_proto" ) ) );
523
- if ( nw_proto != Qnil ) {
524
- match->nw_proto = ( uint8_t ) NUM2UINT( nw_proto );
525
- match->wildcards &= ( uint32_t ) ~OFPFW_NW_PROTO;
526
- }
527
-
528
- VALUE nw_src = rb_hash_aref( options, ID2SYM( rb_intern( "nw_src" ) ) );
529
- if ( nw_src != Qnil ) {
530
- VALUE nw_addr = rb_funcall( rb_eval_string( "Pio::IPv4Address" ), rb_intern( "new" ), 1, nw_src );
531
- uint32_t prefixlen = ( uint32_t ) NUM2UINT( rb_funcall( nw_addr, rb_intern( "prefixlen" ), 0 ) );
532
- if ( prefixlen > 0 ) {
533
- match->nw_src = nw_addr_to_i( nw_addr );
534
- match->wildcards &= ( uint32_t ) ~OFPFW_NW_SRC_MASK;
535
- match->wildcards |= ( uint32_t ) ( ( 32 - prefixlen ) << OFPFW_NW_SRC_SHIFT );
536
- }
537
- }
538
-
539
- VALUE nw_dst = rb_hash_aref( options, ID2SYM( rb_intern( "nw_dst" ) ) );
540
- if ( nw_dst != Qnil ) {
541
- VALUE nw_addr = rb_funcall( rb_eval_string( "Pio::IPv4Address" ), rb_intern( "new" ), 1, nw_dst );
542
- uint32_t prefixlen = ( uint32_t ) NUM2UINT( rb_funcall( nw_addr, rb_intern( "prefixlen" ), 0 ) );
543
- if ( prefixlen > 0 ) {
544
- match->nw_dst = nw_addr_to_i( nw_addr );
545
- match->wildcards &= ( uint32_t ) ~OFPFW_NW_DST_MASK;
546
- match->wildcards |= ( uint32_t ) ( ( 32 - prefixlen ) << OFPFW_NW_DST_SHIFT );
547
- }
548
- }
549
-
550
- VALUE tp_src = rb_hash_aref( options, ID2SYM( rb_intern( "tp_src" ) ) );
551
- if ( tp_src != Qnil ) {
552
- match->tp_src = ( uint16_t ) NUM2UINT( tp_src );
553
- match->wildcards &= ( uint32_t ) ~OFPFW_TP_SRC;
554
- }
555
-
556
- VALUE tp_dst = rb_hash_aref( options, ID2SYM( rb_intern( "tp_dst" ) ) );
557
- if ( tp_dst != Qnil ) {
558
- match->tp_dst = ( uint16_t ) NUM2UINT( tp_dst );
559
- match->wildcards &= ( uint32_t ) ~OFPFW_TP_DST;
560
- }
561
- }
562
- }
563
- return self;
564
- }
565
-
566
-
567
- /*
568
- * Document-class: Trema::Match
569
- */
570
- void
571
- Init_match() {
572
- rb_require( "pio" );
573
- mTrema = rb_eval_string( "Trema" );
574
- cMatch = rb_define_class_under( mTrema, "Match", rb_cObject );
575
- rb_define_alloc_func( cMatch, match_alloc );
576
- rb_define_const( cMatch, "OFPFW_IN_PORT", INT2NUM( OFPFW_IN_PORT ) );
577
- rb_define_const( cMatch, "OFPFW_DL_VLAN", INT2NUM( OFPFW_DL_VLAN ) );
578
- rb_define_const( cMatch, "OFPFW_DL_SRC", INT2NUM( OFPFW_DL_SRC ) );
579
- rb_define_const( cMatch, "OFPFW_DL_DST", INT2NUM( OFPFW_DL_DST ) );
580
- rb_define_const( cMatch, "OFPFW_DL_TYPE", INT2NUM( OFPFW_DL_TYPE ) );
581
- rb_define_const( cMatch, "OFPFW_NW_PROTO", INT2NUM( OFPFW_NW_PROTO ) );
582
- rb_define_const( cMatch, "OFPFW_TP_SRC", INT2NUM( OFPFW_TP_SRC ) );
583
- rb_define_const( cMatch, "OFPFW_TP_DST", INT2NUM( OFPFW_TP_DST ) );
584
- rb_define_const( cMatch, "OFPFW_NW_SRC_SHIFT", INT2NUM( OFPFW_NW_SRC_SHIFT ) );
585
- rb_define_const( cMatch, "OFPFW_NW_SRC_BITS", INT2NUM( OFPFW_NW_SRC_BITS ) );
586
- rb_define_const( cMatch, "OFPFW_NW_SRC_MASK", INT2NUM( OFPFW_NW_SRC_MASK ) );
587
- rb_define_const( cMatch, "OFPFW_NW_SRC_ALL", INT2NUM( OFPFW_NW_SRC_ALL ) );
588
- rb_define_const( cMatch, "OFPFW_NW_DST_SHIFT", INT2NUM( OFPFW_NW_DST_SHIFT ) );
589
- rb_define_const( cMatch, "OFPFW_NW_DST_BITS", INT2NUM( OFPFW_NW_DST_BITS ) );
590
- rb_define_const( cMatch, "OFPFW_NW_DST_MASK", INT2NUM( OFPFW_NW_DST_MASK ) );
591
- rb_define_const( cMatch, "OFPFW_NW_DST_ALL", INT2NUM( OFPFW_NW_DST_ALL ) );
592
- rb_define_const( cMatch, "OFPFW_DL_VLAN_PCP", INT2NUM( OFPFW_DL_VLAN_PCP ) );
593
- rb_define_const( cMatch, "OFPFW_NW_TOS", INT2NUM( OFPFW_NW_TOS ) );
594
- rb_define_const( cMatch, "OFPFW_ALL", INT2NUM( OFPFW_ALL ) );
595
- rb_define_method( cMatch, "initialize", match_init, -1 );
596
- rb_define_method( cMatch, "compare", match_compare, 1 );
597
- rb_define_method( cMatch, "replace", match_replace, 1 );
598
- rb_define_method( cMatch, "to_s", match_to_s, 0 );
599
- rb_define_method( cMatch, "wildcards", match_wildcards, 0 );
600
- rb_define_method( cMatch, "in_port", match_in_port, 0 );
601
- rb_define_method( cMatch, "dl_src", match_dl_src, 0 );
602
- rb_define_method( cMatch, "dl_dst", match_dl_dst, 0 );
603
- rb_define_method( cMatch, "dl_vlan", match_dl_vlan, 0 );
604
- rb_define_method( cMatch, "dl_vlan_pcp", match_dl_vlan_pcp, 0 );
605
- rb_define_method( cMatch, "dl_type", match_dl_type, 0 );
606
- rb_define_method( cMatch, "nw_tos", match_nw_tos, 0 );
607
- rb_define_method( cMatch, "nw_proto", match_nw_proto, 0 );
608
- rb_define_method( cMatch, "nw_src", match_nw_src, 0 );
609
- rb_define_method( cMatch, "nw_dst", match_nw_dst, 0 );
610
- rb_define_method( cMatch, "tp_src", match_tp_src, 0 );
611
- rb_define_method( cMatch, "tp_dst", match_tp_dst, 0 );
612
- rb_define_singleton_method( cMatch, "from", match_from, -1 );
613
- }
614
-
615
-
616
- /*
617
- * Local variables:
618
- * c-basic-offset: 2
619
- * indent-tabs-mode: nil
620
- * End:
621
- */