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,51 +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 OPENFLOW_ERROR_H
20
- #define OPENFLOW_ERROR_H
21
-
22
-
23
- #include "ruby.h"
24
- #include "trema.h"
25
-
26
-
27
- extern VALUE cOpenflowError;
28
-
29
-
30
- void Init_openflow_error( void );
31
-
32
-
33
- void handle_openflow_error(
34
- uint64_t datapath_id,
35
- uint32_t transaction_id,
36
- uint16_t type,
37
- uint16_t code,
38
- const buffer *body,
39
- void *user_data
40
- );
41
-
42
-
43
- #endif // OPENFLOW_ERROR_H
44
-
45
-
46
- /*
47
- * Local variables:
48
- * c-basic-offset: 2
49
- * indent-tabs-mode: nil
50
- * End:
51
- */
@@ -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/network-component'
20
-
21
-
22
- module Trema
23
- #
24
- # Keeps a list of {HardwareSwitch} and {OpenVswitch}
25
- #
26
- class OpenflowSwitch < NetworkComponent
27
- end
28
- end
29
-
30
-
31
- ### Local variables:
32
- ### mode: Ruby
33
- ### coding: utf-8-unix
34
- ### indent-tabs-mode: nil
35
- ### End:
@@ -1,75 +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
- module Trema
20
- class OrderedHash
21
- attr_reader :keys
22
-
23
-
24
- def initialize
25
- @keys = Array.new
26
- @content = Hash.new
27
- end
28
-
29
-
30
- def size
31
- @content.size
32
- end
33
-
34
-
35
- def [](key)
36
- @content[ key]
37
- end
38
-
39
-
40
- def []=(key, value)
41
- @content[ key] = value
42
- unless @keys.include?(key)
43
- @keys << key
44
- end
45
- end
46
-
47
-
48
- def values
49
- @keys.map do | each |
50
- @content[ each]
51
- end
52
- end
53
-
54
-
55
- def clear
56
- @keys.clear
57
- @content.clear
58
- self
59
- end
60
-
61
-
62
- def each(&block)
63
- @keys.each do | each |
64
- block.call each, @content[ each]
65
- end
66
- end
67
- end
68
- end
69
-
70
-
71
- ### Local variables:
72
- ### mode: Ruby
73
- ### coding: utf-8
74
- ### indent-tabs-mode: nil
75
- ### End:
@@ -1,1365 +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 "buffer.h"
21
- #include "ruby.h"
22
- #include "trema.h"
23
-
24
-
25
- extern VALUE mTrema;
26
- VALUE cPacketIn;
27
-
28
-
29
- #define PACKET_IN_RETURN_MAC( packet_member ) \
30
- { \
31
- VALUE ret = ULL2NUM( mac_to_uint64( get_packet_in_info( self )->packet_member ) ); \
32
- return rb_funcall( rb_eval_string( "Pio::Mac" ), rb_intern( "new" ), 1, ret ); \
33
- }
34
-
35
- #define PACKET_IN_RETURN_IP( packet_member ) \
36
- { \
37
- VALUE ret = ULONG2NUM( get_packet_in_info( self )->packet_member ); \
38
- return rb_funcall( rb_eval_string( "Pio::IPv4Address" ), rb_intern( "new" ), 1, ret ); \
39
- }
40
-
41
- #define PACKET_IN_RETURN_NUM( flag, func, packet_member ) \
42
- { \
43
- if ( get_packet_in_info( self )->format & flag ) { \
44
- return func( get_packet_in_info( self )->packet_member ); \
45
- } \
46
- else { \
47
- return Qnil; \
48
- } \
49
- }
50
-
51
-
52
- typedef struct rb_packet_in {
53
- packet_in packet_in;
54
- buffer *data;
55
- } rb_packet_in;
56
-
57
-
58
- static void
59
- packet_in_free( rb_packet_in *_packet_in ) {
60
- free_buffer( _packet_in->data );
61
- xfree( _packet_in );
62
- }
63
-
64
-
65
- static VALUE
66
- packet_in_alloc( VALUE klass ) {
67
- rb_packet_in *_packet_in = xmalloc( sizeof( rb_packet_in ) );
68
- memset( &_packet_in->packet_in, 0, sizeof( packet_in ) );
69
- _packet_in->data = alloc_buffer_with_length( 1 );
70
- parse_packet( _packet_in->data );
71
- _packet_in->packet_in.data = _packet_in->data;
72
- return Data_Wrap_Struct( klass, 0, packet_in_free, _packet_in );
73
- }
74
-
75
-
76
- static VALUE
77
- packet_in_init_copy( VALUE self, VALUE orig ) {
78
- if ( self == orig ) {
79
- return self;
80
- }
81
-
82
- rb_packet_in *self_pin, *orig_pin;
83
- Data_Get_Struct( self, rb_packet_in, self_pin );
84
- Data_Get_Struct( self, rb_packet_in, orig_pin );
85
-
86
- memcpy( &self_pin->packet_in, &orig_pin->packet_in, sizeof( packet_in ) );
87
- free_buffer( self_pin->data );
88
- self_pin->data = duplicate_buffer( orig_pin->data );
89
- parse_packet( self_pin->data );
90
- self_pin->packet_in.data = self_pin->data;
91
-
92
- return self;
93
- }
94
-
95
-
96
- static packet_in *
97
- get_packet_in( VALUE self ) {
98
- rb_packet_in *cpacket;
99
- Data_Get_Struct( self, rb_packet_in, cpacket );
100
- return &cpacket->packet_in;
101
- }
102
-
103
-
104
- static packet_info *
105
- get_packet_in_info( VALUE self ) {
106
- rb_packet_in *cpacket;
107
- Data_Get_Struct( self, rb_packet_in, cpacket );
108
- return ( packet_info * ) cpacket->data->user_data;
109
- }
110
-
111
-
112
- /*
113
- * Message originator identifier.
114
- *
115
- * @return [Number] the value of datapath_id.
116
- */
117
- static VALUE
118
- packet_in_datapath_id( VALUE self ) {
119
- return ULL2NUM( get_packet_in( self )->datapath_id );
120
- }
121
-
122
-
123
- /*
124
- * For this asynchronous message the transaction_id is set to zero.
125
- *
126
- * @return [Number] the value of transaction_id.
127
- */
128
- static VALUE
129
- packet_in_transaction_id( VALUE self ) {
130
- return ULONG2NUM( get_packet_in( self )->transaction_id );
131
- }
132
-
133
-
134
- /*
135
- * Buffer id value signifies if the entire frame (packet is not buffered) or
136
- * portion of it (packet is buffered) is included in the data field of
137
- * this +OFPT_PACKET_IN+ message.
138
- *
139
- * @return [Number] the value of buffer id.
140
- */
141
- static VALUE
142
- packet_in_buffer_id( VALUE self ) {
143
- return ULONG2NUM( get_packet_in( self )->buffer_id );
144
- }
145
-
146
-
147
- /*
148
- * A buffer_id value either than +UINT32_MAX+ marks the packet_in as buffered.
149
- *
150
- * @return [Boolean] whether the packet_in is buffered or not.
151
- */
152
- static VALUE
153
- packet_in_is_buffered( VALUE self ) {
154
- if ( get_packet_in( self )->buffer_id == UINT32_MAX ) {
155
- return Qfalse;
156
- }
157
- else {
158
- return Qtrue;
159
- }
160
- }
161
-
162
-
163
- /*
164
- * The port the frame was received.
165
- *
166
- * @return [Number] the value of in_port.
167
- */
168
- static VALUE
169
- packet_in_in_port( VALUE self ) {
170
- return UINT2NUM( get_packet_in( self )->in_port );
171
- }
172
-
173
-
174
- /*
175
- * The full length of the received frame.
176
- *
177
- * @return [Number] the value of total_len.
178
- */
179
- static VALUE
180
- packet_in_total_len( VALUE self ) {
181
- return UINT2NUM( get_packet_in( self )->total_len );
182
- }
183
-
184
-
185
- /*
186
- * A String that holds the entire or portion of the received frame.
187
- * Length of data, total_len - 20 bytes.
188
- *
189
- * @return [String] the value of data.
190
- */
191
- static VALUE
192
- packet_in_data( VALUE self ) {
193
- const buffer *buf = get_packet_in( self )->data;
194
- return rb_str_new( buf->data, ( long ) buf->length );
195
- }
196
-
197
-
198
- /*
199
- * The reason why the +OFPT_PACKET_IN+ message was sent.
200
- *
201
- * @return [Number] the value of reason.
202
- */
203
- static VALUE
204
- packet_in_reason( VALUE self ) {
205
- return UINT2NUM( ( unsigned int ) get_packet_in( self )->reason );
206
- }
207
-
208
-
209
- /*
210
- * The source MAC address.
211
- *
212
- * @return [Mac] the value of source MAC address as a Mac object.
213
- */
214
- static VALUE
215
- packet_in_macsa( VALUE self ) {
216
- PACKET_IN_RETURN_MAC( eth_macsa );
217
- }
218
-
219
-
220
- /*
221
- * The destination MAC address.
222
- *
223
- * @return [Mac] the value of destination MAC address as a
224
- * Trema::MAC object.
225
- */
226
- static VALUE
227
- packet_in_macda( VALUE self ) {
228
- PACKET_IN_RETURN_MAC( eth_macda );
229
- }
230
-
231
-
232
- /*
233
- * The ethernet type.
234
- *
235
- * @return [Integer] the value of ethernet type.
236
- */
237
- static VALUE
238
- packet_in_eth_type( VALUE self ) {
239
- return UINT2NUM( get_packet_in_info( self )->eth_type );
240
- }
241
-
242
-
243
- /*
244
- * Is it an IEEE 802.1q packet?
245
- *
246
- * @return [Boolean] whether the packet is an IEEE 802.1q or not.
247
- */
248
- static VALUE
249
- packet_in_is_vtag( VALUE self ) {
250
- if ( ( get_packet_in_info( self )->format & ETH_8021Q ) ) {
251
- return Qtrue;
252
- }
253
- else {
254
- return Qfalse;
255
- }
256
- }
257
-
258
-
259
- /*
260
- * The vlan tag protocol identifier (tpid).
261
- *
262
- * @return [Integer] the value of the vlan tag protocol identifier.
263
- */
264
- static VALUE
265
- packet_in_vlan_tpid( VALUE self ) {
266
- PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_tpid );
267
- }
268
-
269
-
270
- /*
271
- * The vlan tag control identifier (tci).
272
- *
273
- * @return [Integer] the value of the vlan tag control identifier.
274
- */
275
- static VALUE
276
- packet_in_vlan_tci( VALUE self ) {
277
- PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_tci );
278
- }
279
-
280
-
281
- /*
282
- * The vlan priority.
283
- *
284
- * @return [Integer] the value of the vlan priority.
285
- */
286
- static VALUE
287
- packet_in_vlan_prio( VALUE self ) {
288
- PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_prio );
289
- }
290
-
291
-
292
- /*
293
- * The vlan canonical format indicator (cfi).
294
- *
295
- * @return [Integer] the value of the vlan canonical format indicator.
296
- */
297
- static VALUE
298
- packet_in_vlan_cfi( VALUE self ) {
299
- PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_cfi );
300
- }
301
-
302
-
303
- /*
304
- * The vlan identifier.
305
- *
306
- * @return [Integer] the value of the vlan identifier.
307
- */
308
- static VALUE
309
- packet_in_vlan_vid( VALUE self ) {
310
- PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_vid );
311
- }
312
-
313
-
314
- /*
315
- * Is it an ARP packet?
316
- *
317
- * @return [Boolean] whether the packet is an ARP packet or not.
318
- */
319
- static VALUE
320
- packet_in_is_arp( VALUE self ) {
321
- if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
322
- return Qtrue;
323
- }
324
- else {
325
- return Qfalse;
326
- }
327
- }
328
-
329
-
330
- /*
331
- * Is it an ARP request packet?
332
- *
333
- * @return [Boolean] whether the packet is an ARP request packet or not.
334
- */
335
- static VALUE
336
- packet_in_is_arp_request( VALUE self ) {
337
- if ( packet_type_arp_request( get_packet_in( self )->data ) ) {
338
- return Qtrue;
339
- }
340
- else {
341
- return Qfalse;
342
- }
343
- }
344
-
345
-
346
- /*
347
- * Is it an ARP reply packet?
348
- *
349
- * @return [Boolean] whether the packet is an ARP reply packet or not.
350
- */
351
- static VALUE
352
- packet_in_is_arp_reply( VALUE self ) {
353
- if ( packet_type_arp_reply( get_packet_in( self )->data ) ) {
354
- return Qtrue;
355
- }
356
- else {
357
- return Qfalse;
358
- }
359
- }
360
-
361
-
362
- /*
363
- * The ARP operation code.
364
- *
365
- * @return [Integer] the value of the ARP opcode field.
366
- */
367
- static VALUE
368
- packet_in_arp_oper( VALUE self ) {
369
- PACKET_IN_RETURN_NUM( NW_ARP, UINT2NUM, arp_ar_op );
370
- }
371
-
372
-
373
- /*
374
- * The ARP source hardware address of a packet.
375
- *
376
- * @return [Mac, nil]
377
- * the value of the ARP source hardware address as a Mac object or nil
378
- * if packet not an ARP.
379
- */
380
- static VALUE
381
- packet_in_arp_sha( VALUE self ) {
382
- if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
383
- PACKET_IN_RETURN_MAC( arp_sha );
384
- }
385
- else {
386
- return Qnil;
387
- }
388
- }
389
-
390
-
391
- /*
392
- * The ARP source protocol address of a packet.
393
- *
394
- * @return [Pio::IPv4Address, nil]
395
- * the value of ARP source protocol address as a Pio::IPv4Address object or nil if
396
- * packet is not an ARP.
397
- */
398
- static VALUE
399
- packet_in_arp_spa( VALUE self ) {
400
- if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
401
- PACKET_IN_RETURN_IP( arp_spa );
402
- }
403
- else {
404
- return Qnil;
405
- }
406
- }
407
-
408
-
409
- /*
410
- * The ARP target hardware address of a packet.
411
- *
412
- * @return [Mac]
413
- * the value of ARP target hardware address as a Mac object or nil if
414
- * packet is not an ARP.
415
- */
416
- static VALUE
417
- packet_in_arp_tha( VALUE self ) {
418
- if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
419
- PACKET_IN_RETURN_MAC( arp_tha );
420
- }
421
- else {
422
- return Qnil;
423
- }
424
- }
425
-
426
-
427
- /*
428
- * The ARP target protocol address of a packet.
429
- *
430
- * @return [Pio::IPv4Address]
431
- * the value of ARP target protocol address as a Pio::IPv4Address object or nil if
432
- * packet is not an ARP.
433
- */
434
- static VALUE
435
- packet_in_arp_tpa( VALUE self ) {
436
- if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
437
- PACKET_IN_RETURN_IP( arp_tpa );
438
- }
439
- else {
440
- return Qnil;
441
- }
442
- }
443
-
444
-
445
- /*
446
- * Is it an RARP packet?
447
- *
448
- * @return [Boolean] whether the packet is an RARP packet or not.
449
- */
450
- static VALUE
451
- packet_in_is_rarp( VALUE self ) {
452
- if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
453
- return Qtrue;
454
- }
455
- else {
456
- return Qfalse;
457
- }
458
- }
459
-
460
-
461
- /*
462
- * Is it an RARP request packet?
463
- *
464
- * @return [Boolean] whether the packet is an RARP request packet or not.
465
- */
466
- static VALUE
467
- packet_in_is_rarp_request( VALUE self ) {
468
- if ( packet_type_rarp_request( get_packet_in( self )->data ) ) {
469
- return Qtrue;
470
- }
471
- else {
472
- return Qfalse;
473
- }
474
- }
475
-
476
-
477
- /*
478
- * Is it an RARP reply packet?
479
- *
480
- * @return [Boolean] whether the packet is an RARP reply packet or not.
481
- */
482
- static VALUE
483
- packet_in_is_rarp_reply( VALUE self ) {
484
- if ( packet_type_rarp_reply( get_packet_in( self )->data ) ) {
485
- return Qtrue;
486
- }
487
- else {
488
- return Qfalse;
489
- }
490
- }
491
-
492
-
493
- /*
494
- * The RARP operation code.
495
- *
496
- * @return [Integer] the value of the RARP opcode field.
497
- */
498
- static VALUE
499
- packet_in_rarp_oper( VALUE self ) {
500
- PACKET_IN_RETURN_NUM( NW_RARP, UINT2NUM, arp_ar_op );
501
- }
502
-
503
-
504
- /*
505
- * The RARP source hardware address of a packet.
506
- *
507
- * @return [Mac, nil]
508
- * the value of the RARP source hardware address as a Mac object or nil
509
- * if packet not an RARP.
510
- */
511
- static VALUE
512
- packet_in_rarp_sha( VALUE self ) {
513
- if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
514
- PACKET_IN_RETURN_MAC( arp_sha );
515
- }
516
- else {
517
- return Qnil;
518
- }
519
- }
520
-
521
-
522
- /*
523
- * The RARP source protocol address of a packet.
524
- *
525
- * @return [Pio::IPv4Address, nil]
526
- * the value of RARP source protocol address as a Pio::IPv4Address object or nil if
527
- * packet is not an RARP.
528
- */
529
- static VALUE
530
- packet_in_rarp_spa( VALUE self ) {
531
- if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
532
- PACKET_IN_RETURN_IP( arp_spa );
533
- }
534
- else {
535
- return Qnil;
536
- }
537
- }
538
-
539
-
540
- /*
541
- * The RARP target hardware address of a packet.
542
- *
543
- * @return [Mac]
544
- * the value of RARP target hardware address as a Mac object or nil if
545
- * packet is not an RARP.
546
- */
547
- static VALUE
548
- packet_in_rarp_tha( VALUE self ) {
549
- if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
550
- PACKET_IN_RETURN_MAC( arp_tha );
551
- }
552
- else {
553
- return Qnil;
554
- }
555
- }
556
-
557
-
558
- /*
559
- * The ARP target protocol address of a packet.
560
- *
561
- * @return [Pio::IPv4Address]
562
- * the value of RARP target protocol address as a Pio::IPv4Address object or nil if
563
- * packet is not an RARP.
564
- */
565
- static VALUE
566
- packet_in_rarp_tpa( VALUE self ) {
567
- if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
568
- PACKET_IN_RETURN_IP( arp_tpa );
569
- }
570
- else {
571
- return Qnil;
572
- }
573
- }
574
-
575
-
576
- /*
577
- * Is it an IPv4 packet?
578
- *
579
- * @return [Boolean] whether the packet is an IPv4 packet or not.
580
- */
581
- static VALUE
582
- packet_in_is_ipv4( VALUE self ) {
583
- if ( ( get_packet_in_info( self )->format & NW_IPV4 ) ) {
584
- return Qtrue;
585
- }
586
- else {
587
- return Qfalse;
588
- }
589
- }
590
-
591
-
592
- /*
593
- * The IPv4 version number (version).
594
- *
595
- * @return [Integer] the value of IPv4 version number.
596
- */
597
- static VALUE
598
- packet_in_ipv4_version( VALUE self ) {
599
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_version );
600
- }
601
-
602
-
603
- /*
604
- * The IPv4 internet header length (ihl).
605
- *
606
- * @return [Integer] the value of IPv4 internet header length.
607
- */
608
- static VALUE
609
- packet_in_ipv4_ihl( VALUE self ) {
610
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_ihl );
611
- }
612
-
613
-
614
- /*
615
- * The IPv4 type of service (tos).
616
- *
617
- * @return [Integer] the value of IPv4 type of service.
618
- */
619
- static VALUE
620
- packet_in_ipv4_tos( VALUE self ) {
621
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_tos );
622
- }
623
-
624
-
625
- /*
626
- * The IPv4 total length, the length of the datagram.
627
- *
628
- * @return [Integer] the value of IPv4 total length.
629
- */
630
- static VALUE
631
- packet_in_ipv4_tot_len( VALUE self ) {
632
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_tot_len );
633
- }
634
-
635
-
636
- /*
637
- * The IPv4 identification.
638
- *
639
- * @return [Integer] the value of IPv4 identification.
640
- */
641
- static VALUE
642
- packet_in_ipv4_id( VALUE self ) {
643
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_id );
644
- }
645
-
646
-
647
- /*
648
- * The IPv4 fragment offset.
649
- *
650
- * @return [Integer] the value of IPv4 fragment offset.
651
- */
652
- static VALUE
653
- packet_in_ipv4_frag_off( VALUE self ) {
654
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_frag_off );
655
- }
656
-
657
-
658
- /*
659
- * The IPv4 time to live (ttl).
660
- *
661
- * @return [Integer] the value of IPv4 time to live.
662
- */
663
- static VALUE
664
- packet_in_ipv4_ttl( VALUE self ) {
665
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_ttl );
666
- }
667
-
668
-
669
- /*
670
- * The IPv4 protocol number.
671
- *
672
- * @return [Integer] the value of IPv4 protocol number.
673
- */
674
- static VALUE
675
- packet_in_ipv4_protocol( VALUE self ) {
676
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_protocol );
677
- }
678
-
679
-
680
- /*
681
- * The IPv4 checksum.
682
- *
683
- * @return [Integer] the value of IPv4 checksum.
684
- */
685
- static VALUE
686
- packet_in_ipv4_checksum( VALUE self ) {
687
- PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_checksum );
688
- }
689
-
690
-
691
- /*
692
- * The IPv4 source IP address of a packet.
693
- *
694
- * @return [Pio::IPv4Address,nil]
695
- * the value of IPv4 source IP address as a Pio::IPv4Address object or nil if
696
- * packet is not an IPv4.
697
- */
698
- static VALUE
699
- packet_in_ipv4_saddr( VALUE self ) {
700
- if ( ( get_packet_in_info( self )->format & NW_IPV4 ) ) {
701
- PACKET_IN_RETURN_IP( ipv4_saddr );
702
- }
703
- else {
704
- return Qnil;
705
- }
706
- }
707
-
708
-
709
- /*
710
- * The IPV4 destination IP address of a packet.
711
- *
712
- * @return [Pio::IPv4Address, nil]
713
- * the value of IPv4 destination IP address as a Pio::IPv4Address object or nil if
714
- * packet is not an IPv4.
715
- */
716
- static VALUE
717
- packet_in_ipv4_daddr( VALUE self ) {
718
- if ( ( get_packet_in_info( self )->format & NW_IPV4 ) ) {
719
- PACKET_IN_RETURN_IP( ipv4_daddr );
720
- }
721
- else {
722
- return Qnil;
723
- }
724
- }
725
-
726
-
727
- /*
728
- * Is it a LLDP packet?
729
- *
730
- * @return [Boolean] whether the packet is a LLDP packet or not.
731
- */
732
- static VALUE
733
- packet_in_is_lldp( VALUE self ) {
734
- if ( ( get_packet_in_info( self )->format & NW_LLDP ) ) {
735
- return Qtrue;
736
- }
737
- else {
738
- return Qfalse;
739
- }
740
- }
741
-
742
-
743
- /*
744
- * Is it an ICMPv4 packet?
745
- *
746
- * @return [Boolean] whether the packet is an ICMPv4 packet or not.
747
- */
748
- static VALUE
749
- packet_in_is_icmpv4( VALUE self ) {
750
- if ( ( get_packet_in_info( self )->format & NW_ICMPV4 ) ) {
751
- return Qtrue;
752
- }
753
- else {
754
- return Qfalse;
755
- }
756
- }
757
-
758
-
759
- /*
760
- * The ICMPv4 message type, ie echo_reply, echo_request.
761
- *
762
- * @return [Integer] the value of ICMPv4 message type.
763
- */
764
- static VALUE
765
- packet_in_icmpv4_type( VALUE self ) {
766
- PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_type );
767
- }
768
-
769
-
770
- /*
771
- * The ICMPv4 message code the further qualifies the message type.
772
- *
773
- * @return [Integer] the value of ICMPv4 message code.
774
- */
775
- static VALUE
776
- packet_in_icmpv4_code( VALUE self ) {
777
- PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_code );
778
- }
779
-
780
-
781
- /*
782
- * The ICMPv4 message checksum.
783
- *
784
- * @return [Integer] the value of ICMPv4 message checksum.
785
- */
786
- static VALUE
787
- packet_in_icmpv4_checksum( VALUE self ) {
788
- PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_checksum );
789
- }
790
-
791
-
792
- /*
793
- * The ICMPv4 echo identifier to be used to match echo requests to echo replies.
794
- *
795
- * @return [Integer] the value of ICMPv4 echo identifier.
796
- */
797
- static VALUE
798
- packet_in_icmpv4_id( VALUE self ) {
799
- PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_id );
800
- }
801
-
802
-
803
- /*
804
- * The ICMPv4 echo sequence number.
805
- *
806
- * @return [Integer] the value of ICMPv4 echo sequence number.
807
- */
808
- static VALUE
809
- packet_in_icmpv4_seq( VALUE self ) {
810
- PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_seq );
811
- }
812
-
813
-
814
- /*
815
- * The ICMPv4 redirect message gateway IP address.
816
- *
817
- * @return [Pio::IPv4Address, nil]
818
- * the value of ICMPv4 redirect message IP gateway address as a Pio::IPv4Address
819
- * object or nil if packet is not ICMPv4.
820
- */
821
- static VALUE
822
- packet_in_icmpv4_gateway( VALUE self ) {
823
- if ( ( get_packet_in_info( self )->format & NW_ICMPV4 ) ) {
824
- PACKET_IN_RETURN_IP( icmpv4_gateway );
825
- }
826
- else {
827
- return Qnil;
828
- }
829
- }
830
-
831
-
832
- /*
833
- * Is it an ICMPv4 echo reply packet?
834
- *
835
- * @return [Boolean] whether the packet is an ICMPv4 echo reply packet or not.
836
- */
837
- static VALUE
838
- packet_in_is_icmpv4_echo_reply( VALUE self ) {
839
- if ( packet_type_icmpv4_echo_reply( get_packet_in( self )->data ) ) {
840
- return Qtrue;
841
- }
842
- else {
843
- return Qfalse;
844
- }
845
- }
846
-
847
-
848
- /*
849
- * Is it an ICMPv4 destination unreachable packet?
850
- *
851
- * @return [Boolean] whether the packet is an ICMPv4 destination
852
- * unreachable packet or not.
853
- */
854
- static VALUE
855
- packet_in_is_icmpv4_dst_unreach( VALUE self ) {
856
- if ( packet_type_icmpv4_dst_unreach( get_packet_in( self )->data ) ) {
857
- return Qtrue;
858
- }
859
- else {
860
- return Qfalse;
861
- }
862
- }
863
-
864
-
865
- /*
866
- * Is it an ICMPv4 redirect packet?
867
- *
868
- * @return [Boolean] whether the packet is an ICMPv4 redirect packet or not.
869
- */
870
- static VALUE
871
- packet_in_is_icmpv4_redirect( VALUE self ) {
872
- if ( packet_type_icmpv4_redirect( get_packet_in( self )->data ) ) {
873
- return Qtrue;
874
- }
875
- else {
876
- return Qfalse;
877
- }
878
- }
879
-
880
-
881
- /*
882
- * Is it an ICMPv4 echo request packet?
883
- *
884
- * @return [Boolean] whether the packet is an ICMPv4 echo request packet or not.
885
- */
886
- static VALUE
887
- packet_in_is_icmpv4_echo_request( VALUE self ) {
888
- if ( packet_type_icmpv4_echo_request( get_packet_in( self )->data ) ) {
889
- return Qtrue;
890
- }
891
- else {
892
- return Qfalse;
893
- }
894
- }
895
-
896
-
897
- /*
898
- * Is it an IGMP packet?
899
- *
900
- * @return [Boolean] whether the packet is an IGMP packet or not.
901
- */
902
- static VALUE
903
- packet_in_is_igmp( VALUE self ) {
904
- if ( ( get_packet_in_info( self )->format & NW_IGMP ) ) {
905
- return Qtrue;
906
- }
907
- else {
908
- return Qfalse;
909
- }
910
- }
911
-
912
-
913
- /*
914
- * Is it an IGMP membership query packet?
915
- *
916
- * @return [Boolean] whether the packet is an IGMP membership query
917
- * packet or not.
918
- */
919
- static VALUE
920
- packet_in_is_igmp_membership_query( VALUE self ) {
921
- if ( packet_type_igmp_membership_query( get_packet_in( self )->data ) ) {
922
- return Qtrue;
923
- }
924
- else {
925
- return Qfalse;
926
- }
927
- }
928
-
929
-
930
- /*
931
- * Is it an IGMP v1 membership report packet?
932
- *
933
- * @return [Boolean] whether the packet is an IGMP v1 membership report packet
934
- * or not.
935
- */
936
- static VALUE
937
- packet_in_is_igmp_v1_membership_report( VALUE self ) {
938
- if ( packet_type_igmp_v1_membership_report( get_packet_in( self )->data ) ) {
939
- return Qtrue;
940
- }
941
- else {
942
- return Qfalse;
943
- }
944
- }
945
-
946
-
947
- /*
948
- * Is it an IGMP v2 membership report packet?
949
- *
950
- * @return [Boolean] whether the packet is an IGMP v2 membership report packet
951
- * or not.
952
- */
953
- static VALUE
954
- packet_in_is_igmp_v2_membership_report( VALUE self ) {
955
- if ( packet_type_igmp_v2_membership_report( get_packet_in( self )->data ) ) {
956
- return Qtrue;
957
- }
958
- else {
959
- return Qfalse;
960
- }
961
- }
962
-
963
-
964
- /*
965
- * Is it an IGMP v2 leave group packet?
966
- *
967
- * @return [Boolean] whether the packet is an IGMP v2 leave group packet
968
- * or not.
969
- */
970
- static VALUE
971
- packet_in_is_igmp_v2_leave_group( VALUE self ) {
972
- if ( packet_type_igmp_v2_leave_group( get_packet_in( self )->data ) ) {
973
- return Qtrue;
974
- }
975
- else {
976
- return Qfalse;
977
- }
978
- }
979
-
980
-
981
- /*
982
- * Is it an IGMP v3 membership report packet?
983
- *
984
- * @return [Boolean] whether the packet is an IGMP v3 membership report packet
985
- * or not.
986
- */
987
- static VALUE
988
- packet_in_is_igmp_v3_membership_report( VALUE self ) {
989
- if ( packet_type_igmp_v3_membership_report( get_packet_in( self )->data ) ) {
990
- return Qtrue;
991
- }
992
- else {
993
- return Qfalse;
994
- }
995
- }
996
-
997
-
998
- /*
999
- * The IGMP message type.
1000
- *
1001
- * @return [Integer] the value of IGMP message type.
1002
- */
1003
- static VALUE
1004
- packet_in_igmp_type( VALUE self ) {
1005
- PACKET_IN_RETURN_NUM( NW_IGMP, UINT2NUM, igmp_type );
1006
- }
1007
-
1008
-
1009
- /*
1010
- * The IGMP group address.
1011
- *
1012
- * @return [Pio::IPv4Address, nil]
1013
- * the value of IGMP IP group address as a Pio::IPv4Address object
1014
- * or nil if packet is not IGMP.
1015
- */
1016
- static VALUE
1017
- packet_in_igmp_group( VALUE self ) {
1018
- if ( ( get_packet_in_info( self )->format & NW_IGMP ) ) {
1019
- PACKET_IN_RETURN_IP( igmp_group );
1020
- }
1021
- else {
1022
- return Qnil;
1023
- }
1024
- }
1025
-
1026
-
1027
- /*
1028
- * The IGMP checksum.
1029
- *
1030
- * @return [Integer] the value of IGMP checksum.
1031
- */
1032
- static VALUE
1033
- packet_in_igmp_checksum( VALUE self ) {
1034
- PACKET_IN_RETURN_NUM( NW_IGMP, UINT2NUM, igmp_checksum );
1035
- }
1036
-
1037
-
1038
- /*
1039
- * Is it a TCP packet?
1040
- *
1041
- * @return [Boolean] whether the packet is a TCP packet or not.
1042
- */
1043
- static VALUE
1044
- packet_in_is_tcp( VALUE self ) {
1045
- if ( ( get_packet_in_info( self )->format & TP_TCP ) ) {
1046
- return Qtrue;
1047
- }
1048
- else {
1049
- return Qfalse;
1050
- }
1051
- }
1052
-
1053
-
1054
- /*
1055
- * The TCP source port.
1056
- *
1057
- * @return [Integer] the value of TCP source port.
1058
- */
1059
- static VALUE
1060
- packet_in_tcp_src_port( VALUE self ) {
1061
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_src_port );
1062
- }
1063
-
1064
-
1065
- /*
1066
- * The TCP destination port.
1067
- *
1068
- * @return [Integer] the value of TCP destination port.
1069
- */
1070
- static VALUE
1071
- packet_in_tcp_dst_port( VALUE self ) {
1072
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_dst_port );
1073
- }
1074
-
1075
-
1076
- /*
1077
- * The TCP sequence number.
1078
- *
1079
- * @return [Integer] the value of TCP sequence number.
1080
- */
1081
- static VALUE
1082
- packet_in_tcp_seq_no( VALUE self ) {
1083
- PACKET_IN_RETURN_NUM( TP_TCP, ULONG2NUM, tcp_seq_no );
1084
- }
1085
-
1086
-
1087
- /*
1088
- * The TCP acknowledgment number.
1089
- *
1090
- * @return [Integer] the value of TCP acknowledgment number.
1091
- */
1092
- static VALUE
1093
- packet_in_tcp_ack_no( VALUE self ) {
1094
- PACKET_IN_RETURN_NUM( TP_TCP, ULONG2NUM, tcp_ack_no );
1095
- }
1096
-
1097
-
1098
- /*
1099
- * The TCP data offset.
1100
- *
1101
- * @return [Integer] the value of TCP data offset.
1102
- */
1103
- static VALUE
1104
- packet_in_tcp_offset( VALUE self ) {
1105
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_offset );
1106
- }
1107
-
1108
-
1109
- /*
1110
- * The TCP flags.
1111
- *
1112
- * @return [Integer] the value of TCP flags.
1113
- */
1114
- static VALUE
1115
- packet_in_tcp_flags( VALUE self ) {
1116
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_flags );
1117
- }
1118
-
1119
-
1120
- /*
1121
- * The TCP window.
1122
- *
1123
- * @return [Integer] the value of TCP window.
1124
- */
1125
- static VALUE
1126
- packet_in_tcp_window( VALUE self ) {
1127
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_window );
1128
- }
1129
-
1130
-
1131
- /*
1132
- * The TCP checksum.
1133
- *
1134
- * @return [Integer] the value of TCP checksum.
1135
- */
1136
- static VALUE
1137
- packet_in_tcp_checksum( VALUE self ) {
1138
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_checksum );
1139
- }
1140
-
1141
-
1142
- /*
1143
- * The TCP urgent pointer.
1144
- *
1145
- * @return [Integer] the value of TCP urgent pointer.
1146
- */
1147
- static VALUE
1148
- packet_in_tcp_urgent( VALUE self ) {
1149
- PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_urgent );
1150
- }
1151
-
1152
-
1153
- /*
1154
- * Is it a UDP packet?
1155
- *
1156
- * @return [Boolean] whether the packet is a UDP packet or not.
1157
- */
1158
- static VALUE
1159
- packet_in_is_udp( VALUE self ) {
1160
- if ( ( get_packet_in_info( self )->format & TP_UDP ) ) {
1161
- return Qtrue;
1162
- }
1163
- else {
1164
- return Qfalse;
1165
- }
1166
- }
1167
-
1168
-
1169
- /*
1170
- * A String that holds the UDP payload.
1171
- * Length of data, total_len - 20 bytes.
1172
- *
1173
- * @return [String] the value of data.
1174
- */
1175
- static VALUE
1176
- packet_in_udp_payload( VALUE self ) {
1177
- packet_info *cpacket = get_packet_in_info( self );
1178
- return rb_str_new( cpacket->l4_payload, ( long ) cpacket->l4_payload_length );
1179
- }
1180
-
1181
-
1182
- /*
1183
- * The UDP source port.
1184
- *
1185
- * @return [Integer] the value of UDP source port.
1186
- */
1187
- static VALUE
1188
- packet_in_udp_src_port( VALUE self ) {
1189
- PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_src_port );
1190
- }
1191
-
1192
-
1193
- /*
1194
- * The UDP destination port.
1195
- *
1196
- * @return [Integer] the value of UDP destination port.
1197
- */
1198
- static VALUE
1199
- packet_in_udp_dst_port( VALUE self ) {
1200
- PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_dst_port );
1201
- }
1202
-
1203
-
1204
- /*
1205
- * The UDP length
1206
- *
1207
- * @return [Integer] the value in bytes of UDP header and data.
1208
- */
1209
- static VALUE
1210
- packet_in_udp_len( VALUE self ) {
1211
- PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_len );
1212
- }
1213
-
1214
-
1215
- /*
1216
- * The UDP checksum.
1217
- *
1218
- * @return [Integer] the value of UDP checksum.
1219
- */
1220
- static VALUE
1221
- packet_in_udp_checksum( VALUE self ) {
1222
- PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_checksum );
1223
- }
1224
-
1225
-
1226
- /*
1227
- * Document-class: Trema::PacketIn
1228
- */
1229
- void
1230
- Init_packet_in() {
1231
- rb_require( "pio" );
1232
-
1233
- mTrema = rb_eval_string( "Trema" );
1234
- cPacketIn = rb_define_class_under( mTrema, "PacketIn", rb_cObject );
1235
- rb_define_alloc_func( cPacketIn, packet_in_alloc );
1236
-
1237
- rb_define_const( cPacketIn, "OFPR_NO_MATCH", INT2NUM( OFPR_NO_MATCH ) );
1238
- rb_define_const( cPacketIn, "OFPR_ACTION", INT2NUM( OFPR_ACTION ) );
1239
-
1240
- rb_define_method( cPacketIn, "datapath_id", packet_in_datapath_id, 0 );
1241
- rb_define_method( cPacketIn, "transaction_id", packet_in_transaction_id, 0 );
1242
- rb_define_method( cPacketIn, "buffer_id", packet_in_buffer_id, 0 );
1243
- rb_define_method( cPacketIn, "buffered?", packet_in_is_buffered, 0 );
1244
- rb_define_method( cPacketIn, "in_port", packet_in_in_port, 0 );
1245
- rb_define_method( cPacketIn, "total_len", packet_in_total_len, 0 );
1246
- rb_define_method( cPacketIn, "reason", packet_in_reason, 0 );
1247
- rb_define_method( cPacketIn, "data", packet_in_data, 0 );
1248
-
1249
- rb_define_method( cPacketIn, "macsa", packet_in_macsa, 0 );
1250
- rb_define_method( cPacketIn, "macda", packet_in_macda, 0 );
1251
- rb_define_method( cPacketIn, "eth_type", packet_in_eth_type, 0 );
1252
-
1253
- rb_define_method( cPacketIn, "vtag?", packet_in_is_vtag, 0 );
1254
- rb_define_method( cPacketIn, "arp?", packet_in_is_arp, 0 );
1255
- rb_define_method( cPacketIn, "rarp?", packet_in_is_rarp, 0 );
1256
- rb_define_method( cPacketIn, "ipv4?", packet_in_is_ipv4, 0 );
1257
- rb_define_method( cPacketIn, "lldp?", packet_in_is_lldp, 0 );
1258
- rb_define_method( cPacketIn, "icmpv4?", packet_in_is_icmpv4, 0 );
1259
- rb_define_method( cPacketIn, "igmp?", packet_in_is_igmp, 0 );
1260
- rb_define_method( cPacketIn, "tcp?", packet_in_is_tcp, 0 );
1261
- rb_define_method( cPacketIn, "udp?", packet_in_is_udp, 0 );
1262
-
1263
- rb_define_method( cPacketIn, "vlan_tpid", packet_in_vlan_tpid, 0 );
1264
- rb_define_method( cPacketIn, "vlan_tci", packet_in_vlan_tci, 0 );
1265
- rb_define_method( cPacketIn, "vlan_prio", packet_in_vlan_prio, 0 );
1266
- rb_define_method( cPacketIn, "vlan_cfi", packet_in_vlan_cfi, 0 );
1267
- rb_define_method( cPacketIn, "vlan_vid", packet_in_vlan_vid, 0 );
1268
-
1269
- rb_define_method( cPacketIn, "arp_oper", packet_in_arp_oper, 0 );
1270
- rb_define_method( cPacketIn, "arp_sha", packet_in_arp_sha, 0 );
1271
- rb_define_method( cPacketIn, "arp_spa", packet_in_arp_spa, 0 );
1272
- rb_define_method( cPacketIn, "arp_tha", packet_in_arp_tha, 0 );
1273
- rb_define_method( cPacketIn, "arp_tpa", packet_in_arp_tpa, 0 );
1274
- rb_define_method( cPacketIn, "arp_request?", packet_in_is_arp_request, 0 );
1275
- rb_define_method( cPacketIn, "arp_reply?", packet_in_is_arp_reply, 0 );
1276
-
1277
- rb_define_method( cPacketIn, "rarp_oper", packet_in_rarp_oper, 0 );
1278
- rb_define_method( cPacketIn, "rarp_sha", packet_in_rarp_sha, 0 );
1279
- rb_define_method( cPacketIn, "rarp_spa", packet_in_rarp_spa, 0 );
1280
- rb_define_method( cPacketIn, "rarp_tha", packet_in_rarp_tha, 0 );
1281
- rb_define_method( cPacketIn, "rarp_tpa", packet_in_rarp_tpa, 0 );
1282
- rb_define_method( cPacketIn, "rarp_request?", packet_in_is_rarp_request, 0 );
1283
- rb_define_method( cPacketIn, "rarp_reply?", packet_in_is_rarp_reply, 0 );
1284
-
1285
- rb_define_method( cPacketIn, "ipv4_version", packet_in_ipv4_version, 0 );
1286
- rb_define_method( cPacketIn, "ipv4_ihl", packet_in_ipv4_ihl, 0 );
1287
- rb_define_method( cPacketIn, "ipv4_tos", packet_in_ipv4_tos, 0 );
1288
- rb_define_method( cPacketIn, "ipv4_tot_len", packet_in_ipv4_tot_len, 0 );
1289
- rb_define_method( cPacketIn, "ipv4_id", packet_in_ipv4_id, 0 );
1290
- rb_define_method( cPacketIn, "ipv4_frag_off", packet_in_ipv4_frag_off, 0 );
1291
- rb_define_method( cPacketIn, "ipv4_ttl", packet_in_ipv4_ttl, 0 );
1292
- rb_define_method( cPacketIn, "ipv4_protocol", packet_in_ipv4_protocol, 0 );
1293
- rb_define_method( cPacketIn, "ipv4_checksum", packet_in_ipv4_checksum, 0 );
1294
- rb_define_method( cPacketIn, "ipv4_saddr", packet_in_ipv4_saddr, 0 );
1295
- rb_define_method( cPacketIn, "ipv4_daddr", packet_in_ipv4_daddr, 0 );
1296
-
1297
- rb_define_method( cPacketIn, "icmpv4_type", packet_in_icmpv4_type, 0 );
1298
- rb_define_method( cPacketIn, "icmpv4_code", packet_in_icmpv4_code, 0 );
1299
- rb_define_method( cPacketIn, "icmpv4_checksum", packet_in_icmpv4_checksum, 0 );
1300
- rb_define_method( cPacketIn, "icmpv4_id", packet_in_icmpv4_id, 0 );
1301
- rb_define_method( cPacketIn, "icmpv4_seq", packet_in_icmpv4_seq, 0 );
1302
- rb_define_method( cPacketIn, "icmpv4_gateway", packet_in_icmpv4_gateway, 0 );
1303
- rb_define_method( cPacketIn, "icmpv4_echo_reply?", packet_in_is_icmpv4_echo_reply, 0 );
1304
- rb_define_method( cPacketIn, "icmpv4_dst_unreach?", packet_in_is_icmpv4_dst_unreach, 0 );
1305
- rb_define_method( cPacketIn, "icmpv4_redirect?", packet_in_is_icmpv4_redirect, 0 );
1306
- rb_define_method( cPacketIn, "icmpv4_echo_request?", packet_in_is_icmpv4_echo_request, 0 );
1307
-
1308
- rb_define_method( cPacketIn, "igmp_type", packet_in_igmp_type, 0 );
1309
- rb_define_method( cPacketIn, "igmp_group", packet_in_igmp_group, 0 );
1310
- rb_define_method( cPacketIn, "igmp_checksum", packet_in_igmp_checksum, 0 );
1311
- rb_define_method( cPacketIn, "igmp_membership_query?", packet_in_is_igmp_membership_query, 0 );
1312
- rb_define_method( cPacketIn, "igmp_v1_membership_report?", packet_in_is_igmp_v1_membership_report, 0 );
1313
- rb_define_method( cPacketIn, "igmp_v2_membership_report?", packet_in_is_igmp_v2_membership_report, 0 );
1314
- rb_define_method( cPacketIn, "igmp_v2_leave_group?", packet_in_is_igmp_v2_leave_group, 0 );
1315
- rb_define_method( cPacketIn, "igmp_v3_membership_report?", packet_in_is_igmp_v3_membership_report, 0 );
1316
-
1317
- rb_define_method( cPacketIn, "tcp_src_port", packet_in_tcp_src_port, 0 );
1318
- rb_define_method( cPacketIn, "tcp_dst_port", packet_in_tcp_dst_port, 0 );
1319
- rb_define_method( cPacketIn, "tcp_seq_no", packet_in_tcp_seq_no, 0 );
1320
- rb_define_method( cPacketIn, "tcp_ack_no", packet_in_tcp_ack_no, 0 );
1321
- rb_define_method( cPacketIn, "tcp_offset", packet_in_tcp_offset, 0 );
1322
- rb_define_method( cPacketIn, "tcp_flags", packet_in_tcp_flags, 0 );
1323
- rb_define_method( cPacketIn, "tcp_window", packet_in_tcp_window, 0 );
1324
- rb_define_method( cPacketIn, "tcp_checksum", packet_in_tcp_checksum, 0 );
1325
- rb_define_method( cPacketIn, "tcp_urgent", packet_in_tcp_urgent, 0 );
1326
-
1327
- rb_define_method( cPacketIn, "udp_payload", packet_in_udp_payload, 0 );
1328
- rb_define_method( cPacketIn, "udp_src_port", packet_in_udp_src_port, 0 );
1329
- rb_define_method( cPacketIn, "udp_dst_port", packet_in_udp_dst_port, 0 );
1330
- rb_define_method( cPacketIn, "udp_checksum", packet_in_udp_checksum, 0 );
1331
- rb_define_method( cPacketIn, "udp_len", packet_in_udp_len, 0 );
1332
-
1333
- rb_define_private_method( cPacketIn, "initialize_copy", packet_in_init_copy, 1 );
1334
- }
1335
-
1336
-
1337
- /*
1338
- * Handler called when +OFPT_PACKET_IN+ message is received.
1339
- */
1340
- void
1341
- handle_packet_in( uint64_t datapath_id, packet_in message ) {
1342
- VALUE controller = ( VALUE ) message.user_data;
1343
- if ( rb_respond_to( controller, rb_intern( "packet_in" ) ) == Qfalse ) {
1344
- return;
1345
- }
1346
-
1347
- VALUE r_message = rb_funcall( cPacketIn, rb_intern( "new" ), 0 );
1348
- rb_packet_in *tmp = NULL;
1349
- Data_Get_Struct( r_message, rb_packet_in, tmp );
1350
- memcpy( &tmp->packet_in, &message, sizeof( packet_in ) );
1351
- free_buffer( tmp->data );
1352
- tmp->data = duplicate_buffer( message.data );
1353
- parse_packet( tmp->data );
1354
- tmp->packet_in.data = tmp->data;
1355
-
1356
- rb_funcall( controller, rb_intern( "packet_in" ), 2, ULL2NUM( datapath_id ), r_message );
1357
- }
1358
-
1359
-
1360
- /*
1361
- * Local variables:
1362
- * c-basic-offset: 2
1363
- * indent-tabs-mode: nil
1364
- * End:
1365
- */