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,46 +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/cli'
20
- require 'trema/dsl'
21
- require 'trema/util'
22
-
23
-
24
- module Trema
25
- module Command
26
- include Trema::Util
27
-
28
-
29
- def trema_send_packets(source_name, dest_name, options)
30
- source = find_host_by_name(source_name)
31
- fail "unknown host: #{ source_name }" if source.nil?
32
-
33
- dest = find_host_by_name(dest_name)
34
- fail "unknown host: #{ dest_name }" if dest.nil?
35
-
36
- Trema::Cli.new(source).send_packets(dest, options)
37
- end
38
- end
39
- end
40
-
41
-
42
- ### Local variables:
43
- ### mode: Ruby
44
- ### coding: utf-8
45
- ### indent-tabs-mode: nil
46
- ### End:
@@ -1,57 +0,0 @@
1
- #
2
- # trema shell command.
3
- #
4
- # Copyright (C) 2008-2013 NEC Corporation
5
- #
6
- # This program is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License, version 2, as
8
- # published by the Free Software Foundation.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along
16
- # with this program; if not, write to the Free Software Foundation, Inc.,
17
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- #
19
-
20
-
21
- require 'irb'
22
- require 'trema/util'
23
-
24
-
25
- include Trema::Util
26
-
27
-
28
- module Trema
29
- module Command
30
- def shell
31
- undef :kill
32
-
33
- require 'tempfile'
34
- require 'trema'
35
- require 'trema/shell'
36
- f = Tempfile.open('irbrc')
37
- f.print <<EOF
38
- include Trema::Shell
39
- ENV[ "TREMA_HOME" ] = Trema.home
40
- $config = Trema::DSL::Configuration.new
41
- $context = Trema::DSL::Context.new( $config )
42
- EOF
43
- f.close
44
- load f.path
45
- IRB.start
46
- ensure
47
- cleanup $config
48
- end
49
- end
50
- end
51
-
52
-
53
- ### Local variables:
54
- ### mode: Ruby
55
- ### coding: utf-8
56
- ### indent-tabs-mode: nil
57
- ### End:
@@ -1,65 +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/cli'
20
- require 'trema/util'
21
-
22
-
23
- module Trema
24
- module Command
25
- include Trema::Util
26
-
27
-
28
- def trema_show_stats(hostname, tx, rx)
29
- cli = get_cli(hostname)
30
-
31
- unless tx || rx
32
- show_tx_and_rx cli
33
- end
34
- cli.show_tx_stats if tx
35
- cli.show_rx_stats if rx
36
- end
37
-
38
-
39
- ############################################################################
40
- private
41
- ############################################################################
42
-
43
-
44
- def show_tx_and_rx(cli)
45
- puts 'Sent packets:'
46
- cli.show_tx_stats
47
- puts 'Received packets:'
48
- cli.show_rx_stats
49
- end
50
-
51
-
52
- def get_cli(name)
53
- host = find_host_by_name(name)
54
- exit_now! "unknown host: #{ name }" if host.nil?
55
- Trema::Cli.new host
56
- end
57
- end
58
- end
59
-
60
-
61
- ### Local variables:
62
- ### mode: Ruby
63
- ### coding: utf-8
64
- ### indent-tabs-mode: nil
65
- ### 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
- require 'trema/util'
20
-
21
-
22
- module Trema
23
- module Command
24
- include Trema::Util
25
-
26
-
27
- def trema_up(name)
28
- switch = find_switch_by_name(name)
29
- if switch
30
- switch.run
31
- else
32
- # TODO: support vlink
33
- fail "Unknown name: #{ name }"
34
- end
35
- end
36
- end
37
- end
38
-
39
-
40
- ### Local variables:
41
- ### mode: Ruby
42
- ### coding: utf-8
43
- ### indent-tabs-mode: nil
44
- ### End:
@@ -1,35 +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/version'
20
-
21
-
22
- module Trema
23
- module Command
24
- def trema_version
25
- puts "trema version #{ Trema::VERSION }"
26
- end
27
- end
28
- end
29
-
30
-
31
- ### Local variables:
32
- ### mode: Ruby
33
- ### coding: utf-8
34
- ### indent-tabs-mode: nil
35
- ### End:
@@ -1,36 +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 COMPAT_H
20
- #define COMPAT_H
21
-
22
-
23
- #ifndef RARRAY_LEN
24
- #define RARRAY_LEN( ary ) RARRAY( ary )->len
25
- #endif
26
-
27
-
28
- #endif // COMPAT_H
29
-
30
-
31
- /*
32
- * Local variables:
33
- * c-basic-offset: 2
34
- * indent-tabs-mode: nil
35
- * End:
36
- */
@@ -1,691 +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 "ruby.h"
20
- #include "action-common.h"
21
- #include "barrier-reply.h"
22
- #include "buffer.h"
23
- #include "controller.h"
24
- #include "default-logger.h"
25
- #include "features-reply.h"
26
- #include "flow-removed.h"
27
- #include "get-config-reply.h"
28
- #include "list-switches-reply.h"
29
- #include "openflow-error.h"
30
- #include "openflow.h"
31
- #include "packet-in.h"
32
- #include "port-status.h"
33
- #include "queue-get-config-reply.h"
34
- #include "rubysig.h"
35
- #include "stats-reply.h"
36
- #include "switch-disconnected.h"
37
- #include "trema.h"
38
- #include "vendor.h"
39
-
40
-
41
- extern VALUE mTrema;
42
- VALUE cController;
43
-
44
-
45
- static void
46
- handle_timer_event( void *self ) {
47
- if ( rb_respond_to( ( VALUE ) self, rb_intern( "handle_timer_event" ) ) ) {
48
- rb_funcall( ( VALUE ) self, rb_intern( "handle_timer_event" ), 0 );
49
- }
50
- }
51
-
52
-
53
- /*
54
- * @overload send_message(datapath_id, message)
55
- * Sends an OpenFlow message to the datapath.
56
- *
57
- * @example
58
- * send_message datapath_id, FeaturesRequest.new
59
- *
60
- * @param [Integer] datapath_id
61
- * the datapath to which a message is sent.
62
- * @param [Hello, EchoRequest, EchoReply, FeaturesRequest, SetConfig, GetConfigRequest, QueueGetConfigRequest, StatsRequest, BarrierRequest, PortMod, Vendor] message
63
- * the message to be sent.
64
- */
65
- static VALUE
66
- controller_send_message( VALUE self, VALUE datapath_id, VALUE message ) {
67
- buffer *buf;
68
- Data_Get_Struct( message, buffer, buf );
69
- send_openflow_message( NUM2ULL( datapath_id ), buf );
70
- return self;
71
- }
72
-
73
-
74
- static VALUE
75
- controller_send_list_switches_request( VALUE self ) {
76
- send_list_switches_request( ( void * ) self );
77
- return self;
78
- }
79
-
80
-
81
- static void
82
- append_action( openflow_actions *actions, VALUE action ) {
83
- if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::Enqueue" ) ) == Qtrue ) {
84
- uint32_t queue_id = ( uint32_t ) NUM2UINT( rb_funcall( action, rb_intern( "queue_id" ), 0 ) );
85
- uint16_t port_number = ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) );
86
- append_action_enqueue( actions, port_number, queue_id );
87
- }
88
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SendOutPort" ) ) == Qtrue ) {
89
- uint16_t port_number = ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) );
90
- uint16_t max_len = ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "max_len" ), 0 ) );
91
- append_action_output( actions, port_number, max_len );
92
- }
93
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthDstAddr" ) ) == Qtrue ) {
94
- uint8_t dl_dst[ OFP_ETH_ALEN ];
95
- uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_dst );
96
- append_action_set_dl_dst( actions, ptr );
97
- }
98
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthSrcAddr" ) ) == Qtrue ) {
99
- uint8_t dl_src[ OFP_ETH_ALEN ];
100
- uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_src );
101
- append_action_set_dl_src( actions, ptr );
102
- }
103
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpDstAddr" ) ) == Qtrue ) {
104
- append_action_set_nw_dst( actions, nw_addr_to_i( rb_funcall( action, rb_intern( "ip_address" ), 0 ) ) );
105
- }
106
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpSrcAddr" ) ) == Qtrue ) {
107
- append_action_set_nw_src( actions, nw_addr_to_i( rb_funcall( action, rb_intern( "ip_address" ), 0 ) ) );
108
- }
109
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpTos" ) ) == Qtrue ) {
110
- append_action_set_nw_tos( actions, ( uint8_t ) NUM2UINT( rb_funcall( action, rb_intern( "type_of_service" ), 0 ) ) );
111
- }
112
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetTransportDstPort" ) ) == Qtrue ) {
113
- append_action_set_tp_dst( actions, ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) ) );
114
- }
115
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetTransportSrcPort" ) ) == Qtrue ) {
116
- append_action_set_tp_src( actions, ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) ) );
117
- }
118
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetVlanPriority" ) ) == Qtrue ) {
119
- append_action_set_vlan_pcp( actions, ( uint8_t ) NUM2UINT( rb_funcall( action, rb_intern( "vlan_priority" ), 0 ) ) );
120
- }
121
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetVlanVid" ) ) == Qtrue ) {
122
- append_action_set_vlan_vid( actions, ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "vlan_id" ), 0 ) ) );
123
- }
124
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::StripVlanHeader" ) ) == Qtrue ) {
125
- append_action_strip_vlan( actions );
126
- }
127
- else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::VendorAction" ) ) == Qtrue ) {
128
- VALUE vendor_id = rb_funcall( action, rb_intern( "vendor_id" ), 0 );
129
- VALUE rbody = rb_funcall( action, rb_intern( "body" ), 0 );
130
- if ( rbody != Qnil ) {
131
- Check_Type( rbody, T_ARRAY );
132
- uint16_t length = ( uint16_t ) RARRAY_LEN( rbody );
133
- buffer *body = alloc_buffer_with_length( length );
134
- void *p = append_back_buffer( body, length );
135
- for ( int i = 0; i < length; i++ ) {
136
- ( ( uint8_t * ) p )[ i ] = ( uint8_t ) FIX2INT( RARRAY_PTR( rbody )[ i ] );
137
- }
138
- append_action_vendor( actions, ( uint32_t ) NUM2UINT( vendor_id ), body );
139
- free_buffer( body );
140
- }
141
- else {
142
- append_action_vendor( actions, ( uint32_t ) NUM2UINT( vendor_id ), NULL );
143
- }
144
- }
145
- else {
146
- rb_raise( rb_eTypeError, "actions argument must be an Array of Action objects" );
147
- }
148
- }
149
-
150
-
151
- static void
152
- form_actions( VALUE raction, openflow_actions *actions ) {
153
- if ( raction != Qnil ) {
154
- switch ( TYPE( raction ) ) {
155
- case T_ARRAY:
156
- {
157
- VALUE *each = RARRAY_PTR( raction );
158
- int i;
159
- for ( i = 0; i < RARRAY_LEN( raction ); i++ ) {
160
- append_action( actions, each[ i ] );
161
- }
162
- }
163
- break;
164
- case T_OBJECT:
165
- append_action( actions, raction );
166
- break;
167
- default:
168
- rb_raise( rb_eTypeError, "actions argument must be an Array or an Action object" );
169
- }
170
- }
171
- }
172
-
173
-
174
- static VALUE
175
- get_strict( int argc, VALUE *argv ) {
176
- VALUE datapath_id = Qnil;
177
- VALUE options = Qnil;
178
- VALUE strict = Qnil;
179
-
180
- rb_scan_args( argc, argv, "11", &datapath_id, &options );
181
- if ( options != Qnil ) {
182
- strict = rb_hash_aref( options, ID2SYM( rb_intern( "strict" ) ) );
183
- }
184
- return strict;
185
- }
186
-
187
-
188
- static VALUE
189
- controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self ) {
190
- VALUE datapath_id = Qnil;
191
- VALUE options = Qnil;
192
- rb_scan_args( argc, argv, "11", &datapath_id, &options );
193
-
194
- // Defaults
195
- struct ofp_match default_match;
196
- memset( &default_match, 0, sizeof( struct ofp_match ) );
197
- default_match.wildcards = OFPFW_ALL;
198
- uint32_t transaction_id;
199
- struct ofp_match *match = &default_match;
200
- uint64_t cookie;
201
- uint16_t idle_timeout = 0;
202
- uint16_t hard_timeout = 0;
203
- uint16_t priority = UINT16_MAX;
204
- uint32_t buffer_id = UINT32_MAX;
205
- uint16_t out_port = OFPP_NONE;
206
- uint16_t flags = OFPFF_SEND_FLOW_REM;
207
- openflow_actions *actions = create_actions();
208
-
209
- // Options
210
- if ( options != Qnil ) {
211
- VALUE opt_transaction_id = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) );
212
- if ( opt_transaction_id != Qnil ) {
213
- transaction_id = ( uint32_t ) NUM2ULONG( opt_transaction_id );
214
- }
215
- else {
216
- transaction_id = get_transaction_id();
217
- }
218
-
219
- VALUE opt_match = rb_hash_aref( options, ID2SYM( rb_intern( "match" ) ) );
220
- if ( opt_match != Qnil ) {
221
- Data_Get_Struct( opt_match, struct ofp_match, match );
222
- }
223
-
224
- VALUE opt_cookie = rb_hash_aref( options, ID2SYM( rb_intern( "cookie" ) ) );
225
- if ( opt_cookie != Qnil ) {
226
- cookie = NUM2ULL( opt_cookie );
227
- }
228
- else {
229
- cookie = get_cookie();
230
- }
231
-
232
- VALUE opt_idle_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "idle_timeout" ) ) );
233
- if ( opt_idle_timeout != Qnil ) {
234
- idle_timeout = ( uint16_t ) NUM2UINT( opt_idle_timeout );
235
- }
236
-
237
- VALUE opt_hard_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "hard_timeout" ) ) );
238
- if ( opt_hard_timeout != Qnil ) {
239
- hard_timeout = ( uint16_t ) NUM2UINT( opt_hard_timeout );
240
- }
241
-
242
- VALUE opt_priority = rb_hash_aref( options, ID2SYM( rb_intern( "priority" ) ) );
243
- if ( opt_priority != Qnil ) {
244
- priority = ( uint16_t ) NUM2UINT( opt_priority );
245
- }
246
-
247
- VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
248
- if ( opt_buffer_id != Qnil ) {
249
- buffer_id = ( uint32_t ) NUM2ULONG( opt_buffer_id );
250
- }
251
-
252
- VALUE opt_out_port = rb_hash_aref( options, ID2SYM( rb_intern( "out_port" ) ) );
253
- if ( opt_out_port != Qnil ) {
254
- out_port = ( uint16_t ) NUM2UINT( opt_out_port );
255
- }
256
-
257
- VALUE opt_send_flow_rem = rb_hash_aref( options, ID2SYM( rb_intern( "send_flow_rem" ) ) );
258
- if ( opt_send_flow_rem == Qfalse ) {
259
- flags &= ( uint16_t ) ~OFPFF_SEND_FLOW_REM;
260
- }
261
-
262
- VALUE opt_check_overlap = rb_hash_aref( options, ID2SYM( rb_intern( "check_overlap" ) ) );
263
- if ( opt_check_overlap != Qnil ) {
264
- flags |= OFPFF_CHECK_OVERLAP;
265
- }
266
-
267
- VALUE opt_emerg = rb_hash_aref( options, ID2SYM( rb_intern( "emerg" ) ) );
268
- if ( opt_emerg != Qnil ) {
269
- flags |= OFPFF_EMERG;
270
- }
271
-
272
- VALUE opt_actions = rb_hash_aref( options, ID2SYM( rb_intern( "actions" ) ) );
273
- if ( opt_actions != Qnil ) {
274
- form_actions( opt_actions, actions );
275
- }
276
- }
277
-
278
- buffer *flow_mod = create_flow_mod(
279
- transaction_id,
280
- *match,
281
- cookie,
282
- command,
283
- idle_timeout,
284
- hard_timeout,
285
- priority,
286
- buffer_id,
287
- out_port,
288
- flags,
289
- actions
290
- );
291
- send_openflow_message( NUM2ULL( datapath_id ), flow_mod );
292
-
293
- free_buffer( flow_mod );
294
- delete_actions( actions );
295
-
296
- return self;
297
- }
298
-
299
-
300
- /*
301
- * @overload send_flow_mod_add(datapath_id, options={})
302
- * Sends a flow_mod message to add a flow into the datapath.
303
- *
304
- * @example
305
- * def packet_in datapath_id, message
306
- * send_flow_mod_add datapath_id, :match => Match.from(message), :actions => SendOutPort.new(OFPP_FLOOD)
307
- * end
308
- *
309
- *
310
- * @param [Number] datapath_id
311
- * the datapath to which a message is sent.
312
- *
313
- * @param [Hash] options
314
- * the options to create a message with.
315
- *
316
- *
317
- * @option options [Number, nil] :transaction_id (nil)
318
- * Transaction ids, message sequence numbers matching requests to replies.
319
- * nil means automatically generate transaction ID.
320
- *
321
- * @option options [Match, nil] :match (nil)
322
- * A {Match} object describing the fields of the flow.
323
- *
324
- * @option options [Number] :idle_timeout (0)
325
- * The idle time in seconds before discarding.
326
- * Zero means flow never expires.
327
- *
328
- * @option options [Number] :cookie
329
- * An opaque issued identifier.
330
- *
331
- * @option options [Number] :hard_timeout (0)
332
- * The maximum time before discarding in seconds.
333
- * Zero means flow never expires.
334
- *
335
- * @option options [Number] :priority (0xffff)
336
- * The priority level of the flow entry.
337
- *
338
- * @option options [Number] :buffer_id (0xffffffff)
339
- * The buffer ID assigned by the datapath of a buffered packet to
340
- * apply the flow to. If 0xffffffff, no buffered packet is to be
341
- * applied to flow actions.
342
- *
343
- * @option options [Number] :out_port (0xffff)
344
- * If the option contains a value other than OFPP_NONE(0xffff),
345
- * it introduces a constraint when deleting flow entries.
346
- *
347
- * @option options [Boolean] :send_flow_rem (true)
348
- * If true, send a flow_removed message when the flow expires or
349
- * is deleted.
350
- *
351
- * @option options [Boolean] :check_overlap (false)
352
- * If true, check for overlapping entries first, i.e. if there are
353
- * conflicting entries with the same priority, the flow is not
354
- * added and the modification fails.
355
- *
356
- * @option options [Boolean] :emerg (false)
357
- * If true, the switch must consider this flow entry as an
358
- * emergency entry, and only use it for forwarding when
359
- * disconnected from the controller.
360
- *
361
- * @option options [SendOutPort, Array<SendOutPort>, nil] :actions (nil)
362
- * The sequence of actions specifying the actions to perform on
363
- * the flow's packets.
364
- */
365
- static VALUE
366
- controller_send_flow_mod_add( int argc, VALUE *argv, VALUE self ) {
367
- return controller_send_flow_mod( OFPFC_ADD, argc, argv, self );
368
- }
369
-
370
-
371
- /*
372
- * @overload send_flow_mod_modify(datapath, options={})
373
- * Sends a flow_mod message to either modify or modify strict a flow from datapath.
374
- * Both flow_mod modify and flow_mod modify strict commands would modify
375
- * matched flow actions. The strict option adds the flow priority to the
376
- * matched criteria. Accepts the same options as #send_flow_mod_add with the
377
- * following additional option.
378
- *
379
- * @option options [Symbol] :strict
380
- * If set to true modify_strict command is invoked otherwise the modify
381
- * command is invoked.
382
- */
383
- static VALUE
384
- controller_send_flow_mod_modify( int argc, VALUE *argv, VALUE self ) {
385
- uint16_t command = OFPFC_MODIFY;
386
-
387
- if ( get_strict( argc, argv ) == Qtrue ) {
388
- command = OFPFC_MODIFY_STRICT;
389
- }
390
- return controller_send_flow_mod( command, argc, argv, self );
391
- }
392
-
393
-
394
- /*
395
- * @overload send_flow_mod_delete(datapath_id, options={})
396
- * Sends a flow_mod_delete message to delete all matching flows.
397
- * Both flow_mod delete and flow_mod delete strict commands would delete matched flows.
398
- * The strict option adds the flow priority to the matched criteria.
399
- * Accepts the same options as #send_flow_mod_add with the following additional
400
- * option.
401
- *
402
- * @option options [Symbol] :strict
403
- * If set to true delete_strict command is invoked otherwise the delete
404
- * command is invoked.
405
- */
406
- static VALUE
407
- controller_send_flow_mod_delete( int argc, VALUE *argv, VALUE self ) {
408
- uint16_t command = OFPFC_DELETE;
409
-
410
- if ( get_strict( argc, argv ) == Qtrue ) {
411
- command = OFPFC_DELETE_STRICT;
412
- }
413
- return controller_send_flow_mod( command, argc, argv, self );
414
- }
415
-
416
-
417
- /*
418
- * @overload send_packet_out(datapath_id, options={})
419
- * Sends a packet_out message to have a packet processed by the datapath.
420
- *
421
- * @example
422
- * send_packet_out(
423
- * datapath_id,
424
- * :packet_in => message,
425
- * :actions => Trema::SendOutPort.new(port_no)
426
- * )
427
- *
428
- *
429
- * @param [Number] datapath_id
430
- * the datapath to which a message is sent.
431
- *
432
- * @param [Hash] options
433
- * the options to create a message with.
434
- *
435
- *
436
- * @option options [PacketIn] :packet_in (nil)
437
- * The {PacketIn} object received by packet_in handler. If this
438
- * option is not nil, :buffer_id, :data, and :in_port option is
439
- * set automatically according to the value of :packet_in.
440
- *
441
- * @option options [Number] :in_port (OFPP_NONE)
442
- * The port to use in flow table lookup when :actions send the packet
443
- * to the special OFPP_TABLE port.
444
- *
445
- * @option options [Number] :buffer_id (0xffffffff)
446
- * The buffer ID assigned by the datapath. If 0xffffffff, the
447
- * frame is not buffered, and the entire frame must be passed in
448
- * :data.
449
- *
450
- * @option options [String, nil] :data (nil)
451
- * The entire Ethernet frame. Should be of length 0 if buffer_id
452
- * is 0xffffffff, and should be of length >0 otherwise.
453
- *
454
- * @option options [Action, Array<Action>, nil] :actions (nil)
455
- * The sequence of actions specifying the actions to perform on
456
- * the frame.
457
- *
458
- * @option options [Boolean] :zero_padding (false)
459
- * If true, fill up to minimum ethernet frame size.
460
- */
461
- static VALUE
462
- controller_send_packet_out( int argc, VALUE *argv, VALUE self ) {
463
- VALUE datapath_id = Qnil;
464
- VALUE options = Qnil;
465
- rb_scan_args( argc, argv, "11", &datapath_id, &options );
466
-
467
- // Defaults.
468
- uint32_t buffer_id = UINT32_MAX;
469
- uint16_t in_port = OFPP_NONE;
470
- openflow_actions *actions = create_actions();
471
- const buffer *data = NULL;
472
- buffer *allocated_data = NULL;
473
- VALUE opt_zero_padding = Qnil;
474
-
475
- if ( options != Qnil ) {
476
- VALUE opt_message = rb_hash_aref( options, ID2SYM( rb_intern( "packet_in" ) ) );
477
- if ( opt_message != Qnil ) {
478
- packet_in *message;
479
- Data_Get_Struct( opt_message, packet_in, message );
480
-
481
- if ( NUM2ULL( datapath_id ) == message->datapath_id ) {
482
- buffer_id = message->buffer_id;
483
- in_port = message->in_port;
484
- }
485
- data = ( buffer_id == UINT32_MAX ? message->data : NULL );
486
- }
487
-
488
- VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
489
- if ( opt_buffer_id != Qnil ) {
490
- buffer_id = ( uint32_t ) NUM2ULONG( opt_buffer_id );
491
- }
492
-
493
- VALUE opt_in_port = rb_hash_aref( options, ID2SYM( rb_intern( "in_port" ) ) );
494
- if ( opt_in_port != Qnil ) {
495
- in_port = ( uint16_t ) NUM2UINT( opt_in_port );
496
- }
497
-
498
- VALUE opt_action = rb_hash_aref( options, ID2SYM( rb_intern( "actions" ) ) );
499
- if ( opt_action != Qnil ) {
500
- form_actions( opt_action, actions );
501
- }
502
-
503
- VALUE opt_data = rb_hash_aref( options, ID2SYM( rb_intern( "data" ) ) );
504
- if ( opt_data != Qnil ) {
505
- Check_Type( opt_data, T_STRING );
506
- uint16_t length = ( uint16_t ) RSTRING_LEN( opt_data );
507
- allocated_data = alloc_buffer_with_length( length );
508
- memcpy( append_back_buffer( allocated_data, length ), RSTRING_PTR( opt_data ), length );
509
- data = allocated_data;
510
- }
511
-
512
- opt_zero_padding = rb_hash_aref( options, ID2SYM( rb_intern( "zero_padding" ) ) );
513
- if ( opt_zero_padding != Qnil ) {
514
- if ( TYPE( opt_zero_padding ) != T_TRUE && TYPE( opt_zero_padding ) != T_FALSE ) {
515
- rb_raise( rb_eTypeError, ":zero_padding must be true or false" );
516
- }
517
- }
518
- }
519
-
520
- if ( data != NULL && data->length + ETH_FCS_LENGTH < ETH_MINIMUM_LENGTH &&
521
- opt_zero_padding != Qnil && TYPE( opt_zero_padding ) == T_TRUE ) {
522
- if ( allocated_data == NULL ) {
523
- allocated_data = duplicate_buffer( data );
524
- data = allocated_data;
525
- }
526
- fill_ether_padding( allocated_data );
527
- }
528
-
529
- buffer *packet_out = create_packet_out(
530
- get_transaction_id(),
531
- buffer_id,
532
- in_port,
533
- actions,
534
- data
535
- );
536
- send_openflow_message( NUM2ULL( datapath_id ), packet_out );
537
-
538
- if ( allocated_data != NULL ) {
539
- free_buffer( allocated_data );
540
- }
541
- free_buffer( packet_out );
542
- delete_actions( actions );
543
- return self;
544
- }
545
-
546
-
547
- /*
548
- * Starts this controller. Usually you do not need to invoke
549
- * explicitly, because this is called implicitly by "trema run"
550
- * command.
551
- */
552
- static VALUE
553
- controller_run( VALUE self ) {
554
- setenv( "TREMA_HOME", RSTRING_PTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
555
-
556
- VALUE name = rb_funcall( self, rb_intern( "name" ), 0 );
557
- rb_gv_set( "$PROGRAM_NAME", name );
558
-
559
- int argc = 3;
560
- char **argv = xmalloc( sizeof( char * ) * ( uint32_t ) ( argc + 1 ) );
561
- argv[ 0 ] = RSTRING_PTR( name );
562
- argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
563
- argv[ 2 ] = RSTRING_PTR( name );
564
- argv[ 3 ] = NULL;
565
- init_trema( &argc, &argv );
566
- xfree( argv );
567
-
568
- set_switch_ready_handler( handle_switch_ready, ( void * ) self );
569
- set_features_reply_handler( handle_features_reply, ( void * ) self );
570
- set_packet_in_handler( handle_packet_in, ( void * ) self );
571
- set_flow_removed_handler( handle_flow_removed, ( void * ) self );
572
- set_switch_disconnected_handler( handle_switch_disconnected, ( void * ) self );
573
- set_port_status_handler( handle_port_status, ( void * ) self );
574
- set_stats_reply_handler( handle_stats_reply, ( void * ) self );
575
- set_error_handler( handle_openflow_error, ( void * ) self );
576
- set_get_config_reply_handler( handle_get_config_reply, ( void * ) self );
577
- set_barrier_reply_handler( handle_barrier_reply, ( void * ) self );
578
- set_vendor_handler( handle_vendor, ( void * ) self );
579
- set_queue_get_config_reply_handler( handle_queue_get_config_reply, ( void * ) self );
580
- set_list_switches_reply_handler( handle_list_switches_reply );
581
-
582
- struct itimerspec interval;
583
- interval.it_interval.tv_sec = 1;
584
- interval.it_interval.tv_nsec = 0;
585
- interval.it_value.tv_sec = 0;
586
- interval.it_value.tv_nsec = 0;
587
- add_timer_event_callback( &interval, handle_timer_event, ( void * ) self );
588
-
589
- if ( rb_respond_to( self, rb_intern( "start" ) ) ) {
590
- rb_funcall( self, rb_intern( "start" ), 0 );
591
- }
592
-
593
- rb_funcall( self, rb_intern( "start_trema" ), 0 );
594
-
595
- return self;
596
- }
597
-
598
-
599
- /*
600
- * @overload shutdown!
601
- * In the context of trema framework stops this controller and its applications.
602
- */
603
- static VALUE
604
- controller_shutdown( VALUE self ) {
605
- stop_trema();
606
- return self;
607
- }
608
-
609
-
610
- static void
611
- thread_pass( void *user_data ) {
612
- UNUSED( user_data );
613
- CHECK_INTS;
614
- rb_funcall( rb_cThread, rb_intern( "pass" ), 0 );
615
- }
616
-
617
-
618
- /*
619
- * In the context of trema framework invokes the scheduler to start its applications.
620
- */
621
- static VALUE
622
- controller_start_trema( VALUE self ) {
623
- struct itimerspec interval;
624
- interval.it_interval.tv_sec = 0;
625
- interval.it_interval.tv_nsec = 1000000;
626
- interval.it_value.tv_sec = 0;
627
- interval.it_value.tv_nsec = 0;
628
- add_timer_event_callback( &interval, thread_pass, NULL );
629
-
630
- start_trema();
631
-
632
- return self;
633
- }
634
-
635
-
636
- /*
637
- * Document-class: Trema::Controller
638
- */
639
- void
640
- Init_controller() {
641
- rb_require( "trema/enqueue" );
642
- rb_require( "trema/send-out-port" );
643
- rb_require( "trema/set-eth-dst-addr" );
644
- rb_require( "trema/set-eth-src-addr" );
645
- rb_require( "trema/set-ip-dst-addr" );
646
- rb_require( "trema/set-ip-src-addr" );
647
- rb_require( "trema/set-ip-tos" );
648
- rb_require( "trema/set-transport-dst-port" );
649
- rb_require( "trema/set-transport-src-port" );
650
- rb_require( "trema/set-vlan-priority" );
651
- rb_require( "trema/set-vlan-vid" );
652
- rb_require( "trema/strip-vlan-header" );
653
- rb_require( "trema/vendor-action" );
654
-
655
- rb_require( "trema/app" );
656
-
657
- VALUE cApp = rb_eval_string( "Trema::App" );
658
- mTrema = rb_eval_string( "Trema" );
659
- cController = rb_define_class_under( mTrema, "Controller", cApp );
660
-
661
- rb_define_const( cController, "OFPP_MAX", INT2NUM( OFPP_MAX ) );
662
- rb_define_const( cController, "OFPP_IN_PORT", INT2NUM( OFPP_IN_PORT ) );
663
- rb_define_const( cController, "OFPP_TABLE", INT2NUM( OFPP_TABLE ) );
664
- rb_define_const( cController, "OFPP_NORMAL", INT2NUM( OFPP_NORMAL ) );
665
- rb_define_const( cController, "OFPP_FLOOD", INT2NUM( OFPP_FLOOD ) );
666
- rb_define_const( cController, "OFPP_ALL", INT2NUM( OFPP_ALL ) );
667
- rb_define_const( cController, "OFPP_CONTROLLER", INT2NUM( OFPP_CONTROLLER ) );
668
- rb_define_const( cController, "OFPP_LOCAL", INT2NUM( OFPP_LOCAL ) );
669
- rb_define_const( cController, "OFPP_NONE", INT2NUM( OFPP_NONE ) );
670
-
671
- rb_define_method( cController, "send_message", controller_send_message, 2 );
672
- rb_define_method( cController, "send_list_switches_request", controller_send_list_switches_request, 0 );
673
- rb_define_method( cController, "send_flow_mod_add", controller_send_flow_mod_add, -1 );
674
- rb_define_method( cController, "send_flow_mod_modify", controller_send_flow_mod_modify, -1 );
675
- rb_define_method( cController, "send_flow_mod_delete", controller_send_flow_mod_delete, -1 );
676
- rb_define_method( cController, "send_packet_out", controller_send_packet_out, -1 );
677
-
678
- rb_define_method( cController, "run!", controller_run, 0 );
679
- rb_define_method( cController, "shutdown!", controller_shutdown, 0 );
680
- rb_define_private_method( cController, "start_trema", controller_start_trema, 0 );
681
-
682
- rb_require( "trema/controller" );
683
- }
684
-
685
-
686
- /*
687
- * Local variables:
688
- * c-basic-offset: 2
689
- * indent-tabs-mode: nil
690
- * End:
691
- */