trema 0.4.7 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
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,29 +0,0 @@
1
- #
2
- # Copyright (C) 2008-2013 NEC Corporation
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License, version 2, as
6
- # published by the Free Software Foundation.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License along
14
- # with this program; if not, write to the Free Software Foundation, Inc.,
15
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
-
17
- # the name of the plugin
18
- PLUGIN_NAME = trema
19
-
20
- # the dissector sources (without any helpers)
21
- DISSECTOR_SRC = packet-trema.c
22
-
23
- # corresponding headers
24
- DISSECTOR_INCLUDES =
25
-
26
- # Dissector helpers. They're included in the source files in this
27
- # directory, but they're not dissectors themselves, i.e. they're not
28
- # used to generate "register.c").
29
- DISSECTOR_SUPPORT_SRC =
@@ -1,39 +0,0 @@
1
- /*
2
- * Package name and version definition of tremashark
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
- #ifdef PACKAGE
22
- #undef PACKAGE
23
- #endif
24
-
25
- #define PACKAGE "trema"
26
-
27
- #ifdef VERSION
28
- #undef VERSION
29
- #endif
30
-
31
- #define VERSION "0.1.1"
32
-
33
-
34
- /*
35
- * Local variables:
36
- * c-basic-offset: 2
37
- * indent-tabs-mode: nil
38
- * End:
39
- */
@@ -1,1671 +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
- #ifdef HAVE_CONFIG_H
20
- #include "config.h"
21
- #endif
22
-
23
- #include <stdio.h>
24
- #include <stdlib.h>
25
- #include <glib.h>
26
- #include <epan/emem.h>
27
- #include <epan/packet.h>
28
- #include <epan/dissectors/packet-tcp.h>
29
- #include <epan/prefs.h>
30
- #include <epan/ipproto.h>
31
- #include <epan/etypes.h>
32
- #include <epan/addr_resolv.h>
33
- #include <epan/reassemble.h>
34
- #include <pcap/pcap.h>
35
- #include <string.h>
36
- #include <arpa/inet.h>
37
- #include "messenger.h"
38
- #include "openflow_service_interface.h"
39
-
40
-
41
- #define PROTO_TAG_TREMA "TREMA"
42
-
43
- #define NO_STRINGS NULL
44
- #define NO_MASK 0x0
45
-
46
- #define UDP_PORT_SYSLOG 514
47
-
48
- // Macro for debug use
49
- //#define PRINTF( ... ) printf( __VA_ARGS__ )
50
- #define PRINTF( ... )
51
-
52
-
53
- // Wireshark ID
54
- static int proto_trema = -1;
55
- //static dissector_handle_t trema_handle;
56
- static void dissect_trema( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree );
57
-
58
-
59
- // Structure defined in tremashark.c
60
- typedef struct message_pcap_dump_header {
61
- uint16_t dump_type;
62
- struct {
63
- uint32_t sec;
64
- uint32_t nsec;
65
- } sent_time;
66
- uint16_t app_name_len;
67
- uint16_t service_name_len;
68
- uint32_t data_len;
69
- } __attribute__( ( packed ) ) message_pcap_dump_header;
70
-
71
- typedef struct stream_id {
72
- gchar *app_name;
73
- guint16 app_name_length;
74
- gchar *service_name;
75
- guint16 service_name_length;
76
- } stream_id;
77
-
78
- // Fragmented stream information
79
- typedef struct fragmented_stream_info {
80
- stream_id stream_name; // app name and service name pair
81
- gint32 unreceived_length; // unreceived length
82
- guint32 message_length; // expected message length
83
- guint32 reassemble_id; // unique id for reassembling
84
- guint32 number; // fragment count of the stream. start from 0.
85
- gboolean temporary_length; // set TRUE until it received message_header.
86
- } fragmented_stream_info;
87
-
88
- // Packet status information
89
- typedef struct packet_status_info {
90
- guint32 packet_number;
91
- guint32 reassemble_id;
92
- } packet_status_info;
93
-
94
-
95
- // OpenFlow dissector
96
- static dissector_handle_t openflow_handle = NULL;
97
-
98
- // Ethernet dissector
99
- static dissector_handle_t ethernet_handle = NULL;
100
-
101
- // PPP dissector
102
- static dissector_handle_t ppp_handle = NULL;
103
-
104
- // IPv4 dissector
105
- static dissector_handle_t ip_handle = NULL;
106
-
107
- // Linux SLL dissector table
108
- static dissector_table_t sll_dissector_table = NULL;
109
-
110
- // UDP dissector table
111
- static dissector_table_t udp_dissector_table = NULL;
112
-
113
- // Fragment tables
114
- static GHashTable *trema_fragment_table = NULL;
115
- static GHashTable *trema_reassembled_table = NULL;
116
-
117
- // Fragment status list
118
- static GList *fragments_status = NULL;
119
- static packet_status_info **packets_status = NULL;
120
- static guint32 packets_status_size = 0; // allocated element count of packets_status;
121
-
122
- // Header fields
123
- static gint hf_dump_header = -1;
124
- static gint hf_dump_type = -1;
125
- static gint hf_dump_event_time = -1;
126
- static gint hf_dump_app_name_length = -1;
127
- static gint hf_dump_service_name_length = -1;
128
- static gint hf_dump_data_length = -1;
129
- static gint hf_dump_app_name = -1;
130
- static gint hf_dump_service_name = -1;
131
- static gint hf_message_header = -1;
132
- static gint hf_version = -1;
133
- static gint hf_message_type = -1;
134
- static gint hf_tag = -1;
135
- static gint hf_message_length = -1;
136
- static gint hf_service_header = -1;
137
- static gint hf_context_handle = -1;
138
- static gint hf_datapath_id = -1;
139
- static gint hf_service_name_length = -1;
140
- static gint hf_service_name = -1;
141
- static gint hf_transaction_id = -1;
142
- static gint hf_hex_dump = -1;
143
- static gint hf_pcap_dump_header = -1;
144
- static gint hf_pcap_dump_datalink = -1;
145
- static gint hf_pcap_dump_interface = -1;
146
- static gint hf_pcap_pkthdr = -1;
147
- static gint hf_pcap_pkthdr_ts = -1;
148
- static gint hf_pcap_pkthdr_caplen = -1;
149
- static gint hf_pcap_pkthdr_len = -1;
150
- static gint hf_syslog_dump_header = -1;
151
- static gint hf_syslog_dump_receive_time = -1;
152
- static gint hf_syslog_dump_message = -1;
153
- static gint hf_text_dump_header = -1;
154
- static gint hf_text_dump_receive_time = -1;
155
- static gint hf_text_dump_string = -1;
156
-
157
- // Subtrees
158
- static gint ett_trema = -1;
159
- static gint ett_dump_header = -1;
160
- static gint ett_message_header = -1;
161
- static gint ett_service_header = -1;
162
- static gint ett_context_handle = -1;
163
- static gint ett_pcap_dump_header = -1;
164
- static gint ett_pcap_pkthdr = -1;
165
- static gint ett_syslog_dump_header = -1;
166
- static gint ett_text_dump_header = -1;
167
-
168
- // Fragment subtrees
169
- static gint ett_trema_fragment = -1;
170
- static gint ett_trema_fragments = -1;
171
-
172
- // Fragment fields
173
- static int hf_trema_fragments = -1;
174
- static int hf_trema_fragment = -1;
175
- static int hf_trema_fragment_overlap = -1;
176
- static int hf_trema_fragment_overlap_conflict = -1;
177
- static int hf_trema_fragment_multiple_tails = -1;
178
- static int hf_trema_fragment_too_long_fragment = -1;
179
- static int hf_trema_fragment_error = -1;
180
- #ifndef WIRESHARK_VERSION_OLDER_THAN_160
181
- static int hf_trema_fragment_count = -1;
182
- #endif
183
-
184
- // Reassembled in field
185
- static int hf_trema_reassembled_in = -1;
186
-
187
- // Reassembled length field
188
- static int hf_trema_reassembled_length = -1;
189
-
190
-
191
- enum {
192
- MESSAGE_TYPE_NOTIFY,
193
- MESSAGE_TYPE_REQUEST,
194
- MESSAGE_TYPE_REPLY,
195
- };
196
-
197
-
198
- // Names to bind to various values in the type field
199
- static const value_string names_dump_type[] = {
200
- { MESSENGER_DUMP_SENT, "Sent" },
201
- { MESSENGER_DUMP_RECEIVED, "Received" },
202
- { MESSENGER_DUMP_RECV_CONNECTED, "Receive Connected" },
203
- { MESSENGER_DUMP_RECV_OVERFLOW, "Receive Overflow" },
204
- { MESSENGER_DUMP_RECV_CLOSED, "Receive Closed" },
205
- { MESSENGER_DUMP_SEND_CONNECTED, "Send Connected" },
206
- { MESSENGER_DUMP_SEND_REFUSED, "Send Refused" },
207
- { MESSENGER_DUMP_SEND_OVERFLOW, "Send Overflow" },
208
- { MESSENGER_DUMP_SEND_CLOSED, "Send Closed" },
209
- { MESSENGER_DUMP_LOGGER, "Log Message" },
210
- { MESSENGER_DUMP_PCAP, "Packet Capture" },
211
- { MESSENGER_DUMP_SYSLOG, "Syslog" },
212
- { MESSENGER_DUMP_TEXT, "Text" },
213
- { 0, NULL },
214
- };
215
-
216
- static const value_string names_message_type[] = {
217
- { MESSAGE_TYPE_NOTIFY, "Notify" },
218
- { MESSAGE_TYPE_REQUEST, "Request" },
219
- { MESSAGE_TYPE_REPLY, "Reply" },
220
- { 0, NULL },
221
- };
222
-
223
- static const value_string names_service_tag[] = {
224
- { MESSENGER_OPENFLOW_MESSAGE, "OpenFlow Message" },
225
- { MESSENGER_OPENFLOW_CONNECTED, "Switch Connected" },
226
- { MESSENGER_OPENFLOW_READY, "Switch Ready" },
227
- { MESSENGER_OPENFLOW_DISCONNECTED, "Switch Disconnected" },
228
- { MESSENGER_OPENFLOW_FAILD_TO_CONNECT, "Switch Failed to connect" },
229
- { 0, NULL },
230
- };
231
-
232
- // Names to bind to various datalink type values
233
- static const value_string names_datalink_type[] = {
234
- { DLT_EN10MB, "Ethernet (10Mb)" },
235
- { DLT_PPP, "Point-to-point protocol" },
236
- { DLT_RAW, "Raw IP" },
237
- { DLT_LINUX_SLL, "Linux cooked sockets" },
238
- { 0, NULL },
239
- };
240
-
241
- static const fragment_items trema_fragment_items = {
242
- // Fragment subtrees
243
- &ett_trema_fragment,
244
- &ett_trema_fragments,
245
- // Fragment fields
246
- &hf_trema_fragments,
247
- &hf_trema_fragment,
248
- &hf_trema_fragment_overlap,
249
- &hf_trema_fragment_overlap_conflict,
250
- &hf_trema_fragment_multiple_tails,
251
- &hf_trema_fragment_too_long_fragment,
252
- &hf_trema_fragment_error,
253
- #ifndef WIRESHARK_VERSION_OLDER_THAN_160
254
- &hf_trema_fragment_count,
255
- #endif
256
- // Reassembled in field
257
- &hf_trema_reassembled_in,
258
- // Reassembled length field
259
- &hf_trema_reassembled_length,
260
- // Tag
261
- "Trema fragments"
262
- };
263
-
264
-
265
- /** Check the status whether the packet_number exists.
266
- *
267
- * return TRUE when it exists.
268
- */
269
- static gboolean
270
- check_packet_status( guint32 packet_number ) {
271
- if ( packet_number == 0 || packet_number > packets_status_size ) {
272
- return FALSE;
273
- }
274
-
275
- if ( packets_status[ packet_number - 1 ] ) {
276
- return TRUE;
277
- }
278
- return FALSE;
279
- }
280
-
281
-
282
- /** Update packet_status
283
- *
284
- * This function would overwrite information when any data already exists.
285
- */
286
- static void
287
- update_packet_status( guint32 packet_number, guint32 reassemble_id ) {
288
- const guint32 PACKET_STATUS_CHUNK_SIZE = 1000;
289
-
290
- guint32 current_size = packets_status_size;
291
- packet_status_info *p = NULL;
292
-
293
- // This should use '>=' to keep NULL termination for free.
294
- while ( packet_number >= packets_status_size ) {
295
- packets_status_size += PACKET_STATUS_CHUNK_SIZE;
296
- }
297
-
298
- if ( packets_status_size > current_size ) {
299
- // extend pointer table
300
- packet_status_info **new_table_buffer = g_malloc( packets_status_size * sizeof( packet_status_info * ) );
301
- memset( new_table_buffer, 0, packets_status_size * sizeof( packet_status_info * ) );
302
- if ( packets_status != NULL ) {
303
- memcpy( ( void * ) new_table_buffer, ( void * ) packets_status, current_size * sizeof( packet_status_info * ) );
304
- g_free( packets_status );
305
- }
306
- packets_status = new_table_buffer;
307
- }
308
-
309
- if ( packets_status[ packet_number - 1 ] == NULL ) {
310
- packets_status[ packet_number - 1 ] = g_malloc( sizeof( packet_status_info ) );
311
- }
312
- p = packets_status[ packet_number - 1 ];
313
- p->packet_number = packet_number;
314
- p->reassemble_id = reassemble_id;
315
- }
316
-
317
-
318
- /** Get packet status information
319
- */
320
- static packet_status_info *
321
- get_packet_status( guint32 packet_number ) {
322
- packet_status_info *p = NULL;
323
-
324
- if ( check_packet_status( packet_number ) ) {
325
- p = packets_status[ packet_number - 1 ];
326
- }
327
-
328
- return p;
329
- }
330
-
331
-
332
- /** Clear packet status
333
- */
334
- static void
335
- clear_packet_status() {
336
- if ( packets_status != NULL ) {
337
- guint count;
338
-
339
- for ( count = 0; count < packets_status_size; count++ ) {
340
- if ( packets_status[ count ] ) {
341
- g_free( packets_status[ count ] );
342
- }
343
- }
344
- g_free( packets_status );
345
- packets_status = NULL;
346
- packets_status_size = 0;
347
- }
348
- }
349
-
350
-
351
- /** Get app name and service name, this pair can be used as stream name.
352
- */
353
- static void
354
- get_stream_id( tvbuff_t *tvb, stream_id *stream_name ) {
355
- assert( tvb != NULL );
356
- assert( stream_name != NULL );
357
-
358
- stream_name->app_name_length = tvb_get_ntohs( tvb, offsetof( message_pcap_dump_header, app_name_len ) );
359
- stream_name->app_name = tvb_format_text( tvb, sizeof( message_pcap_dump_header ), stream_name->app_name_length - 1 );
360
- stream_name->service_name_length = tvb_get_ntohs( tvb, offsetof( message_pcap_dump_header, service_name_len ) );
361
- stream_name->service_name = tvb_format_text( tvb, sizeof( message_pcap_dump_header ) + stream_name->app_name_length,
362
- stream_name->service_name_length - 1 );
363
- }
364
-
365
-
366
- /** Generate a unique reassemble_id.
367
- */
368
- static guint32
369
- generate_reassemble_id() {
370
- guint32 new_id = 1; // The lowest id is 1, 0 means non fragmentation
371
-
372
- if ( packets_status != NULL ) {
373
- guint count;
374
-
375
- for ( count = 0; count < packets_status_size; count++ ) {
376
- if ( packets_status[ count ] ) {
377
- packet_status_info *p = packets_status[ count ];
378
- if ( new_id == p->reassemble_id ) {
379
- new_id++;
380
- count = 0;
381
- continue;
382
- }
383
- }
384
- }
385
- }
386
-
387
- return new_id;
388
- }
389
-
390
-
391
- /** Confirm status of fragment whether it received enough fragments or not.
392
- *
393
- * return TRUE if the stream information indicates it needs more fragment,
394
- * FALSE means the stream has enough fragments, it can be reassembled.
395
- */
396
- static gboolean
397
- is_last_fragment( fragmented_stream_info *fragment_info ) {
398
- assert( fragment_info != NULL );
399
-
400
- if ( fragment_info->unreceived_length <= 0 ) {
401
- return FALSE;
402
- }
403
- return TRUE;
404
- }
405
-
406
-
407
- /** Trim a message from packet payload.
408
- *
409
- * 'offset' points at message header.
410
- * Return new subset tvbuff of a message.
411
- * If given tvb is not enough length, return NULL.
412
- */
413
- static tvbuff_t *
414
- trim_message( tvbuff_t *tvb, gint offset ) {
415
- guint32 length = tvb_length( tvb );
416
- guint32 message_length;
417
-
418
- assert( tvb != NULL );
419
-
420
- if ( length < sizeof( message_header ) ) {
421
- PRINTF( "trim() failed length %d\n", length );
422
- return NULL;
423
- }
424
- message_length = tvb_get_ntohl( tvb, offset + offsetof( message_header, message_length ) );
425
- if ( length < message_length ) {
426
- PRINTF( "trim() failed length %d message_length %d\n", length, message_length );
427
- return NULL;
428
- }
429
- return tvb_new_subset( tvb, offset, message_length, message_length );
430
- }
431
-
432
-
433
- /** Get fragmented_stream_info from the current fragments_status by stream_name.
434
- */
435
- static fragmented_stream_info *
436
- get_fragmented_stream_info( stream_id *stream_name ) {
437
- GList *element;
438
-
439
- assert( stream_name != NULL );
440
-
441
- if ( fragments_status == NULL ) {
442
- return NULL;
443
- }
444
-
445
- for ( element = g_list_first( fragments_status ); element != NULL; element = element->next ) {
446
- if ( element->data != NULL ) {
447
- fragmented_stream_info *fragment_info = element->data;
448
- if ( strncmp( fragment_info->stream_name.app_name, stream_name->app_name, stream_name->app_name_length - 1 ) == 0 &&
449
- strncmp( fragment_info->stream_name.service_name, stream_name->service_name, stream_name->service_name_length - 1 ) == 0 ) {
450
- return fragment_info;
451
- }
452
- }
453
- }
454
-
455
- return NULL;
456
- }
457
-
458
-
459
- /** Add a new fragmented stream information to fragment status list.
460
- *
461
- * 'offset' points at begging of messages.
462
- * return updated fragmented streasm info.
463
- */
464
- static fragmented_stream_info *
465
- add_fragmented_stream_info( tvbuff_t *tvb, gint offset, stream_id *stream_name ) {
466
- fragmented_stream_info *fragment_info;
467
-
468
- assert( tvb != NULL );
469
- assert( stream_name != NULL );
470
- assert( get_fragmented_stream_info( stream_name ) == NULL );
471
-
472
- PRINTF( " ** add_fragmented_stream_info\n" );
473
- guint32 received_message_length = tvb_length_remaining( tvb, offset );
474
- fragment_info = g_malloc( sizeof( fragmented_stream_info ) );
475
- fragment_info->stream_name.app_name = g_malloc( stream_name->app_name_length );
476
- memset( fragment_info->stream_name.app_name, 0, stream_name->app_name_length );
477
- strncpy( fragment_info->stream_name.app_name, stream_name->app_name, stream_name->app_name_length - 1 );
478
- fragment_info->stream_name.app_name_length = stream_name->app_name_length;
479
- fragment_info->stream_name.service_name = g_malloc( stream_name->service_name_length );
480
- memset( fragment_info->stream_name.service_name, 0, stream_name->service_name_length );
481
- strncpy( fragment_info->stream_name.service_name, stream_name->service_name, stream_name->service_name_length - 1 );
482
- fragment_info->stream_name.service_name_length = stream_name->service_name_length;
483
- if ( received_message_length < sizeof( message_header ) ) {
484
- /* this case cannot calculate message length until reassembling message_header.
485
- * we need next fragment to build whole message_header.
486
- */
487
- PRINTF( " - received stream is less than message_header\n" );
488
- fragment_info->message_length = sizeof( message_header );
489
- fragment_info->temporary_length = TRUE;
490
- }
491
- else {
492
- fragment_info->message_length = tvb_get_ntohl( tvb, offset + offsetof( message_header, message_length ) );
493
- fragment_info->temporary_length = FALSE;
494
- }
495
-
496
- fragment_info->unreceived_length = fragment_info->message_length - received_message_length;
497
- fragment_info->reassemble_id = generate_reassemble_id();
498
- fragment_info->number = 0;
499
-
500
- fragments_status = g_list_prepend( fragments_status, fragment_info );
501
-
502
- PRINTF( " - unreceived_length %d message_length %u reassemble_id %d\n",
503
- fragment_info->unreceived_length, fragment_info->message_length, fragment_info->reassemble_id );
504
-
505
- return fragment_info;
506
- }
507
-
508
-
509
- /** Reset fragmented stream information with reassembled message which includes message_header.
510
- * This function should be invoked when message_header is reassembled.
511
- *
512
- * return updated fragmented streasm info.
513
- */
514
- static fragmented_stream_info *
515
- reset_fragmented_stream_info( tvbuff_t *reassembled_tvb, fragmented_stream_info *fragment_info ) {
516
- guint32 received_message_length;
517
-
518
- assert( reassembled_tvb != NULL );
519
- assert( fragment_info != NULL );
520
- assert( fragment_info->temporary_length == TRUE );
521
-
522
- PRINTF( " ** reset_fragmented_stream_info reassemble_id %d\n", fragment_info->reassemble_id );
523
- received_message_length = tvb_reported_length( reassembled_tvb );
524
- assert( received_message_length >= sizeof( message_header ) );
525
-
526
- fragment_info->message_length = tvb_get_ntohl( reassembled_tvb, offsetof( message_header, message_length ) );
527
- fragment_info->unreceived_length = fragment_info->message_length - received_message_length;
528
- fragment_info->temporary_length = FALSE;
529
-
530
- PRINTF( " - unreceived_length %d message_length %u reassemble_id %d\n",
531
- fragment_info->unreceived_length, fragment_info->message_length, fragment_info->reassemble_id );
532
- return fragment_info;
533
- }
534
-
535
-
536
- /** Update fragment status list with new fragmented stream information.
537
- *
538
- * 'offset' points at beginning of inner message.
539
- * return updated fragmented streasm info.
540
- */
541
- static fragmented_stream_info *
542
- update_fragmented_stream_info( tvbuff_t *tvb, gint offset, fragmented_stream_info *fragment_info ) {
543
- assert( tvb != NULL );
544
- assert( fragment_info != NULL );
545
-
546
- PRINTF( " ** update_fragmented_stream_info reassemble_id %d\n", fragment_info->reassemble_id );
547
- fragment_info->unreceived_length -= tvb_reported_length_remaining( tvb, offset );
548
- fragment_info->number++;
549
- PRINTF( " - unreceived_length %d message_length %u reassemble_id %d\n",
550
- fragment_info->unreceived_length, fragment_info->message_length, fragment_info->reassemble_id );
551
- return fragment_info;
552
- }
553
-
554
-
555
- /** Inner function to remove fragmented stream information in dlist
556
- */
557
- static void
558
- free_fragmented_stream_info( fragmented_stream_info *info ) {
559
- if ( info != NULL ) {
560
- g_free( info->stream_name.app_name );
561
- g_free( info->stream_name.service_name );
562
- g_free( info );
563
- }
564
- }
565
-
566
-
567
- /** Inner function to remove fragmented stream information in dlist
568
- */
569
- static void
570
- delete_fragmented_stream_info( fragmented_stream_info *fragment_info ) {
571
- if ( fragment_info != NULL ) {
572
- fragments_status = g_list_remove( fragments_status, fragment_info );
573
- free_fragmented_stream_info( fragment_info );
574
- }
575
- }
576
-
577
-
578
- /** Remove a fragment stream information from fragment status list.
579
- */
580
- static gboolean
581
- remove_fragmented_stream_info( fragmented_stream_info *fragment_info ) {
582
- GList *element;
583
-
584
- assert( fragment_info != NULL );
585
-
586
- PRINTF( " ** remove_fragmented_stream_info reassemble_id %d\n", fragment_info->reassemble_id );
587
- if ( fragments_status == NULL ) {
588
- return FALSE;
589
- }
590
-
591
- element = g_list_find( fragments_status, fragment_info );
592
- if ( element == NULL ) {
593
- return FALSE;
594
- }
595
- delete_fragmented_stream_info( element->data );
596
-
597
- return TRUE;
598
- }
599
-
600
-
601
- static void
602
- clear_fragmented_stream_info_walker( gpointer fragment_info, gpointer user_data ) {
603
- if ( fragment_info != NULL ) {
604
- free_fragmented_stream_info( fragment_info );
605
- }
606
- }
607
-
608
-
609
- /** Clear all fragment status
610
- */
611
- static void
612
- clear_fragmented_stream_info() {
613
- PRINTF( " ** clear_fragmented_stream_info\n" );
614
-
615
- if ( fragments_status != NULL ) {
616
- g_list_foreach( fragments_status, clear_fragmented_stream_info_walker, NULL );
617
- g_list_free( fragments_status );
618
- fragments_status = NULL;
619
- }
620
- }
621
-
622
-
623
- /** Add a new fragmented message to hash table and reassemble the fragments if possible.
624
- *
625
- * 'offset' which point at beginning of message.
626
- * 'fragment_info' has fragment information of target stream.
627
- *
628
- * return NULL if there is not enough fragments yet.
629
- */
630
- static tvbuff_t *
631
- reassemble_message( tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree, fragmented_stream_info *fragment_info ) {
632
- packet_status_info *packet_status;
633
- gboolean save_fragmented;
634
- gboolean more_fragment;
635
- fragment_data *fragment_message;
636
- tvbuff_t *new_tvb;
637
-
638
- assert( tvb != NULL );
639
- assert( pinfo != NULL );
640
- assert( tree != NULL );
641
- assert( fragment_info != NULL );
642
-
643
- packet_status = get_packet_status( pinfo->fd->num );
644
- assert( packet_status != NULL );
645
-
646
- save_fragmented = pinfo->fragmented;
647
- more_fragment = is_last_fragment( fragment_info );
648
-
649
- pinfo->fragmented = TRUE;
650
- fragment_message = fragment_add_seq_next( tvb, offset, pinfo, packet_status->reassemble_id,
651
- trema_fragment_table, trema_reassembled_table,
652
- tvb_length_remaining( tvb, offset ), more_fragment );
653
-
654
- new_tvb = process_reassembled_data( tvb, offset, pinfo, "Reassembled Trema",
655
- fragment_message, &trema_fragment_items, NULL, tree );
656
-
657
- if ( fragment_message ) {
658
- // Reassembled
659
- col_append_str( pinfo->cinfo, COL_INFO, " (Message reassembled)" );
660
- PRINTF( " reassemble_message() reassembled\n" );
661
- }
662
- else {
663
- // Not last packet of reassembled
664
- col_append_fstr( pinfo->cinfo, COL_INFO, " (Message fragment %u)", fragment_info->number );
665
- PRINTF( " reassemble_message() not last packet\n" );
666
- }
667
-
668
- pinfo->fragmented = save_fragmented;
669
- return new_tvb;
670
- }
671
-
672
-
673
- /** Get reassembled message
674
- */
675
- static tvbuff_t *
676
- get_reassembled_message( tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree, stream_id *stream_name ) {
677
- unsigned int save_visited;
678
- gboolean save_fragmented;
679
- gboolean more_fragment;
680
- fragmented_stream_info *fragment_info;
681
- packet_status_info *packet_status = NULL;
682
- fragment_data *fragment_message = NULL;
683
- tvbuff_t *reassembled_tvb = NULL;
684
-
685
- assert( tvb != NULL );
686
- assert( pinfo != NULL );
687
- assert( tree != NULL );
688
- assert( stream_name != NULL );
689
-
690
- packet_status = get_packet_status( pinfo->fd->num );
691
- assert( packet_status != NULL );
692
-
693
- more_fragment = FALSE;
694
- fragment_info = get_fragmented_stream_info( stream_name );
695
- if ( fragment_info != NULL ) {
696
- if ( fragment_info->reassemble_id == packet_status->reassemble_id ) {
697
- // this fragment has not closed yet, it still needs more packets
698
- more_fragment = TRUE;
699
- }
700
- }
701
- save_visited = pinfo->fd->flags.visited;
702
- pinfo->fd->flags.visited = 1;
703
- save_fragmented = pinfo->fragmented;
704
- pinfo->fragmented = TRUE;
705
-
706
- fragment_message = fragment_add_seq_next( tvb, offset, pinfo, packet_status->reassemble_id,
707
- trema_fragment_table, trema_reassembled_table,
708
- tvb_length_remaining( tvb, offset ), more_fragment );
709
- reassembled_tvb = process_reassembled_data( tvb, offset, pinfo, "Reassembled Trema",
710
- fragment_message, &trema_fragment_items, NULL, tree );
711
-
712
- pinfo->fragmented = save_fragmented;
713
- pinfo->fd->flags.visited = save_visited;
714
-
715
- return reassembled_tvb;
716
- }
717
-
718
-
719
- /** Update fragment status and store fragmented stream in hash table.
720
- * if it can reassemble entire message, do it and removes the fragment information.
721
- *
722
- * return reassembled stream if possible, otherwise return NULL.
723
- */
724
- static tvbuff_t *
725
- update_fragment_status( tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree,
726
- fragmented_stream_info *fragment_info, stream_id *stream_name ) {
727
- tvbuff_t *reassembled_tvb;
728
-
729
- assert( tvb != NULL );
730
- assert( pinfo != NULL );
731
- assert( tree != NULL );
732
- assert( ( fragment_info != NULL && stream_name == NULL ) ||
733
- ( fragment_info == NULL && stream_name != NULL ) );
734
-
735
- if ( fragment_info == NULL ) {
736
- fragment_info = add_fragmented_stream_info( tvb, offset, stream_name );
737
- }
738
- else {
739
- fragment_info = update_fragmented_stream_info( tvb, offset, fragment_info );
740
- }
741
- update_packet_status( pinfo->fd->num, fragment_info->reassemble_id );
742
- reassembled_tvb = reassemble_message( tvb, offset, pinfo, tree, fragment_info );
743
-
744
- if ( reassembled_tvb != NULL ) {
745
- // reassembled done
746
- if ( fragment_info->unreceived_length <= 0 &&
747
- fragment_info->temporary_length == TRUE ) {
748
- // reassembled one includes at least message_header
749
- fragment_info = reset_fragmented_stream_info( reassembled_tvb, fragment_info );
750
- }
751
-
752
- if ( fragment_info->unreceived_length <= 0 ) {
753
- // reassembled entire message
754
- remove_fragmented_stream_info( fragment_info );
755
- }
756
- else {
757
- // reassembled a part of message which includes header
758
-
759
- // store again the reassembled message as a first fragment of whole message
760
- reassemble_message( reassembled_tvb, 0, pinfo, tree, fragment_info );
761
- }
762
- }
763
-
764
- return reassembled_tvb;
765
- }
766
-
767
-
768
- static void
769
- init_trema_fragment() {
770
- // Initialize tables for reassembling
771
- fragment_table_init( &trema_fragment_table );
772
- reassembled_table_init( &trema_reassembled_table );
773
-
774
- // Clear fragment status information
775
- clear_fragmented_stream_info();
776
-
777
- // Clear packet status information
778
- clear_packet_status();
779
- }
780
-
781
-
782
- static gint
783
- dissect_message_pcap_dump_header( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree, guint16 *dump_type ) {
784
- /*
785
- +------------------------+--------+------------+----+
786
- |message_pcap_dump_header|app_name|service_name|data|
787
- +------------------------+--------+------------+----+
788
-
789
- typedef struct message_pcap_dump_header {
790
- uint16_t dump_type;
791
- struct {
792
- uint32_t sec;
793
- uint32_t nsec;
794
- } sent_time;
795
- uint16_t app_name_len;
796
- uint16_t service_name_len;
797
- uint32_t data_len;
798
- } __attribute__( ( packed ) ) message_pcap_dump_header;
799
- */
800
-
801
- gchar *src, *dst;
802
- gint offset = 0;
803
- *dump_type = tvb_get_ntohs( tvb, 0 );
804
- guint16 app_name_len = tvb_get_ntohs( tvb, offsetof( message_pcap_dump_header, app_name_len ) );
805
- guint16 service_name_len = tvb_get_ntohs( tvb, offsetof( message_pcap_dump_header, service_name_len ) );
806
-
807
- if ( check_col( pinfo->cinfo, COL_DEF_SRC ) ) {
808
- src = tvb_format_text( tvb, sizeof( message_pcap_dump_header ), app_name_len - 1 );
809
- if ( *dump_type != MESSENGER_DUMP_RECEIVED ) {
810
- col_add_str( pinfo->cinfo, COL_DEF_SRC, src );
811
- }
812
- }
813
-
814
- if ( check_col( pinfo->cinfo, COL_DEF_DST ) ) {
815
- dst = tvb_format_text( tvb, sizeof( message_pcap_dump_header ) + app_name_len, service_name_len - 1 );
816
- col_add_str( pinfo->cinfo, COL_DEF_DST, dst );
817
- }
818
-
819
- if ( check_col( pinfo->cinfo, COL_INFO ) ) {
820
- switch ( *dump_type ) {
821
- case MESSENGER_DUMP_SENT:
822
- case MESSENGER_DUMP_RECEIVED:
823
- case MESSENGER_DUMP_RECV_CONNECTED:
824
- case MESSENGER_DUMP_RECV_OVERFLOW:
825
- case MESSENGER_DUMP_RECV_CLOSED:
826
- case MESSENGER_DUMP_SEND_CONNECTED:
827
- case MESSENGER_DUMP_SEND_REFUSED:
828
- case MESSENGER_DUMP_SEND_OVERFLOW:
829
- case MESSENGER_DUMP_SEND_CLOSED:
830
- {
831
- if ( g_ascii_strcasecmp( src, dst ) == 0 ) {
832
- col_add_fstr( pinfo->cinfo, COL_INFO, "%s (%s)",
833
- src, names_dump_type[ *dump_type ].strptr );
834
- }
835
- else {
836
- col_add_fstr( pinfo->cinfo, COL_INFO, "%s > %s (%s)",
837
- src, dst, names_dump_type[ *dump_type ].strptr );
838
- }
839
- }
840
- break;
841
-
842
- case MESSENGER_DUMP_PCAP:
843
- {
844
- col_add_fstr( pinfo->cinfo, COL_INFO, "%s (%s)",
845
- src, names_dump_type[ *dump_type ].strptr );
846
- }
847
- break;
848
-
849
- case MESSENGER_DUMP_LOGGER:
850
- case MESSENGER_DUMP_SYSLOG:
851
- case MESSENGER_DUMP_TEXT:
852
- {
853
- col_add_fstr( pinfo->cinfo, COL_INFO, "(%s)", names_dump_type[ *dump_type ].strptr );
854
- }
855
- break;
856
- default:
857
- break;
858
- }
859
- }
860
-
861
- if ( trema_tree != NULL ) {
862
- proto_tree *dump_header_tree = NULL;
863
- proto_item *ti = NULL;
864
-
865
- offset = 0;
866
-
867
- ti = proto_tree_add_item( trema_tree, hf_dump_header, tvb, offset, 18, FALSE );
868
- dump_header_tree = proto_item_add_subtree( ti, ett_dump_header );
869
-
870
- proto_tree_add_item( dump_header_tree, hf_dump_type, tvb, offset, 2, FALSE );
871
- offset += 2;
872
- nstime_t sent_time;
873
- sent_time.secs = tvb_get_ntohl( tvb, offset );
874
- sent_time.nsecs = tvb_get_ntohl( tvb, offset + 4 );
875
- proto_tree_add_time( dump_header_tree, hf_dump_event_time, tvb, offset, 8, &sent_time );
876
- offset += 8;
877
- proto_tree_add_item( dump_header_tree, hf_dump_app_name_length, tvb, offset, 2, FALSE );
878
- guint16 app_name_len = tvb_get_ntohs( tvb, offset );
879
- offset += 2;
880
- proto_tree_add_item( dump_header_tree, hf_dump_service_name_length, tvb, offset, 2, FALSE );
881
- guint16 service_name_len = tvb_get_ntohs( tvb, offset );
882
- offset += 2;
883
- proto_tree_add_item( dump_header_tree, hf_dump_data_length, tvb, offset, 4, FALSE );
884
- offset += 4;
885
-
886
- if ( app_name_len > 0 ) {
887
- proto_tree_add_item( trema_tree, hf_dump_app_name, tvb, offset, app_name_len, FALSE );
888
- offset += app_name_len;
889
- }
890
- if ( service_name_len > 0 ) {
891
- proto_tree_add_item( trema_tree, hf_dump_service_name, tvb, offset, service_name_len, FALSE );
892
- offset += service_name_len;
893
- }
894
- }
895
-
896
- return offset;
897
- }
898
-
899
-
900
- static gint
901
- dissect_openflow_service_header( tvbuff_t *tvb, gint offset, proto_tree *trema_tree ) {
902
- gint head = offset;
903
-
904
- guint16 service_name_len = tvb_get_ntohs( tvb, offset + 8 );
905
-
906
- if ( trema_tree != NULL ) {
907
- proto_tree *service_header_tree = NULL;
908
- proto_item *ti = NULL;
909
-
910
- ti = proto_tree_add_item( trema_tree, hf_service_header, tvb, offset,
911
- sizeof( openflow_service_header_t ), FALSE );
912
- service_header_tree = proto_item_add_subtree( ti, ett_service_header );
913
-
914
- proto_tree_add_item( service_header_tree, hf_datapath_id, tvb, offset, 8, FALSE );
915
- offset += 8;
916
- proto_tree_add_item( service_header_tree, hf_service_name_length, tvb, offset, 2, FALSE );
917
- offset += 2;
918
- if ( service_name_len > 0 ) {
919
- proto_tree_add_item( service_header_tree, hf_service_name, tvb, offset, service_name_len, FALSE );
920
- offset += service_name_len;
921
- }
922
- }
923
-
924
- return ( offset - head );
925
- }
926
-
927
-
928
- static void
929
- dissect_openflow( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree ) {
930
- if ( openflow_handle != NULL ) {
931
- if ( check_col( pinfo->cinfo, COL_PROTOCOL ) ) {
932
- col_append_str( pinfo->cinfo, COL_PROTOCOL, "+" );
933
- }
934
-
935
- if ( check_col( pinfo->cinfo, COL_INFO ) ) {
936
- col_append_str( pinfo->cinfo, COL_INFO, " => " );
937
- }
938
-
939
- col_set_fence( pinfo->cinfo, COL_PROTOCOL );
940
- col_set_fence( pinfo->cinfo, COL_INFO );
941
-
942
- call_dissector( openflow_handle, tvb, pinfo, trema_tree );
943
- }
944
- else {
945
- // FIXME: do something here...
946
- }
947
- }
948
-
949
-
950
- static gint
951
- dissect_context_handle( tvbuff_t *tvb, gint offset, proto_tree *trema_tree ) {
952
- gint head = offset;
953
-
954
- guint16 service_name_len = tvb_get_ntohs( tvb, offset + 4 );
955
-
956
- if ( trema_tree != NULL ) {
957
- proto_tree *context_handle_tree = NULL;
958
- proto_item *ti = NULL;
959
-
960
- ti = proto_tree_add_item( trema_tree, hf_context_handle, tvb, offset,
961
- sizeof( messenger_context_handle ), FALSE );
962
- context_handle_tree = proto_item_add_subtree( ti, ett_context_handle );
963
-
964
- proto_tree_add_item( context_handle_tree, hf_transaction_id, tvb, offset, 4, FALSE );
965
- offset += 4;
966
- proto_tree_add_item( context_handle_tree, hf_service_name_length, tvb, offset, 2, FALSE );
967
- offset += 2;
968
- offset += 2; // padding
969
- if ( service_name_len > 0 ) {
970
- proto_tree_add_item( context_handle_tree, hf_service_name, tvb, offset, service_name_len, FALSE );
971
- offset += service_name_len;
972
- }
973
- }
974
-
975
- return ( offset - head );
976
- }
977
-
978
-
979
- static gint
980
- dissect_message_dump( tvbuff_t *tvb, gint offset, proto_tree *trema_tree ) {
981
- gint length = tvb_length_remaining( tvb, offset );
982
-
983
- assert( tvb != NULL );
984
- assert( trema_tree != NULL );
985
-
986
- PRINTF( "dissect_message_dump()\n" );
987
-
988
- if ( length > 0 ) {
989
- proto_tree_add_item( trema_tree, hf_hex_dump, tvb, offset, length, FALSE );
990
- }
991
-
992
- return length;
993
- }
994
-
995
-
996
- static gint
997
- dissect_message_dump_with_length( tvbuff_t *tvb, gint offset, gint length, proto_tree *trema_tree ) {
998
- gint remaining_length = tvb_length_remaining( tvb, offset );
999
-
1000
- assert( tvb != NULL );
1001
- assert( trema_tree != NULL );
1002
-
1003
- PRINTF( "dissect_message_dump()\n" );
1004
-
1005
- if ( remaining_length < length ) {
1006
- length = remaining_length;
1007
- }
1008
-
1009
- proto_tree_add_item( trema_tree, hf_hex_dump, tvb, offset, length, FALSE );
1010
-
1011
- return length;
1012
- }
1013
-
1014
-
1015
- static gint
1016
- dissect_message_header( tvbuff_t *tvb, packet_info *pinfo, gint offset, proto_tree *trema_tree ) {
1017
- /*
1018
- typedef struct message_header {
1019
- uint8_t version; // version = 0 (unused)
1020
- uint8_t message_type; // MESSAGE_TYPE_
1021
- uint16_t tag; // user defined
1022
- uint32_t message_length; // message length including header
1023
- uint8_t value[ 0 ];
1024
- } message_header;
1025
- */
1026
-
1027
- gint head = offset;
1028
- guint8 message_type = tvb_get_guint8( tvb, offset + 1 );
1029
- guint16 tag = tvb_get_ntohs( tvb, offset + 2 );
1030
- guint32 message_length = tvb_get_ntohl( tvb, offset + 4 );
1031
-
1032
- PRINTF( "dissect_message_header()\n" );
1033
-
1034
- if ( trema_tree != NULL ) {
1035
- proto_tree *message_header_tree = NULL;
1036
- proto_item *ti = NULL;
1037
-
1038
- ti = proto_tree_add_item( trema_tree, hf_message_header, tvb, offset,
1039
- sizeof( message_header ), FALSE );
1040
- message_header_tree = proto_item_add_subtree( ti, ett_message_header );
1041
-
1042
- proto_tree_add_item( message_header_tree, hf_version, tvb, offset, 1, FALSE );
1043
- offset += 1;
1044
- proto_tree_add_item( message_header_tree, hf_message_type, tvb, offset, 1, FALSE );
1045
- offset += 1;
1046
- proto_tree_add_item( message_header_tree, hf_tag, tvb, offset, 2, FALSE );
1047
- offset += 2;
1048
- proto_tree_add_item( message_header_tree, hf_message_length, tvb, offset, 4, FALSE );
1049
- offset += 4;
1050
-
1051
- if ( message_type == MESSAGE_TYPE_NOTIFY &&
1052
- tag >= MESSENGER_OPENFLOW_MESSAGE &&
1053
- tag <= MESSENGER_OPENFLOW_DISCONNECTED ) {
1054
- offset += dissect_openflow_service_header( tvb, offset, trema_tree );
1055
-
1056
- if ( tag == MESSENGER_OPENFLOW_MESSAGE && openflow_handle != NULL ) {
1057
- guint16 total_len = tvb_reported_length_remaining( tvb, offset );
1058
- if ( total_len > 0 ) {
1059
- tvbuff_t *next_tvb = tvb_new_subset( tvb, offset, -1, total_len );
1060
- dissect_openflow( next_tvb, pinfo, trema_tree );
1061
- }
1062
- offset += total_len;
1063
- }
1064
- }
1065
- else if ( message_type == MESSAGE_TYPE_REQUEST ||
1066
- message_type == MESSAGE_TYPE_REPLY ) {
1067
- offset += dissect_context_handle( tvb, offset, trema_tree );
1068
- }
1069
-
1070
- guint remaining_len = message_length - ( offset - head );
1071
- if ( remaining_len > 0 ) {
1072
- offset += dissect_message_dump_with_length( tvb, offset, remaining_len, trema_tree );
1073
- }
1074
- }
1075
-
1076
- return ( offset - head );
1077
- }
1078
-
1079
-
1080
- static void
1081
- dissect_trema_ipc( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *trema_tree,
1082
- gint offset, gboolean visited, stream_id *stream_name ) {
1083
- gint remaining_length = 0;
1084
- tvbuff_t *messages_tvb;
1085
- tvbuff_t *next_tvb;
1086
-
1087
- if ( visited ) {
1088
- packet_status_info *packet_status = NULL;
1089
-
1090
- PRINTF( " Known packet\n" );
1091
- // We have seen this packet
1092
- packet_status = get_packet_status( pinfo->fd->num );
1093
- assert( packet_status != NULL );
1094
-
1095
- if ( packet_status->reassemble_id != 0 ) {
1096
- // This is a part of fragment.
1097
- messages_tvb = get_reassembled_message( tvb, offset, pinfo, tree, stream_name );
1098
- if ( messages_tvb == NULL ) {
1099
- // We have not had all packets yet to reassemble this
1100
- dissect_message_dump( tvb, offset, trema_tree );
1101
- PRINTF( "----- end %u (known packet)\n", pinfo->fd->num );
1102
- return;
1103
- }
1104
- }
1105
- else {
1106
- messages_tvb = tvb_new_subset( tvb, offset, -1, -1 );
1107
- }
1108
-
1109
- offset = 0;
1110
- remaining_length = tvb_length_remaining( messages_tvb, offset );
1111
- while ( remaining_length > 0 ) {
1112
- next_tvb = trim_message( messages_tvb, offset );
1113
- if ( next_tvb == NULL ) {
1114
- dissect_message_dump( messages_tvb, offset, trema_tree );
1115
- break;
1116
- }
1117
- offset += tvb_length( next_tvb );
1118
- dissect_message_header( next_tvb, pinfo, 0, trema_tree );
1119
- remaining_length = tvb_length_remaining( messages_tvb, offset );
1120
- } // end of while
1121
-
1122
- PRINTF( "----- end %u (known packet, reassembled)\n", pinfo->fd->num );
1123
- return;
1124
- }
1125
-
1126
- messages_tvb = tvb;
1127
- remaining_length = tvb_length_remaining( messages_tvb, offset );
1128
- PRINTF( " received payload length %d\n", remaining_length );
1129
- while ( remaining_length > 0 ) {
1130
- fragmented_stream_info *fragment_info = get_fragmented_stream_info( stream_name );
1131
- if ( fragment_info != NULL ) {
1132
- // this stream is in fragmentated status
1133
- PRINTF( " In fragmented status\n" );
1134
-
1135
- dissect_message_dump( messages_tvb, offset, trema_tree );
1136
-
1137
- messages_tvb = update_fragment_status( messages_tvb, offset, pinfo, tree, fragment_info, NULL );
1138
- if ( messages_tvb != NULL ) {
1139
- offset = 0;
1140
- remaining_length = tvb_length_remaining( messages_tvb, offset );
1141
- }
1142
-
1143
- PRINTF( " unreceived_len %d remaining_len %d\n", fragment_info->unreceived_length, remaining_length );
1144
- if ( messages_tvb == NULL || fragment_info->unreceived_length > 0 ) {
1145
- // need more packet to reassemble
1146
- PRINTF( "----- end %u need more packet to reassemble\n", pinfo->fd->num );
1147
- return;
1148
- }
1149
- else {
1150
- // reassembled message
1151
- PRINTF( " reassembled message\n" );
1152
- next_tvb = trim_message( messages_tvb, offset );
1153
- assert( next_tvb != NULL );
1154
- offset += tvb_length( next_tvb );
1155
- }
1156
- }
1157
- else {
1158
- // Not in fragmented status
1159
- PRINTF( " Not in fragmented status\n" );
1160
-
1161
- if ( remaining_length < sizeof( message_header ) ) {
1162
- // Not enough data received to get message length
1163
- PRINTF( " Not enough data for message header remaining_length %d\n", remaining_length );
1164
- dissect_message_dump( messages_tvb, offset, trema_tree );
1165
- messages_tvb = update_fragment_status( messages_tvb, offset, pinfo, tree, NULL, stream_name );
1166
- offset += remaining_length;
1167
- PRINTF( "----- end %u (Not enough data for message header)\n", pinfo->fd->num );
1168
- return;
1169
- }
1170
- else {
1171
- guint32 message_length = tvb_get_ntohl( messages_tvb, offset + offsetof( message_header, message_length ) );
1172
-
1173
- if ( remaining_length < message_length ) {
1174
- // new fragment
1175
- dissect_message_dump( messages_tvb, offset, trema_tree );
1176
- messages_tvb = update_fragment_status( messages_tvb, offset, pinfo, tree, NULL, stream_name );
1177
- offset += remaining_length;
1178
- PRINTF( "----- end %u (new fragment)\n", pinfo->fd->num );
1179
- return;
1180
- }
1181
- else {
1182
- next_tvb = trim_message( messages_tvb, offset );
1183
- assert( next_tvb != NULL );
1184
- offset += tvb_length( next_tvb );
1185
- }
1186
- }
1187
- }
1188
-
1189
- dissect_message_header( next_tvb, pinfo, 0, trema_tree );
1190
-
1191
- remaining_length = tvb_length_remaining( messages_tvb, offset );
1192
- } // end of while
1193
- }
1194
-
1195
-
1196
- static gint
1197
- dissect_pcap_dump_header( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree, gint offset, guint32 *datalink ) {
1198
- /*
1199
- typedef struct pcap_dump_header {
1200
- uint32_t datalink;
1201
- uint8_t interface[ IF_NAMESIZE ];
1202
- } pcap_dump_header;
1203
- */
1204
- gint head = offset;
1205
-
1206
- *datalink = tvb_get_ntohl( tvb, offset );
1207
-
1208
- if ( trema_tree != NULL ) {
1209
- proto_tree *pcap_dump_header_tree = NULL;
1210
- proto_item *ti = NULL;
1211
-
1212
- ti = proto_tree_add_item( trema_tree, hf_pcap_dump_header, tvb, offset, sizeof( pcap_dump_header ), FALSE );
1213
- pcap_dump_header_tree = proto_item_add_subtree( ti, ett_pcap_dump_header );
1214
-
1215
- proto_tree_add_item( pcap_dump_header_tree, hf_pcap_dump_datalink, tvb, offset, 4, FALSE );
1216
- offset += 4;
1217
- proto_tree_add_item( pcap_dump_header_tree, hf_pcap_dump_interface, tvb, offset, IF_NAMESIZE, FALSE );
1218
- offset += IF_NAMESIZE;
1219
- }
1220
-
1221
- return ( offset - head );
1222
- }
1223
-
1224
-
1225
- static gint
1226
- dissect_pcap_pkthdr( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree, gint offset ) {
1227
- /*
1228
- struct pcap_pkthdr {
1229
- struct timeval ts;
1230
- bpf_u_int32 caplen;
1231
- bpf_u_int32 len;
1232
- };
1233
- */
1234
- gint head = offset;
1235
-
1236
- if ( trema_tree != NULL ) {
1237
- proto_tree *pcap_pkthdr_tree = NULL;
1238
- proto_item *ti = NULL;
1239
-
1240
- ti = proto_tree_add_item( trema_tree, hf_pcap_pkthdr, tvb, offset, sizeof( struct pcap_pkthdr ), FALSE );
1241
- pcap_pkthdr_tree = proto_item_add_subtree( ti, ett_pcap_pkthdr );
1242
-
1243
- nstime_t ts;
1244
- ts.secs = tvb_get_ntohl( tvb, offset );
1245
- ts.nsecs = tvb_get_ntohl( tvb, offset + 4 ) * 1000;
1246
- proto_tree_add_time( pcap_pkthdr_tree, hf_pcap_pkthdr_ts, tvb, offset, sizeof( nstime_t ), &ts );
1247
- offset += sizeof( nstime_t );
1248
- proto_tree_add_item( pcap_pkthdr_tree, hf_pcap_pkthdr_caplen, tvb, offset, 4, FALSE );
1249
- offset += 4;
1250
- proto_tree_add_item( pcap_pkthdr_tree, hf_pcap_pkthdr_len, tvb, offset, 4, FALSE );
1251
- offset += 4;
1252
- }
1253
-
1254
- return ( offset - head );
1255
- }
1256
-
1257
-
1258
- static void
1259
- dissect_ethernet( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree ) {
1260
- if ( ethernet_handle != NULL ) {
1261
- if ( check_col( pinfo->cinfo, COL_PROTOCOL ) ) {
1262
- col_append_str( pinfo->cinfo, COL_PROTOCOL, "+" );
1263
- }
1264
-
1265
- if ( check_col( pinfo->cinfo, COL_INFO ) ) {
1266
- col_append_str( pinfo->cinfo, COL_INFO, " => " );
1267
- }
1268
-
1269
- col_set_fence( pinfo->cinfo, COL_PROTOCOL );
1270
- col_set_fence( pinfo->cinfo, COL_INFO );
1271
-
1272
- call_dissector( ethernet_handle, tvb, pinfo, trema_tree );
1273
- }
1274
- else {
1275
- // FIXME: do something here
1276
- }
1277
- }
1278
-
1279
-
1280
- static void
1281
- dissect_pcap_dump( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *trema_tree,
1282
- gint offset, gboolean visited, stream_id *stream_name ) {
1283
- guint32 datalink = 0;
1284
-
1285
- offset += dissect_pcap_dump_header( tvb, pinfo, trema_tree, offset, &datalink );
1286
- offset += dissect_pcap_pkthdr( tvb, pinfo, trema_tree, offset );
1287
- if ( datalink == DLT_EN10MB ) {
1288
- guint16 remaining_len = tvb_reported_length_remaining( tvb, offset );
1289
- if ( remaining_len > 0 ) {
1290
- tvbuff_t *next_tvb = tvb_new_subset( tvb, offset, -1, remaining_len );
1291
- dissect_ethernet( next_tvb, pinfo, trema_tree );
1292
- }
1293
- offset += remaining_len;
1294
- }
1295
- dissect_message_dump( tvb, offset, trema_tree );
1296
- }
1297
-
1298
-
1299
- static gint
1300
- dissect_syslog_dump_header( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree, gint offset ) {
1301
- /*
1302
- typedef struct syslog_dump_header {
1303
- struct {
1304
- uint32_t sec;
1305
- uint32_t nsec;
1306
- } sent_time;
1307
- } syslog_dump_header;
1308
- */
1309
- gint head = offset;
1310
-
1311
- if ( trema_tree != NULL ) {
1312
- proto_tree *syslog_dump_header_tree = NULL;
1313
- proto_item *ti = NULL;
1314
-
1315
- ti = proto_tree_add_item( trema_tree, hf_syslog_dump_header, tvb, offset, sizeof( syslog_dump_header ), FALSE );
1316
- syslog_dump_header_tree = proto_item_add_subtree( ti, ett_syslog_dump_header );
1317
-
1318
- nstime_t receive_time;
1319
- receive_time.secs = tvb_get_ntohl( tvb, offset );
1320
- receive_time.nsecs = tvb_get_ntohl( tvb, offset + 4 );
1321
- proto_tree_add_time( syslog_dump_header_tree, hf_syslog_dump_receive_time, tvb, offset, 8, &receive_time );
1322
- offset += sizeof( syslog_dump_header );
1323
- }
1324
-
1325
- return ( offset - head );
1326
- }
1327
-
1328
-
1329
- static void
1330
- dissect_syslog( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree ) {
1331
- if ( udp_dissector_table != NULL ) {
1332
- if ( check_col( pinfo->cinfo, COL_PROTOCOL ) ) {
1333
- col_append_str( pinfo->cinfo, COL_PROTOCOL, "+" );
1334
- }
1335
-
1336
- if ( check_col( pinfo->cinfo, COL_INFO ) ) {
1337
- col_append_str( pinfo->cinfo, COL_INFO, " => " );
1338
- }
1339
-
1340
- col_set_fence( pinfo->cinfo, COL_PROTOCOL );
1341
- col_set_fence( pinfo->cinfo, COL_INFO );
1342
- #ifndef WIRESHARK_VERSION_OLDER_THAN_160
1343
- dissector_try_uint( udp_dissector_table, UDP_PORT_SYSLOG, tvb, pinfo, trema_tree );
1344
- #else
1345
- dissector_try_port( udp_dissector_table, UDP_PORT_SYSLOG, tvb, pinfo, trema_tree );
1346
- #endif
1347
- }
1348
- else {
1349
- gint length = tvb_length_remaining( tvb, 0 );
1350
- if ( length > 0 ) {
1351
- proto_tree_add_item( trema_tree, hf_syslog_dump_message, tvb, 0, length, FALSE );
1352
- }
1353
- }
1354
- }
1355
-
1356
-
1357
- static void
1358
- dissect_syslog_dump( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *trema_tree,
1359
- gint offset, gboolean visited, stream_id *stream_name ) {
1360
-
1361
- offset += dissect_syslog_dump_header( tvb, pinfo, trema_tree, offset );
1362
- guint16 remaining_len = tvb_reported_length_remaining( tvb, offset );
1363
- if ( remaining_len > 0 ) {
1364
- tvbuff_t *next_tvb = tvb_new_subset( tvb, offset, -1, remaining_len );
1365
- dissect_syslog( next_tvb, pinfo, trema_tree );
1366
- }
1367
- }
1368
-
1369
-
1370
- static gint
1371
- dissect_text_dump_header( tvbuff_t *tvb, packet_info *pinfo, proto_tree *trema_tree, gint offset ) {
1372
- /*
1373
- typedef struct text_dump_header {
1374
- struct {
1375
- uint32_t sec;
1376
- uint32_t nsec;
1377
- } sent_time;
1378
- } text_dump_header;
1379
- */
1380
- gint head = offset;
1381
-
1382
- if ( trema_tree != NULL ) {
1383
- proto_tree *text_dump_header_tree = NULL;
1384
- proto_item *ti = NULL;
1385
-
1386
- ti = proto_tree_add_item( trema_tree, hf_text_dump_header, tvb, offset, sizeof( text_dump_header ), FALSE );
1387
- text_dump_header_tree = proto_item_add_subtree( ti, ett_text_dump_header );
1388
-
1389
- nstime_t receive_time;
1390
- receive_time.secs = tvb_get_ntohl( tvb, offset );
1391
- receive_time.nsecs = tvb_get_ntohl( tvb, offset + 4 );
1392
- proto_tree_add_time( text_dump_header_tree, hf_text_dump_receive_time, tvb, offset, 8, &receive_time );
1393
- offset += sizeof( text_dump_header );
1394
- }
1395
-
1396
- return ( offset - head );
1397
- }
1398
-
1399
-
1400
- static void
1401
- dissect_text_dump( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *trema_tree,
1402
- gint offset, gboolean visited, stream_id *stream_name ) {
1403
-
1404
- offset += dissect_text_dump_header( tvb, pinfo, trema_tree, offset );
1405
- guint16 remaining_len = tvb_reported_length_remaining( tvb, offset );
1406
- if ( remaining_len > 0 ) {
1407
- proto_tree_add_item( trema_tree, hf_text_dump_string, tvb, offset, -1, FALSE );
1408
-
1409
- gchar *string = tvb_format_text( tvb, offset, remaining_len - 1 );
1410
-
1411
- if ( check_col( pinfo->cinfo, COL_PROTOCOL ) ) {
1412
- col_append_str( pinfo->cinfo, COL_PROTOCOL, "+TEXT" );
1413
- }
1414
-
1415
- if ( check_col( pinfo->cinfo, COL_INFO ) && string != NULL ) {
1416
- col_append_str( pinfo->cinfo, COL_INFO, " => " );
1417
- col_append_str( pinfo->cinfo, COL_INFO, string );
1418
- }
1419
-
1420
- col_set_fence( pinfo->cinfo, COL_PROTOCOL );
1421
- col_set_fence( pinfo->cinfo, COL_INFO );
1422
- }
1423
- }
1424
-
1425
-
1426
- static void
1427
- dissect_trema( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) {
1428
- gboolean visited = TRUE;
1429
- gint offset = 0;
1430
- guint16 dump_type = 0;
1431
- proto_tree *trema_tree = NULL;
1432
- proto_item *ti = NULL;
1433
- stream_id stream_name;
1434
-
1435
- PRINTF( "----- start %u\n", pinfo->fd->num );
1436
-
1437
- if ( tree == NULL ) { // FIXME: is it okay to return here?
1438
- PRINTF( "----- end %u (tree is NULL)\n", pinfo->fd->num );
1439
- return;
1440
- }
1441
-
1442
- if ( check_packet_status( pinfo->fd->num ) == FALSE ) {
1443
- visited = FALSE;
1444
- update_packet_status( pinfo->fd->num, 0 );
1445
- }
1446
-
1447
- if ( check_col( pinfo->cinfo, COL_PROTOCOL ) ) {
1448
- col_set_str( pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_TREMA );
1449
- }
1450
-
1451
- ti = proto_tree_add_item( tree, proto_trema, tvb, 0, -1, FALSE );
1452
- trema_tree = proto_item_add_subtree( ti, ett_trema );
1453
-
1454
- get_stream_id( tvb, &stream_name );
1455
- PRINTF( " app [%s] service [%s]\n", stream_name.app_name, stream_name.service_name );
1456
-
1457
- offset = dissect_message_pcap_dump_header( tvb, pinfo, trema_tree, &dump_type );
1458
- if ( tvb_length_remaining( tvb, offset ) <= 0 ) {
1459
- PRINTF( "----- end %u (message_pcap_dump_header only)\n", pinfo->fd->num );
1460
- return;
1461
- }
1462
-
1463
- if ( dump_type >= MESSENGER_DUMP_SENT && dump_type <= MESSENGER_DUMP_SEND_CLOSED ) {
1464
- dissect_trema_ipc( tvb, pinfo, tree, trema_tree, offset, visited, &stream_name );
1465
- }
1466
- else if ( dump_type == MESSENGER_DUMP_PCAP ) {
1467
- dissect_pcap_dump( tvb, pinfo, tree, trema_tree, offset, visited, &stream_name );
1468
- }
1469
- else if ( dump_type == MESSENGER_DUMP_SYSLOG ) {
1470
- dissect_syslog_dump( tvb, pinfo, tree, trema_tree, offset, visited, &stream_name );
1471
- }
1472
- else if ( dump_type == MESSENGER_DUMP_TEXT ) {
1473
- dissect_text_dump( tvb, pinfo, tree, trema_tree, offset, visited, &stream_name );
1474
- }
1475
- else {
1476
- // FIXME
1477
- dissect_message_dump( tvb, offset, trema_tree );
1478
- }
1479
-
1480
- PRINTF( "----- end %u\n", pinfo->fd->num );
1481
- }
1482
-
1483
-
1484
- void
1485
- proto_register_trema() {
1486
- static hf_register_info hf[] = {
1487
- { &hf_dump_header,
1488
- { "Dump header", "trema.dump_header",
1489
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "Dump header", HFILL }},
1490
- { &hf_dump_type,
1491
- { "Type", "trema.dump_type",
1492
- FT_UINT16, BASE_DEC, VALS( names_dump_type ), NO_MASK, "Type", HFILL }},
1493
- { &hf_dump_event_time,
1494
- { "Event occurred at", "trema.dump_event_time",
1495
- FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NO_STRINGS, NO_MASK, "Event Occurred at", HFILL }},
1496
- { &hf_dump_app_name_length,
1497
- { "Application name length", "trema.dump_app_name_length",
1498
- FT_UINT16, BASE_DEC, NO_STRINGS, NO_MASK, "Application name length", HFILL }},
1499
- { &hf_dump_service_name_length,
1500
- { "Service name length", "trema.dump_service_name_length",
1501
- FT_UINT16, BASE_DEC, NO_STRINGS, NO_MASK, "Service name length", HFILL }},
1502
- { &hf_dump_data_length,
1503
- { "Data length", "trema.dump_data_length",
1504
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, "Data length", HFILL }},
1505
- { &hf_dump_app_name,
1506
- { "Application name", "trema.dump_app_name",
1507
- FT_STRING, BASE_NONE, NO_STRINGS, NO_MASK, "Application name", HFILL }},
1508
- { &hf_dump_service_name,
1509
- { "Service name", "trema.dump_service_name",
1510
- FT_STRING, BASE_NONE, NO_STRINGS, NO_MASK, "Service name", HFILL }},
1511
- { &hf_message_header,
1512
- { "Message header", "trema.message_header",
1513
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "Mesasge header", HFILL }},
1514
- { &hf_version,
1515
- { "Version", "trema.version",
1516
- FT_UINT8, BASE_DEC, NO_STRINGS, NO_MASK, "Version", HFILL }},
1517
- { &hf_message_type,
1518
- { "Type", "trema.type",
1519
- FT_UINT8, BASE_DEC, VALS( names_message_type ), NO_MASK, "Type", HFILL }},
1520
- { &hf_tag,
1521
- { "Tag", "trema.tag",
1522
- FT_UINT16, BASE_DEC, VALS( names_service_tag ), NO_MASK, "Tag", HFILL }},
1523
- { &hf_message_length,
1524
- { "Length", "trema.length",
1525
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, "Length", HFILL }},
1526
- { &hf_service_header,
1527
- { "OpenFlow service header", "trema.service_header",
1528
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "OpenFlow service header", HFILL }},
1529
- { &hf_datapath_id,
1530
- { "Datapath ID", "trema.datapath_id",
1531
- FT_UINT64, BASE_HEX, NO_STRINGS, NO_MASK, "Datapath ID", HFILL }},
1532
- { &hf_service_name_length,
1533
- { "Service name length", "trema.service_name_length",
1534
- FT_UINT16, BASE_DEC, NO_STRINGS, NO_MASK, "Service name length", HFILL }},
1535
- { &hf_service_name,
1536
- { "Service name", "trema.service_name",
1537
- FT_STRING, BASE_NONE, NO_STRINGS, NO_MASK, "Service name", HFILL }},
1538
- { &hf_context_handle,
1539
- { "Request/Reply context handle", "trema.context_handle",
1540
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "Request/Reply context handle", HFILL }},
1541
- { &hf_transaction_id,
1542
- { "Transaction ID", "trema.transaction_id",
1543
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, "Transaction ID", HFILL }},
1544
- { &hf_hex_dump,
1545
- { "[Unknown data]", "trema.hex_dump",
1546
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "Hex dump", HFILL }},
1547
-
1548
- // pcap_dump_header
1549
- { &hf_pcap_dump_header,
1550
- { "PCAP dump header", "trema.pcap_dump_header",
1551
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "PCAP dump header", HFILL }},
1552
- { &hf_pcap_dump_datalink,
1553
- { "Datalink", "trema.pcap_dump_datalink",
1554
- FT_UINT32, BASE_DEC, VALS( names_datalink_type ), NO_MASK, "Datalink", HFILL }},
1555
- { &hf_pcap_dump_interface,
1556
- { "Interface", "trema.pcap_dump_interface",
1557
- FT_STRING, BASE_NONE, NO_STRINGS, NO_MASK, "Inerface", HFILL }},
1558
-
1559
- // pcap_pkthdr
1560
- { &hf_pcap_pkthdr,
1561
- { "PCAP packet header", "trema.pcap_pkthdr",
1562
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "PCAP packet header", HFILL }},
1563
- { &hf_pcap_pkthdr_ts,
1564
- { "Captured at", "trema.pcap_pkthdr_ts",
1565
- FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NO_STRINGS, NO_MASK, "Captured at", HFILL }},
1566
- { &hf_pcap_pkthdr_caplen,
1567
- { "Capture length", "trema.pcap_pkthdr_caplen",
1568
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, "Capture length", HFILL }},
1569
- { &hf_pcap_pkthdr_len,
1570
- { "Frame length", "trema.pcap_pkthdr_len",
1571
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, "Frame length", HFILL }},
1572
-
1573
- // syslog_dump_header
1574
- { &hf_syslog_dump_header,
1575
- { "Syslog dump header", "trema.syslog_dump_header",
1576
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "Syslog dump header", HFILL }},
1577
- { &hf_syslog_dump_receive_time,
1578
- { "Received at", "trema.syslog_dump_receive_time",
1579
- FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NO_STRINGS, NO_MASK, "Received at", HFILL }},
1580
-
1581
- // text_dump_header
1582
- { &hf_text_dump_header,
1583
- { "Text dump header", "trema.text_dump_header",
1584
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, "Text dump header", HFILL }},
1585
- { &hf_text_dump_receive_time,
1586
- { "Received at", "trema.text_dump_receive_time",
1587
- FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NO_STRINGS, NO_MASK, "Received at", HFILL }},
1588
- { &hf_text_dump_string,
1589
- { "Text string", "trema.text_dump_string",
1590
- FT_STRING, BASE_NONE, NO_STRINGS, NO_MASK, "Text string", HFILL }},
1591
-
1592
- // raw syslog message
1593
- { &hf_syslog_dump_message,
1594
- { "Raw syslog message", "trema.syslog_message",
1595
- FT_STRING, BASE_NONE, NO_STRINGS, NO_MASK, "Raw syslog message", HFILL }},
1596
-
1597
- // Fragment fields
1598
- { &hf_trema_fragments,
1599
- { "Trema fragments", "trema.fragments",
1600
- FT_NONE, BASE_NONE, NO_STRINGS, NO_MASK, NULL, HFILL }},
1601
- { &hf_trema_fragment,
1602
- { "Trema fragment", "trema.fragment",
1603
- FT_FRAMENUM, BASE_NONE, NO_STRINGS, NO_MASK, NULL, HFILL }},
1604
- { &hf_trema_fragment_overlap,
1605
- { "Trema fragment overlap", "trema.fragment.overlap",
1606
- FT_BOOLEAN, 0, NO_STRINGS, NO_MASK, NULL, HFILL }},
1607
- { &hf_trema_fragment_overlap_conflict,
1608
- { "Trema fragment overlapping with conflicting data", "trema.fragment.overlap.conflicts",
1609
- FT_BOOLEAN, 0, NO_STRINGS, NO_MASK, NULL, HFILL }},
1610
- { &hf_trema_fragment_multiple_tails,
1611
- { "Trema has multiple tail fragments", "trema.fragment.multiple_tails",
1612
- FT_BOOLEAN, 0, NO_STRINGS, NO_MASK, NULL, HFILL }},
1613
- { &hf_trema_fragment_too_long_fragment,
1614
- { "Trema fragment too long", "trema.fragment.too_long_fragment",
1615
- FT_BOOLEAN, 0, NO_STRINGS, NO_MASK, NULL, HFILL }},
1616
- { &hf_trema_fragment_error,
1617
- { "Trema defragmentation error", "trema.fragment.error",
1618
- FT_FRAMENUM, BASE_NONE, NO_STRINGS, NO_MASK, NULL, HFILL }},
1619
- #ifndef WIRESHARK_VERSION_OLDER_THAN_160
1620
- { &hf_trema_fragment_count,
1621
- { "Trema defragmentation count", "trema.fragment.count",
1622
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, NULL, HFILL }},
1623
- #endif
1624
- { &hf_trema_reassembled_in,
1625
- { "Reassembled in", "trema.reassembled.in",
1626
- FT_FRAMENUM, BASE_NONE, NO_STRINGS, NO_MASK, NULL, HFILL }},
1627
- { &hf_trema_reassembled_length,
1628
- { "Reassembled length", "trema.reassembled.length",
1629
- FT_UINT32, BASE_DEC, NO_STRINGS, NO_MASK, NULL, HFILL }},
1630
- };
1631
-
1632
- static gint *ett[] = {
1633
- &ett_trema,
1634
- &ett_dump_header,
1635
- &ett_message_header,
1636
- &ett_service_header,
1637
- &ett_context_handle,
1638
- &ett_trema_fragment,
1639
- &ett_trema_fragments,
1640
- &ett_pcap_dump_header,
1641
- &ett_pcap_pkthdr,
1642
- &ett_syslog_dump_header,
1643
- &ett_text_dump_header,
1644
- };
1645
-
1646
- proto_trema = proto_register_protocol( "Trema Universal Event Dumper", "TREMA", "trema" );
1647
- proto_register_field_array( proto_trema, hf, array_length( hf ) );
1648
- proto_register_subtree_array( ett, array_length( ett ) );
1649
- register_dissector( "trema", dissect_trema, proto_trema );
1650
-
1651
- register_init_routine( init_trema_fragment );
1652
- }
1653
-
1654
-
1655
- void
1656
- proto_reg_handoff_trema() {
1657
- ethernet_handle = find_dissector( "eth" );
1658
- ppp_handle = find_dissector( "ppp" );
1659
- ip_handle = find_dissector( "ip" );
1660
- openflow_handle = find_dissector( "openflow" );
1661
- sll_dissector_table = find_dissector_table( "sll.ltype" );
1662
- udp_dissector_table = find_dissector_table( "udp.port" );
1663
- }
1664
-
1665
-
1666
- /*
1667
- * Local variables:
1668
- * c-basic-offset: 2
1669
- * indent-tabs-mode: nil
1670
- * End:
1671
- */