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,92 +0,0 @@
1
- /*
2
- * Ethernet header definitions
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
- #ifndef ETHER_H
22
- #define ETHER_H
23
-
24
-
25
- #include <stdint.h>
26
- #include "bool.h"
27
- #include "buffer.h"
28
-
29
-
30
- #define ETH_ADDRLEN 6
31
- #define ETH_FCS_LENGTH 4
32
- #define ETH_MINIMUM_LENGTH 64
33
- #define ETH_MAXIMUM_LENGTH 1518
34
- #define ETH_HDR_LENGTH sizeof( ether_header_t )
35
- #define ETH_MTU ( ETH_MAXIMUM_LENGTH - ETH_HDR_LENGTH - ETH_FCS_LENGTH )
36
-
37
-
38
- //Ethernet payload types
39
- #define ETH_ETHTYPE_8023 0x05dc
40
- #define ETH_ETHTYPE_IPV4 0x0800
41
- #define ETH_ETHTYPE_ARP 0x0806
42
- #define ETH_ETHTYPE_RARP 0x8035
43
- #define ETH_ETHTYPE_TPID 0x8100
44
- #define ETH_ETHTYPE_IPV6 0x86DD
45
- #define ETH_ETHTYPE_EAPOL 0x88c7
46
- #define ETH_ETHTYPE_LLDP 0x88cc
47
- #define ETH_ETHTYPE_UKNOWN 0xffff
48
-
49
-
50
- typedef struct ether_headr {
51
- uint8_t macda[ ETH_ADDRLEN ];
52
- uint8_t macsa[ ETH_ADDRLEN ];
53
- uint16_t type;
54
- } ether_header_t;
55
-
56
-
57
- typedef struct vlantag_header {
58
- uint16_t tci;
59
- uint16_t type;
60
- } vlantag_header_t;
61
-
62
-
63
- typedef struct snap_header {
64
- uint8_t llc[ 3 ];
65
- uint8_t oui[ 3 ];
66
- uint16_t type;
67
- } snap_header_t;
68
-
69
-
70
- #define TCI_GET_PRIO( _tci ) ( uint8_t )( ( ( _tci ) >> 13 ) & 7 )
71
-
72
- #define TCI_GET_CFI( _tci ) ( uint8_t )( ( ( _tci ) >> 12 ) & 1 )
73
-
74
- #define TCI_GET_VID( _tci ) ( uint16_t )( ( _tci ) & 0x0FFF )
75
-
76
- #define TCI_CREATE( _prio, _cfi, _vid ) \
77
- ( uint16_t )( ( ( ( _prio ) & 7 ) << 13 ) | \
78
- ( ( ( _cfi ) & 1 ) << 12 ) | \
79
- ( ( _vid ) & 0x0FFF ) )
80
-
81
- uint16_t fill_ether_padding( buffer *buf );
82
-
83
-
84
- #endif // ETHER_H
85
-
86
-
87
- /*
88
- * Local variables:
89
- * c-basic-offset: 2
90
- * indent-tabs-mode: nil
91
- * End:
92
- */
@@ -1,44 +0,0 @@
1
- /*
2
- * EtherIP definitions
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
- #ifndef ETHERIP_H
22
- #define ETHERIP_H
23
-
24
-
25
- #define IPPROTO_ETHERIP 97
26
-
27
-
28
- typedef struct etherip_headr {
29
- uint16_t version;
30
- } etherip_header;
31
-
32
-
33
- #define ETHERIP_VERSION ( 0x3 << 12 )
34
-
35
-
36
- #endif // ETHERIP_H
37
-
38
-
39
- /*
40
- * Local variables:
41
- * c-basic-offset: 2
42
- * indent-tabs-mode: nil
43
- * End:
44
- */
@@ -1,788 +0,0 @@
1
- /*
2
- * Copyright (C) 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
- #include <assert.h>
19
- #include <sys/types.h>
20
- #include <unistd.h>
21
- #include "trema.h"
22
- #include "trema_wrapper.h"
23
- #include "event_forward_interface.h"
24
-
25
-
26
- static char *efi_queue_name = NULL;
27
-
28
-
29
- // txid -> all_sw_tx;
30
- static hash_table *efi_tx_table = NULL;
31
-
32
-
33
- struct event_forward_operation_request_param {
34
- event_forward_entry_operation_callback callback;
35
- void *user_data;
36
- };
37
-
38
-
39
- struct event_forward_operation_to_all_request_param {
40
- bool add;
41
- enum efi_event_type type;
42
- char *service_name;
43
- event_forward_entry_to_all_callback callback;
44
- void *user_data;
45
- };
46
-
47
-
48
- struct sw_list_request_param {
49
- switch_list_request_callback callback;
50
- void *user_data;
51
- };
52
-
53
-
54
- typedef struct all_sw_tx {
55
- uint32_t txid;
56
- hash_table *waiting_dpid;
57
- enum efi_result tx_result;
58
-
59
- struct event_forward_operation_to_all_request_param *request_param;
60
- } all_sw_tx;
61
-
62
-
63
- struct txinfo {
64
- uint64_t dpid;
65
- uint32_t txid;
66
- };
67
-
68
-
69
- static void
70
- xfree_event_forward_operation_to_all_request_param( struct event_forward_operation_to_all_request_param *param ) {
71
- xfree( param->service_name );
72
- param->service_name = NULL;
73
- xfree( param );
74
- }
75
-
76
-
77
- // foreach_hash helper function
78
- static void
79
- xfree_dpid( void *key, void *value, void *user_data ) {
80
- UNUSED( value );
81
- UNUSED( user_data );
82
- xfree( key );
83
- }
84
-
85
-
86
- static void
87
- xfree_all_sw_tx( all_sw_tx *tx ) {
88
- struct event_forward_operation_to_all_request_param *param = tx->request_param;
89
- xfree_event_forward_operation_to_all_request_param( param );
90
- tx->request_param = NULL;
91
-
92
- foreach_hash( tx->waiting_dpid, xfree_dpid, NULL );
93
- delete_hash( tx->waiting_dpid );
94
- tx->waiting_dpid = NULL;
95
- xfree( tx );
96
- }
97
-
98
-
99
- const char*
100
- _get_efi_queue_name( void ) {
101
- return efi_queue_name;
102
- }
103
-
104
-
105
- buffer*
106
- create_event_forward_operation_request( buffer *buf, enum efi_event_type type, list_element *service_list ) {
107
- if ( buf == NULL ) {
108
- buf = alloc_buffer_with_length( sizeof( event_forward_operation_request ) + MESSENGER_SERVICE_NAME_LENGTH );
109
- }
110
- event_forward_operation_request *req = append_back_buffer( buf, sizeof( event_forward_operation_request ) );
111
- memset( req, 0, sizeof( event_forward_operation_request ) );
112
-
113
- req->type = ( uint8_t ) type;
114
-
115
- size_t request_head_offset = sizeof( event_forward_operation_request );
116
- uint32_t n_services = 0;
117
- if ( service_list != NULL ) {
118
- for ( list_element *e = service_list; e != NULL; e = e->next ) {
119
- const size_t len = strlen( e->data );
120
- char *dst = append_back_buffer( buf, len + 1 );
121
- req = ( event_forward_operation_request * )( dst - request_head_offset );
122
- request_head_offset += len + 1;
123
- strcpy( dst, e->data );
124
- dst[ len ] = '\0';
125
- ++n_services;
126
- }
127
- }
128
-
129
- req->n_services = htonl( n_services );
130
- return buf;
131
- }
132
-
133
-
134
- buffer*
135
- create_event_forward_operation_reply( enum efi_event_type type, enum efi_result result, list_element *service_list ) {
136
- buffer *buf = alloc_buffer_with_length( sizeof( event_forward_operation_reply ) + MESSENGER_SERVICE_NAME_LENGTH );
137
- event_forward_operation_reply *rep = append_back_buffer( buf, sizeof( event_forward_operation_reply ) );
138
- memset( rep, 0, sizeof( event_forward_operation_reply ) );
139
-
140
- rep->type = ( uint8_t ) type;
141
- rep->result = ( uint8_t ) result;
142
-
143
- size_t reply_head_offset = sizeof( event_forward_operation_reply );
144
- uint32_t n_services = 0;
145
- if ( service_list != NULL ) {
146
- for ( list_element *e = service_list; e != NULL; e = e->next ) {
147
- const size_t len = strlen( e->data );
148
- char *dst = append_back_buffer( buf, len + 1 );
149
- rep = ( event_forward_operation_reply * )( dst - reply_head_offset );
150
- reply_head_offset += len + 1;
151
- strcpy( dst, e->data );
152
- dst[ len ] = '\0';
153
- ++n_services;
154
- }
155
- }
156
-
157
- rep->n_services = htonl( n_services );
158
- return buf;
159
- }
160
-
161
-
162
- static void
163
- handle_event_forward_operation_reply( management_application_reply *reply, size_t length, struct event_forward_operation_request_param *param ) {
164
- event_forward_operation_result result;
165
- result.result = EFI_OPERATION_FAILED;
166
- result.n_services = 0;
167
- result.services = NULL;
168
-
169
- event_forward_operation_reply *efi_reply = ( event_forward_operation_reply * ) reply->data;
170
- efi_reply->n_services = ntohl( efi_reply->n_services );
171
-
172
- if ( reply->header.status == MANAGEMENT_REQUEST_FAILED ) {
173
- warn( "Management request failed." );
174
- result.result = EFI_OPERATION_FAILED;
175
- if ( param->callback != NULL ) {
176
- param->callback( result, param->user_data );
177
- }
178
- return;
179
- }
180
-
181
- switch ( efi_reply->result ) {
182
- case EFI_OPERATION_SUCCEEDED:
183
- result.result = EFI_OPERATION_SUCCEEDED;
184
- break;
185
- case EFI_OPERATION_FAILED:
186
- result.result = EFI_OPERATION_FAILED;
187
- break;
188
- default:
189
- warn( "Unknown result type %#x. Translating as FAILED.", efi_reply->result );
190
- result.result = EFI_OPERATION_FAILED;
191
- break;
192
- }
193
-
194
- if ( result.result == EFI_OPERATION_FAILED ) {
195
- if ( param->callback != NULL ) {
196
- param->callback( result, param->user_data );
197
- }
198
- return;
199
- }
200
-
201
- const size_t service_list_len = length
202
- - offsetof( management_application_reply, data )
203
- - offsetof( event_forward_operation_reply, service_list );
204
-
205
- // null terminate input to avoid overrun.
206
- efi_reply->service_list[ service_list_len ] = '\0';
207
-
208
- const uint32_t n_services_expected = efi_reply->n_services;
209
- result.services = xcalloc( n_services_expected, sizeof( char * ) );
210
-
211
- result.n_services = 0;
212
- const char *next_name = efi_reply->service_list;
213
- while ( next_name < &efi_reply->service_list[ service_list_len ] ) {
214
- const size_t name_len = strlen( next_name );
215
- if ( name_len > 0 ) {
216
- if ( result.n_services < n_services_expected ) {
217
- result.services[ result.n_services++ ] = next_name;
218
- }
219
- else {
220
- warn( "Expected %d name(s), but found more service name. Ignoring '%s'.", n_services_expected, next_name );
221
- }
222
- }
223
- else {
224
- warn( "Encountered empty service name." );
225
- }
226
- next_name += name_len + 1;
227
- }
228
-
229
- if ( param->callback != NULL ) {
230
- param->callback( result, param->user_data );
231
- }
232
- xfree( result.services );
233
- }
234
-
235
-
236
- static void
237
- handle_get_switch_list_reply( management_application_reply *reply, size_t length, struct sw_list_request_param *param ) {
238
-
239
- if ( reply->header.status == MANAGEMENT_REQUEST_FAILED ) {
240
- warn( "Management request failed." );
241
- if ( param->callback != NULL ) {
242
- param->callback( NULL, 0, param->user_data );
243
- }
244
- return;
245
- }
246
-
247
- uint64_t *dpids = ( uint64_t * ) reply->data;
248
- const size_t data_bytes = length - sizeof( management_application_reply );
249
- if ( data_bytes % sizeof( uint64_t ) != 0 ) {
250
- warn( "data length was not multiple of uint64_t size %zu", data_bytes );
251
- }
252
- const size_t n_dpids = data_bytes / sizeof( uint64_t );
253
-
254
- for ( size_t i = 0 ; i < n_dpids ; ++i ) {
255
- dpids[ i ] = ntohll( dpids[ i ] );
256
- }
257
-
258
- if ( param->callback != NULL ) {
259
- param->callback( dpids, n_dpids, param->user_data );
260
- }
261
- }
262
-
263
-
264
- static void
265
- handle_efi_reply( uint16_t tag, void *data, size_t length, void *user_data ) {
266
-
267
- debug( "handle_efi_reply: tag=%#x, data=%p, length=%zu, user_data=%p", tag, data, length, user_data );
268
-
269
- if ( tag != MESSENGER_MANAGEMENT_REPLY ) {
270
- error( "Unexpected message received tag=%#x", tag );
271
- return;
272
- }
273
- if ( data == NULL ) {
274
- error( "Received reply had no data" );
275
- return;
276
- }
277
- if ( length < sizeof( management_application_reply ) ) {
278
- error( "Data length too short %zu. expecting >= %zu", length, sizeof( management_application_reply ) );
279
- return;
280
- }
281
-
282
- management_application_reply *reply = data;
283
- if ( ntohs( reply->header.type ) != MANAGEMENT_APPLICATION_REPLY ) {
284
- error( "Invalid reply type %#x, expecting MANAGEMENT_APPLICATION_REPLY:%#x", ntohs( reply->header.type ), MANAGEMENT_APPLICATION_REPLY );
285
- return;
286
- }
287
- const uint32_t command = ntohl( reply->application_id );
288
-
289
- // check command validity
290
- switch ( command ) {
291
- case EVENT_FORWARD_ENTRY_ADD:
292
- case EVENT_FORWARD_ENTRY_DELETE:
293
- case EVENT_FORWARD_ENTRY_DUMP:
294
- case EVENT_FORWARD_ENTRY_SET:
295
- {
296
- struct event_forward_operation_request_param *param = user_data;
297
- handle_event_forward_operation_reply( reply, length, param );
298
- xfree( param );
299
- return;
300
- }
301
- break;
302
-
303
- case EFI_GET_SWLIST:
304
- {
305
- struct sw_list_request_param *param = user_data;
306
- handle_get_switch_list_reply( reply, length, param );
307
- xfree( param );
308
- return;
309
- }
310
- break;
311
-
312
- default:
313
- warn( "Invalid command/application_id: %#x", command );
314
- return;
315
- break;
316
- }
317
- }
318
-
319
-
320
- bool
321
- init_event_forward_interface( void ) {
322
- if ( efi_queue_name != NULL ) {
323
- warn( "already initialized." );
324
- return false;
325
- }
326
-
327
- efi_queue_name = xcalloc( 1, MESSENGER_SERVICE_NAME_LENGTH );
328
-
329
- int chWrite = snprintf( efi_queue_name, MESSENGER_SERVICE_NAME_LENGTH,
330
- "%s-efic-%d", get_trema_name(), trema_getpid() );
331
- if ( chWrite >= MESSENGER_SERVICE_NAME_LENGTH ) {
332
- snprintf( efi_queue_name, MESSENGER_SERVICE_NAME_LENGTH,
333
- "efic-%d", trema_getpid() );
334
- }
335
-
336
- // management reply handler
337
- add_message_replied_callback( efi_queue_name, handle_efi_reply );
338
-
339
- efi_tx_table = create_hash( compare_uint32, hash_uint32 );
340
- return true;
341
- }
342
-
343
-
344
- static void
345
- maybe_init_event_forward_interface( void ) {
346
- if ( efi_queue_name == NULL ) {
347
- info( "Initializing at maybe_init_event_forward_interface()" );
348
- init_event_forward_interface();
349
- }
350
- }
351
-
352
-
353
- void
354
- _cleanup_tx_table() {
355
- hash_iterator it;
356
- init_hash_iterator( efi_tx_table, &it );
357
- hash_entry *e = NULL;
358
- while ( ( e = iterate_hash_next( &it ) ) != NULL ) {
359
- all_sw_tx *tx = e->value;
360
- warn( "txid:%#x was left behind.", tx->txid );
361
-
362
- delete_hash_entry( efi_tx_table, &tx->txid );
363
- xfree_all_sw_tx( tx );
364
- }
365
- }
366
-
367
-
368
- bool
369
- finalize_event_forward_interface( void ) {
370
- if ( efi_queue_name == NULL ) {
371
- warn( "already finalized." );
372
- return false;
373
- }
374
- delete_message_replied_callback( efi_queue_name, handle_efi_reply );
375
-
376
- xfree( efi_queue_name );
377
- efi_queue_name = NULL;
378
-
379
- _cleanup_tx_table();
380
- delete_hash( efi_tx_table );
381
- efi_tx_table = NULL;
382
-
383
- return true;
384
- }
385
-
386
-
387
- static bool
388
- send_efi_event_config_request( const char *service_name, enum switch_management_command command, enum efi_event_type type, list_element *service_list, event_forward_entry_operation_callback callback, void *user_data ) {
389
- maybe_init_event_forward_interface();
390
- if ( service_name == NULL ) {
391
- return false;
392
- }
393
- switch( command ) {
394
- case EVENT_FORWARD_ENTRY_ADD:
395
- case EVENT_FORWARD_ENTRY_DELETE:
396
- case EVENT_FORWARD_ENTRY_DUMP:
397
- case EVENT_FORWARD_ENTRY_SET:
398
- // do nothing;
399
- break;
400
- default:
401
- return false;
402
- }
403
-
404
- buffer *all_req = alloc_buffer_with_length( sizeof( management_application_request ) + sizeof( event_forward_operation_request ) + MESSENGER_SERVICE_NAME_LENGTH );
405
-
406
- management_application_request *apreq = append_back_buffer( all_req, sizeof( management_application_request ) );
407
- apreq->header.type = htons( MANAGEMENT_APPLICATION_REQUEST );
408
- apreq->application_id = htonl( command );
409
- create_event_forward_operation_request( all_req, type, service_list );
410
- apreq = all_req->data;
411
- apreq->header.length = htonl( ( uint32_t ) all_req->length );
412
-
413
- struct event_forward_operation_request_param *param = xcalloc( 1, sizeof( struct event_forward_operation_request_param ) );
414
- param->callback = callback;
415
- param->user_data = user_data;
416
-
417
- bool sent = send_request_message( service_name, efi_queue_name, MESSENGER_MANAGEMENT_REQUEST,
418
- all_req->data, all_req->length, param );
419
- if ( !sent ) {
420
- xfree( param );
421
- }
422
- free_buffer( all_req );
423
-
424
- return sent;
425
- }
426
-
427
-
428
- // Low level API for switch manager
429
- bool
430
- set_switch_manager_event_forward_entries( enum efi_event_type type, list_element *service_list, event_forward_entry_operation_callback callback, void *user_data ) {
431
- const char switch_manager[] = "switch_manager.m";
432
- return send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_SET, type, service_list, callback, user_data );
433
- }
434
-
435
-
436
- bool
437
- add_switch_manager_event_forward_entry( enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
438
- const char switch_manager[] = "switch_manager.m";
439
- list_element service_list;
440
- service_list.next = NULL;
441
- // Copying only to avoid const_cast warnings. Will not modify in callee.
442
- service_list.data = xstrdup( service_name );
443
- bool sent_ok = send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_ADD, type, &service_list, callback, user_data );
444
- xfree( service_list.data );
445
- return sent_ok;
446
- }
447
-
448
-
449
- bool
450
- delete_switch_manager_event_forward_entry( enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
451
- const char switch_manager[] = "switch_manager.m";
452
- list_element service_list;
453
- service_list.next = NULL;
454
- // Copying only to avoid const_cast warnings. Will not modify in callee.
455
- service_list.data = xstrdup( service_name );
456
- bool sent_ok = send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_DELETE, type, &service_list, callback, user_data );
457
- xfree( service_list.data );
458
- return sent_ok;
459
- }
460
-
461
-
462
- bool
463
- dump_switch_manager_event_forward_entries( enum efi_event_type type, event_forward_entry_operation_callback callback, void *user_data ) {
464
- const char switch_manager[] = "switch_manager.m";
465
- return send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_DUMP, type, NULL, callback, user_data );
466
- }
467
-
468
-
469
- bool
470
- set_switch_event_forward_entries( uint64_t dpid, enum efi_event_type type, list_element *service_list, event_forward_entry_operation_callback callback, void *user_data ) {
471
- char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
472
- snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
473
- return send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_SET, type, service_list, callback, user_data );
474
- }
475
-
476
-
477
- bool
478
- add_switch_event_forward_entry( uint64_t dpid, enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
479
- char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
480
- snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
481
- list_element service_list;
482
- service_list.next = NULL;
483
- // Copying only to avoid const_cast warnings. Will not modify in callee.
484
- service_list.data = xstrdup( service_name );
485
- bool sent_ok = send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_ADD, type, &service_list, callback, user_data );
486
- xfree( service_list.data );
487
- return sent_ok;
488
- }
489
-
490
-
491
- bool
492
- delete_switch_event_forward_entry( uint64_t dpid, enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
493
- char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
494
- snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
495
- list_element service_list;
496
- service_list.next = NULL;
497
- // Copying only to avoid const_cast warnings. Will not modify in callee.
498
- service_list.data = xstrdup( service_name );
499
- bool sent_ok = send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_DELETE, type, &service_list, callback, user_data );
500
- xfree( service_list.data );
501
- return sent_ok;
502
- }
503
-
504
-
505
- bool
506
- dump_switch_event_forward_entries( uint64_t dpid, enum efi_event_type type, event_forward_entry_operation_callback callback, void *user_data ) {
507
- char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
508
- snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
509
- return send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_DUMP, type, NULL, callback, user_data );
510
- }
511
-
512
-
513
- bool
514
- send_efi_switch_list_request( switch_list_request_callback callback, void *user_data ) {
515
- maybe_init_event_forward_interface();
516
- if ( callback == NULL ) {
517
- return false;
518
- }
519
-
520
- management_application_request req;
521
- req.header.type = htons( MANAGEMENT_APPLICATION_REQUEST );
522
- req.header.length = htonl( ( uint32_t ) sizeof( management_application_request ) );
523
- req.application_id = htonl( EFI_GET_SWLIST );
524
-
525
- struct sw_list_request_param *param = xcalloc( 1, sizeof( struct sw_list_request_param ) );
526
- param->callback = callback;
527
- param->user_data = user_data;
528
-
529
- bool sent_ok = send_request_message( "switch_manager.m", efi_queue_name, MESSENGER_MANAGEMENT_REQUEST,
530
- &req, sizeof( management_application_request ), param );
531
- if ( !sent_ok ) {
532
- xfree( param );
533
- }
534
-
535
- return sent_ok;
536
- }
537
-
538
-
539
- static uint32_t
540
- get_txid() {
541
- static uint32_t txid = 0;
542
- return ++txid;
543
- }
544
-
545
-
546
- static bool
547
- hash_table_is_empty( hash_table *tbl ) {
548
- hash_iterator it;
549
- init_hash_iterator( tbl, &it );
550
- return ( iterate_hash_next( &it ) == NULL );
551
- }
552
-
553
-
554
- static bool
555
- check_tx_result_and_respond( all_sw_tx *tx ) {
556
- if ( tx->tx_result == EFI_OPERATION_FAILED ) {
557
- struct event_forward_operation_to_all_request_param *all_param = tx->request_param;
558
- if ( all_param->callback != NULL ) {
559
- all_param->callback( tx->tx_result, all_param->user_data );
560
- }
561
-
562
- info( "txid %#x completed with failure.", tx->txid );
563
- // remove and cleanup tx
564
- delete_hash_entry( efi_tx_table, &tx->txid );
565
- xfree_all_sw_tx( tx );
566
- return true;
567
- }
568
- return false;
569
- }
570
-
571
-
572
- void
573
- _switch_response_timeout( void *user_data ) {
574
- struct txinfo *txinfo = user_data;
575
- const uint64_t dpid = txinfo->dpid;
576
- const uint32_t txid = txinfo->txid;
577
- // xfree( txinfo ); // cannot free since _switch_response_handler may be called later.
578
- txinfo = NULL;
579
- debug( "txid %#x switch %#" PRIx64 " time out. called", txid, dpid );
580
-
581
- all_sw_tx *tx = lookup_hash_entry( efi_tx_table, &txid );
582
- if ( tx == NULL ) {
583
- // transaction already failed. Do nothing.
584
- return;
585
- }
586
-
587
- uint64_t *dpid_in_list = lookup_hash_entry( tx->waiting_dpid, &dpid );
588
- if ( dpid_in_list != NULL ) {
589
- info( "txid %#x switch %#" PRIx64 " timed out.", txid, dpid );
590
- delete_hash_entry( tx->waiting_dpid, &dpid );
591
- xfree( dpid_in_list );
592
- tx->tx_result = EFI_OPERATION_FAILED;
593
- }
594
-
595
- check_tx_result_and_respond( tx );
596
- }
597
-
598
-
599
- void
600
- _switch_response_handler( event_forward_operation_result result, void *user_data ) {
601
- struct txinfo *txinfo = user_data;
602
- const uint64_t dpid = txinfo->dpid;
603
- const uint32_t txid = txinfo->txid;
604
- delete_timer_event( _switch_response_timeout, txinfo );
605
- xfree( txinfo );
606
- txinfo = NULL;
607
- debug( "txid %#x switch %#" PRIx64 " response.", txid, dpid );
608
-
609
- all_sw_tx *tx = lookup_hash_entry( efi_tx_table, &txid );
610
- if ( tx == NULL ) {
611
- // transaction already failed. Do nothing.
612
- return;
613
- }
614
-
615
- uint64_t *dpid_in_list = lookup_hash_entry( tx->waiting_dpid, &dpid );
616
- if ( dpid_in_list == NULL ) {
617
- // probably timed out. Do nothing.
618
- return;
619
- }
620
- delete_hash_entry( tx->waiting_dpid, &dpid );
621
- xfree( dpid_in_list );
622
- dpid_in_list = NULL;
623
-
624
- if ( result.result == EFI_OPERATION_FAILED ) {
625
- warn( "txid %#x Setting event forwarding entry to switch %#" PRIx64 " failed.", txid, dpid );
626
- tx->tx_result = EFI_OPERATION_FAILED;
627
- }
628
-
629
- bool tx_ended = check_tx_result_and_respond( tx );
630
- if ( tx_ended ) return;
631
-
632
- struct event_forward_operation_to_all_request_param *all_param = tx->request_param;
633
- if ( hash_table_is_empty( tx->waiting_dpid ) ) {
634
- // was last element in tx. callback result.
635
- if ( all_param->callback != NULL ) {
636
- all_param->callback( tx->tx_result, all_param->user_data );
637
- }
638
-
639
- info( "txid %#x complete.", tx->txid );
640
- // remove and cleanup tx
641
- delete_hash_entry( efi_tx_table, &tx->txid );
642
- xfree_all_sw_tx( tx );
643
- return;
644
- }
645
- }
646
-
647
-
648
- all_sw_tx*
649
- _insert_tx( size_t n_dpids, struct event_forward_operation_to_all_request_param *param ) {
650
- all_sw_tx *tx = xcalloc( 1, sizeof(all_sw_tx) );
651
- tx->txid = get_txid();
652
- tx->request_param = param;
653
- tx->tx_result = EFI_OPERATION_SUCCEEDED;
654
- tx->waiting_dpid = create_hash_with_size( compare_datapath_id,
655
- hash_datapath_id,
656
- ( unsigned ) n_dpids );
657
- void *dupe_tx = insert_hash_entry( efi_tx_table, &tx->txid, tx );
658
- assert( dupe_tx == NULL );
659
- return tx;
660
- }
661
-
662
-
663
- void
664
- _dispatch_to_all_switch( uint64_t *dpids, size_t n_dpids, void *user_data ) {
665
- struct event_forward_operation_to_all_request_param *param = user_data;
666
-
667
- all_sw_tx *tx = _insert_tx( n_dpids, param );
668
- info( "txid %#x Start dispatching to switches", tx->txid );
669
- debug( "dispatching to %zd switches", n_dpids );
670
- // copy dpid hash to transaction.
671
- for ( size_t i = 0 ; i < n_dpids ; ++i ) {
672
- uint64_t *dpid = xmalloc( sizeof( uint64_t ) );
673
- *dpid = dpids[i];
674
- uint64_t *dupe_dpid = insert_hash_entry( tx->waiting_dpid, dpid, dpid );
675
- if ( dupe_dpid == NULL ) {
676
- struct txinfo *txinfo = xcalloc( 1, sizeof( struct txinfo ) );
677
- txinfo->dpid = *dpid;
678
- txinfo->txid = tx->txid;
679
- bool send_ok;
680
-
681
- if ( param->add ) {
682
- send_ok = add_switch_event_forward_entry( *dpid, param->type, param->service_name, _switch_response_handler, txinfo );
683
- }
684
- else {
685
- send_ok = delete_switch_event_forward_entry( *dpid, param->type, param->service_name, _switch_response_handler, txinfo );
686
- }
687
-
688
- if ( !send_ok ) {
689
- tx->tx_result = EFI_OPERATION_FAILED;
690
- warn( "txid %#x Failed to send request to switch %#" PRIx64 ".", tx->txid, *dpid );
691
- xfree( delete_hash_entry( tx->waiting_dpid, dpid ) );
692
- dpid = NULL;
693
- xfree( txinfo );
694
- continue;
695
- }
696
-
697
- struct itimerspec interval;
698
- interval.it_interval.tv_sec = 0;
699
- interval.it_interval.tv_nsec = 0;
700
- interval.it_value.tv_sec = 5; // FIXME make this configurable?
701
- interval.it_value.tv_nsec = 0;
702
- bool set_ok = add_timer_event_callback( &interval, _switch_response_timeout, txinfo );
703
- if ( !set_ok ) {
704
- tx->tx_result = EFI_OPERATION_FAILED;
705
- warn( "txid %#x Failed to set timeout timer for switch %#" PRIx64 ".", tx->txid, *dpid );
706
- xfree( delete_hash_entry( tx->waiting_dpid, dpid ) );
707
- dpid = NULL;
708
- // txinfo will be freed by _switch_response_handler
709
- continue;
710
- }
711
- }
712
- else {
713
- warn( "Duplicate dpid returned %#." PRIx64, *dupe_dpid );
714
- xfree( dupe_dpid );
715
- }
716
- }
717
-
718
- if ( n_dpids == 0 || tx->tx_result == EFI_OPERATION_FAILED ) {
719
- if ( n_dpids == 0 ) {
720
- info( "txid %#x completed. No switches found.", tx->txid );
721
- }
722
- else if ( tx->tx_result == EFI_OPERATION_FAILED ) {
723
- info( "txid %#x completed with failure.", tx->txid );
724
- }
725
- if ( param->callback != NULL ) {
726
- param->callback( tx->tx_result, param->user_data );
727
- }
728
- // remove and cleanup tx
729
- delete_hash_entry( efi_tx_table, &tx->txid );
730
- xfree_all_sw_tx( tx );
731
- }
732
- }
733
-
734
-
735
- void
736
- _get_switch_list_after_swm_succ( event_forward_operation_result result, void *user_data ) {
737
- struct event_forward_operation_to_all_request_param *param = user_data;
738
- bool success = true;
739
- if ( result.result == EFI_OPERATION_SUCCEEDED ) {
740
- // get switch list
741
- success = send_efi_switch_list_request( _dispatch_to_all_switch, param );
742
- }
743
- else {
744
- success = false;
745
- }
746
-
747
- if ( !success ) {
748
- warn( "Failed to set event forwarding entry to switch manager." );
749
- if ( param->callback != NULL ) {
750
- param->callback( EFI_OPERATION_FAILED, param->user_data );
751
- }
752
- xfree_event_forward_operation_to_all_request_param( param );
753
- }
754
- }
755
-
756
-
757
- bool
758
- add_event_forward_entry_to_all_switches( enum efi_event_type type, const char *service_name, event_forward_entry_to_all_callback callback, void *user_data ) {
759
- struct event_forward_operation_to_all_request_param *param = xcalloc( 1, sizeof( struct event_forward_operation_to_all_request_param ) );
760
- param->add = true;
761
- param->type = type;
762
- param->service_name = xstrdup( service_name );
763
- param->callback = callback;
764
- param->user_data = user_data;
765
- bool sent_ok = add_switch_manager_event_forward_entry( type, service_name, _get_switch_list_after_swm_succ, param );
766
- if ( !sent_ok ) {
767
- xfree_event_forward_operation_to_all_request_param( param );
768
- }
769
- return sent_ok;
770
- }
771
-
772
-
773
- bool
774
- delete_event_forward_entry_to_all_switches( enum efi_event_type type, const char *service_name, event_forward_entry_to_all_callback callback, void *user_data ) {
775
- struct event_forward_operation_to_all_request_param *param = xcalloc( 1, sizeof( struct event_forward_operation_to_all_request_param ) );
776
- param->add = false;
777
- param->type = type;
778
- param->service_name = xstrdup( service_name );
779
- param->callback = callback;
780
- param->user_data = user_data;
781
- bool sent_ok = delete_switch_manager_event_forward_entry( type, service_name, _get_switch_list_after_swm_succ, param );
782
- if ( !sent_ok ) {
783
- xfree_event_forward_operation_to_all_request_param( param );
784
- }
785
- return sent_ok;
786
- }
787
-
788
-