trema 0.4.7 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +33 -54
  3. data/.hound.yml +3 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +17 -1
  6. data/.travis.yml +14 -18
  7. data/CHANGELOG.md +10 -0
  8. data/Gemfile +1 -26
  9. data/README.md +25 -241
  10. data/Rakefile +4 -1056
  11. data/bin/.gitignore +3 -0
  12. data/bin/trema +163 -237
  13. data/features/cleanup_on_failure.feature +118 -0
  14. data/features/logging.feature +73 -0
  15. data/features/open_flow13.feature +21 -0
  16. data/features/step_definitions/.gitignore +35 -0
  17. data/features/step_definitions/.rubocop.yml +5 -0
  18. data/features/step_definitions/.travis.yml +19 -0
  19. data/features/step_definitions/Gemfile +9 -0
  20. data/features/step_definitions/Guardfile +4 -0
  21. data/features/step_definitions/LICENSE +675 -0
  22. data/features/step_definitions/README.md +7 -0
  23. data/features/step_definitions/Rakefile +10 -0
  24. data/features/step_definitions/show_stats_steps.rb +56 -0
  25. data/features/step_definitions/virtual_link_steps.rb +8 -0
  26. data/features/support/env.rb +0 -73
  27. data/features/support/hooks.rb +6 -50
  28. data/features/trema_delete_link.feature +30 -0
  29. data/features/trema_killall.feature +56 -0
  30. data/features/trema_run.feature +47 -0
  31. data/features/trema_start.feature +73 -0
  32. data/features/trema_stop.feature +50 -0
  33. data/lib/trema.rb +4 -0
  34. data/lib/trema/command.rb +184 -0
  35. data/lib/trema/controller.rb +289 -0
  36. data/lib/trema/dirs.rb +14 -0
  37. data/lib/trema/drb.rb +32 -0
  38. data/lib/trema/logger.rb +63 -0
  39. data/lib/trema/monkey_patch/integer.rb +8 -0
  40. data/lib/trema/monkey_patch/integer/base_conversions.rb +12 -0
  41. data/lib/trema/monkey_patch/integer/durations.rb +12 -0
  42. data/lib/trema/switch.rb +83 -0
  43. data/lib/trema/version.rb +5 -0
  44. data/spec/spec_helper.rb +9 -178
  45. data/spec/trema/controller_spec.rb +4 -53
  46. data/tasks/.gitignore +34 -0
  47. data/tasks/LICENSE +675 -0
  48. data/tasks/README.md +6 -0
  49. data/tasks/cucumber.rake +14 -0
  50. data/tasks/flay.rake +15 -0
  51. data/tasks/flog.rake +25 -0
  52. data/tasks/gem.rake +15 -0
  53. data/tasks/reek.rake +11 -0
  54. data/tasks/relish.rake +8 -0
  55. data/tasks/rspec.rake +8 -0
  56. data/tasks/rubocop.rake +2 -16
  57. data/tasks/yard.rake +11 -0
  58. data/trema.gemspec +24 -23
  59. metadata +180 -720
  60. data/.yardopts +0 -4
  61. data/Doxyfile +0 -1679
  62. data/Guardfile +0 -14
  63. data/bin/quality +0 -31
  64. data/bin/trema-config +0 -59
  65. data/build.rb +0 -32
  66. data/cruise.rb +0 -409
  67. data/features/.nav +0 -50
  68. data/features/README.md +0 -7
  69. data/features/core/get_pid_by_trema_name.feature +0 -137
  70. data/features/core/packetin_filter.feature +0 -55
  71. data/features/core/switch_manager.feature +0 -41
  72. data/features/core/trema-config.feature +0 -55
  73. data/features/dsl/switch_port_specifier.feature +0 -15
  74. data/features/examples/dumper.feature +0 -35
  75. data/features/examples/hello_trema.feature +0 -23
  76. data/features/examples/learning_switch.feature +0 -37
  77. data/features/examples/list_switches.feature +0 -24
  78. data/features/examples/message.set_config.feature +0 -27
  79. data/features/examples/message.vendor-action.feature +0 -25
  80. data/features/examples/message.vendor-stats-request.feature +0 -20
  81. data/features/examples/multi_learning_switch.feature +0 -107
  82. data/features/examples/openflow_message.echo.feature +0 -59
  83. data/features/examples/openflow_message.features_request.feature +0 -35
  84. data/features/examples/openflow_message.hello.feature +0 -59
  85. data/features/examples/packet_in.feature +0 -33
  86. data/features/examples/packetin_filter_config.feature +0 -95
  87. data/features/examples/patch_panel.feature +0 -29
  88. data/features/examples/repeater_hub.feature +0 -52
  89. data/features/examples/switch_info.feature +0 -51
  90. data/features/examples/switch_monitor.feature +0 -35
  91. data/features/examples/transparent_firewall.feature +0 -73
  92. data/features/handlers/switch_ready.feature +0 -40
  93. data/features/step_definitions/misc_steps.rb +0 -85
  94. data/features/step_definitions/send_packets_steps.rb +0 -33
  95. data/features/step_definitions/stats_steps.rb +0 -39
  96. data/features/switch_event/C-add_forward_entry.feature +0 -114
  97. data/features/switch_event/C-delete_forward_entry.feature +0 -85
  98. data/features/switch_event/C-dump_forward_entries.feature +0 -72
  99. data/features/switch_event/C-set_forward_entries.feature +0 -77
  100. data/features/switch_event/README.md +0 -40
  101. data/features/switch_event/add_forward_entry.feature +0 -160
  102. data/features/switch_event/delete_forward_entry.feature +0 -160
  103. data/features/switch_event/dump_forward_entries.feature +0 -103
  104. data/features/switch_event/set_forward_entries.feature +0 -102
  105. data/features/trema_commands/README.md +0 -8
  106. data/features/trema_commands/dump_flows.feature +0 -41
  107. data/features/trema_commands/help.feature +0 -27
  108. data/features/trema_commands/help_option.feature +0 -20
  109. data/features/trema_commands/kill.feature +0 -56
  110. data/features/trema_commands/killall.feature +0 -32
  111. data/features/trema_commands/port_down.feature +0 -71
  112. data/features/trema_commands/port_up.feature +0 -75
  113. data/features/trema_commands/reset_stats.feature +0 -56
  114. data/features/trema_commands/run.feature +0 -56
  115. data/features/trema_commands/send_packets.feature +0 -46
  116. data/features/trema_commands/show_stats.feature +0 -66
  117. data/features/trema_commands/up.feature +0 -34
  118. data/features/trema_commands/version.feature +0 -10
  119. data/features/trema_commands/version_option.feature +0 -8
  120. data/rubocop-todo.yml +0 -159
  121. data/ruby/.gitignore +0 -4
  122. data/ruby/blocker.rb +0 -74
  123. data/ruby/extconf.rb +0 -80
  124. data/ruby/sub-process.rb +0 -289
  125. data/ruby/trema/action-common.c +0 -46
  126. data/ruby/trema/action-common.h +0 -38
  127. data/ruby/trema/action.rb +0 -33
  128. data/ruby/trema/aggregate-stats-reply.rb +0 -68
  129. data/ruby/trema/app.rb +0 -114
  130. data/ruby/trema/barrier-reply.c +0 -98
  131. data/ruby/trema/barrier-reply.h +0 -44
  132. data/ruby/trema/barrier-request.c +0 -135
  133. data/ruby/trema/barrier-request.h +0 -42
  134. data/ruby/trema/cli.rb +0 -267
  135. data/ruby/trema/command.rb +0 -41
  136. data/ruby/trema/command/dump_flows.rb +0 -43
  137. data/ruby/trema/command/kill.rb +0 -75
  138. data/ruby/trema/command/killall.rb +0 -38
  139. data/ruby/trema/command/netns.rb +0 -38
  140. data/ruby/trema/command/port_down.rb +0 -43
  141. data/ruby/trema/command/port_up.rb +0 -43
  142. data/ruby/trema/command/reset_stats.rb +0 -41
  143. data/ruby/trema/command/ruby.rb +0 -38
  144. data/ruby/trema/command/run.rb +0 -110
  145. data/ruby/trema/command/send_packets.rb +0 -46
  146. data/ruby/trema/command/shell.rb +0 -57
  147. data/ruby/trema/command/show_stats.rb +0 -65
  148. data/ruby/trema/command/up.rb +0 -44
  149. data/ruby/trema/command/version.rb +0 -35
  150. data/ruby/trema/compat.h +0 -36
  151. data/ruby/trema/controller.c +0 -691
  152. data/ruby/trema/controller.h +0 -42
  153. data/ruby/trema/controller.rb +0 -255
  154. data/ruby/trema/custom-switch.rb +0 -56
  155. data/ruby/trema/daemon.rb +0 -184
  156. data/ruby/trema/default-logger.c +0 -161
  157. data/ruby/trema/default-logger.h +0 -42
  158. data/ruby/trema/default-logger.rb +0 -29
  159. data/ruby/trema/default_openflow_channel_port.rb +0 -26
  160. data/ruby/trema/desc-stats-reply.rb +0 -75
  161. data/ruby/trema/dsl.rb +0 -32
  162. data/ruby/trema/dsl/configuration.rb +0 -145
  163. data/ruby/trema/dsl/context.rb +0 -69
  164. data/ruby/trema/dsl/custom-switch.rb +0 -44
  165. data/ruby/trema/dsl/link.rb +0 -39
  166. data/ruby/trema/dsl/netns.rb +0 -78
  167. data/ruby/trema/dsl/parser.rb +0 -70
  168. data/ruby/trema/dsl/rswitch.rb +0 -47
  169. data/ruby/trema/dsl/run.rb +0 -47
  170. data/ruby/trema/dsl/runner.rb +0 -178
  171. data/ruby/trema/dsl/stanza.rb +0 -51
  172. data/ruby/trema/dsl/switch.rb +0 -76
  173. data/ruby/trema/dsl/syntax-error.rb +0 -31
  174. data/ruby/trema/dsl/syntax.rb +0 -128
  175. data/ruby/trema/dsl/vhost.rb +0 -106
  176. data/ruby/trema/dsl/vswitch.rb +0 -45
  177. data/ruby/trema/echo-reply.c +0 -122
  178. data/ruby/trema/echo-reply.h +0 -40
  179. data/ruby/trema/echo-request.c +0 -117
  180. data/ruby/trema/echo-request.h +0 -40
  181. data/ruby/trema/echo.c +0 -99
  182. data/ruby/trema/echo.h +0 -39
  183. data/ruby/trema/enqueue.rb +0 -87
  184. data/ruby/trema/error.c +0 -262
  185. data/ruby/trema/error.h +0 -42
  186. data/ruby/trema/exact-match.rb +0 -34
  187. data/ruby/trema/executables.rb +0 -99
  188. data/ruby/trema/features-reply.c +0 -330
  189. data/ruby/trema/features-reply.h +0 -54
  190. data/ruby/trema/features-request.c +0 -134
  191. data/ruby/trema/features-request.h +0 -42
  192. data/ruby/trema/flow-mod.c +0 -150
  193. data/ruby/trema/flow-mod.h +0 -42
  194. data/ruby/trema/flow-removed.c +0 -280
  195. data/ruby/trema/flow-removed.h +0 -44
  196. data/ruby/trema/flow-stats-reply.rb +0 -107
  197. data/ruby/trema/flow.rb +0 -65
  198. data/ruby/trema/get-config-reply.c +0 -158
  199. data/ruby/trema/get-config-reply.h +0 -50
  200. data/ruby/trema/get-config-request.c +0 -136
  201. data/ruby/trema/get-config-request.h +0 -42
  202. data/ruby/trema/hardware-switch.rb +0 -86
  203. data/ruby/trema/hello.c +0 -133
  204. data/ruby/trema/hello.h +0 -42
  205. data/ruby/trema/host.rb +0 -263
  206. data/ruby/trema/link.rb +0 -177
  207. data/ruby/trema/list-switches-reply.c +0 -44
  208. data/ruby/trema/list-switches-reply.h +0 -38
  209. data/ruby/trema/mac.rb +0 -29
  210. data/ruby/trema/match.c +0 -621
  211. data/ruby/trema/match.h +0 -34
  212. data/ruby/trema/monkey-patch/integer.rb +0 -35
  213. data/ruby/trema/monkey-patch/integer/base-conversions.rb +0 -34
  214. data/ruby/trema/monkey-patch/integer/ranges.rb +0 -49
  215. data/ruby/trema/monkey-patch/integer/validators.rb +0 -36
  216. data/ruby/trema/monkey-patch/module.rb +0 -33
  217. data/ruby/trema/monkey-patch/module/class-method.rb +0 -38
  218. data/ruby/trema/monkey-patch/module/deprecation.rb +0 -39
  219. data/ruby/trema/monkey-patch/string.rb +0 -31
  220. data/ruby/trema/monkey-patch/string/inflectors.rb +0 -52
  221. data/ruby/trema/netns.rb +0 -127
  222. data/ruby/trema/network-component.rb +0 -151
  223. data/ruby/trema/ofctl.rb +0 -70
  224. data/ruby/trema/open-vswitch.rb +0 -160
  225. data/ruby/trema/openflow-error.c +0 -193
  226. data/ruby/trema/openflow-error.h +0 -51
  227. data/ruby/trema/openflow-switch.rb +0 -35
  228. data/ruby/trema/ordered-hash.rb +0 -75
  229. data/ruby/trema/packet-in.c +0 -1365
  230. data/ruby/trema/packet-in.h +0 -44
  231. data/ruby/trema/packet-queue.rb +0 -181
  232. data/ruby/trema/packetin-filter.rb +0 -124
  233. data/ruby/trema/path.rb +0 -85
  234. data/ruby/trema/phost.rb +0 -76
  235. data/ruby/trema/port-mod.c +0 -232
  236. data/ruby/trema/port-mod.h +0 -34
  237. data/ruby/trema/port-stats-reply.rb +0 -109
  238. data/ruby/trema/port-status-add.rb +0 -60
  239. data/ruby/trema/port-status-delete.rb +0 -60
  240. data/ruby/trema/port-status-modify.rb +0 -60
  241. data/ruby/trema/port-status.c +0 -192
  242. data/ruby/trema/port-status.h +0 -41
  243. data/ruby/trema/port.c +0 -398
  244. data/ruby/trema/port.h +0 -45
  245. data/ruby/trema/process.rb +0 -103
  246. data/ruby/trema/queue-get-config-reply.c +0 -205
  247. data/ruby/trema/queue-get-config-reply.h +0 -45
  248. data/ruby/trema/queue-get-config-request.c +0 -141
  249. data/ruby/trema/queue-get-config-request.h +0 -42
  250. data/ruby/trema/queue-stats-reply.rb +0 -76
  251. data/ruby/trema/ruby-switch.rb +0 -62
  252. data/ruby/trema/send-out-port.rb +0 -113
  253. data/ruby/trema/set-config.c +0 -174
  254. data/ruby/trema/set-config.h +0 -42
  255. data/ruby/trema/set-eth-addr.rb +0 -54
  256. data/ruby/trema/set-eth-dst-addr.rb +0 -52
  257. data/ruby/trema/set-eth-src-addr.rb +0 -53
  258. data/ruby/trema/set-ip-addr.rb +0 -54
  259. data/ruby/trema/set-ip-dst-addr.rb +0 -53
  260. data/ruby/trema/set-ip-src-addr.rb +0 -52
  261. data/ruby/trema/set-ip-tos.rb +0 -64
  262. data/ruby/trema/set-transport-dst-port.rb +0 -53
  263. data/ruby/trema/set-transport-port.rb +0 -53
  264. data/ruby/trema/set-transport-src-port.rb +0 -54
  265. data/ruby/trema/set-vlan-priority.rb +0 -66
  266. data/ruby/trema/set-vlan-vid.rb +0 -65
  267. data/ruby/trema/shell.rb +0 -37
  268. data/ruby/trema/shell/down.rb +0 -37
  269. data/ruby/trema/shell/killall.rb +0 -38
  270. data/ruby/trema/shell/link.rb +0 -59
  271. data/ruby/trema/shell/reset_stats.rb +0 -49
  272. data/ruby/trema/shell/run.rb +0 -67
  273. data/ruby/trema/shell/send_packets.rb +0 -40
  274. data/ruby/trema/shell/show_stats.rb +0 -47
  275. data/ruby/trema/shell/up.rb +0 -41
  276. data/ruby/trema/shell/vhost.rb +0 -42
  277. data/ruby/trema/shell/vswitch.rb +0 -47
  278. data/ruby/trema/stats-helper.rb +0 -63
  279. data/ruby/trema/stats-reply.c +0 -540
  280. data/ruby/trema/stats-reply.h +0 -51
  281. data/ruby/trema/stats-request.c +0 -715
  282. data/ruby/trema/stats-request.h +0 -40
  283. data/ruby/trema/strip-vlan-header.rb +0 -41
  284. data/ruby/trema/switch-daemon.rb +0 -90
  285. data/ruby/trema/switch-disconnected.c +0 -38
  286. data/ruby/trema/switch-disconnected.h +0 -36
  287. data/ruby/trema/switch-event.c +0 -648
  288. data/ruby/trema/switch-event.h +0 -27
  289. data/ruby/trema/switch-manager.rb +0 -119
  290. data/ruby/trema/switch.c +0 -197
  291. data/ruby/trema/switch.h +0 -40
  292. data/ruby/trema/switch.rb +0 -56
  293. data/ruby/trema/table-stats-reply.rb +0 -85
  294. data/ruby/trema/timers.rb +0 -95
  295. data/ruby/trema/trema-ruby-utils.c +0 -66
  296. data/ruby/trema/trema-ruby-utils.h +0 -42
  297. data/ruby/trema/trema.c +0 -126
  298. data/ruby/trema/tremashark.rb +0 -46
  299. data/ruby/trema/util.rb +0 -116
  300. data/ruby/trema/vendor-action.rb +0 -82
  301. data/ruby/trema/vendor-stats-reply.rb +0 -64
  302. data/ruby/trema/vendor.c +0 -230
  303. data/ruby/trema/vendor.h +0 -48
  304. data/ruby/trema/version.rb +0 -28
  305. data/spec/support/action.rb +0 -49
  306. data/spec/support/mandatory-option.rb +0 -53
  307. data/spec/support/matchers/constant.rb +0 -25
  308. data/spec/support/openflow-message.rb +0 -173
  309. data/spec/support/port-status.rb +0 -35
  310. data/spec/trema/app_spec.rb +0 -88
  311. data/spec/trema/barrier-reply_spec.rb +0 -43
  312. data/spec/trema/barrier-request_spec.rb +0 -92
  313. data/spec/trema/cli_spec.rb +0 -156
  314. data/spec/trema/default-logger_spec.rb +0 -46
  315. data/spec/trema/dsl/configuration_spec.rb +0 -120
  316. data/spec/trema/dsl/link_spec.rb +0 -50
  317. data/spec/trema/dsl/run_spec.rb +0 -72
  318. data/spec/trema/dsl/runner_spec.rb +0 -247
  319. data/spec/trema/dsl/switch_spec.rb +0 -69
  320. data/spec/trema/dsl/syntax_spec.rb +0 -110
  321. data/spec/trema/dsl/vhost_spec.rb +0 -144
  322. data/spec/trema/dsl/vswitch_spec.rb +0 -80
  323. data/spec/trema/echo-reply_spec.rb +0 -84
  324. data/spec/trema/echo-request_spec.rb +0 -128
  325. data/spec/trema/enqueue_spec.rb +0 -76
  326. data/spec/trema/error_spec.rb +0 -81
  327. data/spec/trema/executables_spec.rb +0 -54
  328. data/spec/trema/features-reply_spec.rb +0 -91
  329. data/spec/trema/features-request_spec.rb +0 -93
  330. data/spec/trema/flow-mod_spec.rb +0 -99
  331. data/spec/trema/flow-removed_spec.rb +0 -144
  332. data/spec/trema/get-config-reply_spec.rb +0 -43
  333. data/spec/trema/get-config-request_spec.rb +0 -92
  334. data/spec/trema/hardware-switch_spec.rb +0 -54
  335. data/spec/trema/hello_spec.rb +0 -63
  336. data/spec/trema/host_spec.rb +0 -191
  337. data/spec/trema/link_spec.rb +0 -62
  338. data/spec/trema/list-switches-reply_spec.rb +0 -46
  339. data/spec/trema/match_spec.rb +0 -111
  340. data/spec/trema/open-vswitch_spec.rb +0 -121
  341. data/spec/trema/openflow-error_spec.rb +0 -141
  342. data/spec/trema/packet-in_spec.rb +0 -717
  343. data/spec/trema/packet-out_spec.rb +0 -125
  344. data/spec/trema/packetin-filter_spec.rb +0 -39
  345. data/spec/trema/port-mod_spec.rb +0 -98
  346. data/spec/trema/port-status-add_spec.rb +0 -32
  347. data/spec/trema/port-status-delete_spec.rb +0 -32
  348. data/spec/trema/port-status-modify_spec.rb +0 -71
  349. data/spec/trema/port-status_spec.rb +0 -38
  350. data/spec/trema/port_spec.rb +0 -59
  351. data/spec/trema/process_spec.rb +0 -69
  352. data/spec/trema/queue-get-config-reply_spec.rb +0 -65
  353. data/spec/trema/queue-get-config-request_spec.rb +0 -67
  354. data/spec/trema/send-out-port_spec.rb +0 -106
  355. data/spec/trema/set-config_spec.rb +0 -78
  356. data/spec/trema/set-eth-addr_spec.rb +0 -62
  357. data/spec/trema/set-ip-addr_spec.rb +0 -81
  358. data/spec/trema/set-ip-tos_spec.rb +0 -70
  359. data/spec/trema/set-transport-dst-port_spec.rb +0 -65
  360. data/spec/trema/set-transport-src-port_spec.rb +0 -65
  361. data/spec/trema/set-vlan-priority_spec.rb +0 -65
  362. data/spec/trema/set-vlan-vid_spec.rb +0 -65
  363. data/spec/trema/shell/vhost_spec.rb +0 -58
  364. data/spec/trema/shell/vswitch_spec.rb +0 -87
  365. data/spec/trema/stats-reply_spec.rb +0 -363
  366. data/spec/trema/stats-request_spec.rb +0 -166
  367. data/spec/trema/strip-vlan-header_spec.rb +0 -44
  368. data/spec/trema/switch-daemon_spec.rb +0 -81
  369. data/spec/trema/switch-disconnected_spec.rb +0 -56
  370. data/spec/trema/switch-manager_spec.rb +0 -41
  371. data/spec/trema/tremashark_spec.rb +0 -39
  372. data/spec/trema/util_spec.rb +0 -88
  373. data/spec/trema/vendor-action_spec.rb +0 -75
  374. data/spec/trema/vendor_spec.rb +0 -76
  375. data/spec/trema_spec.rb +0 -94
  376. data/src/examples/cbench_switch/README +0 -21
  377. data/src/examples/cbench_switch/cbench-switch.rb +0 -38
  378. data/src/examples/cbench_switch/cbench_switch.c +0 -66
  379. data/src/examples/dumper/dumper.c +0 -362
  380. data/src/examples/dumper/dumper.conf +0 -7
  381. data/src/examples/dumper/dumper.rb +0 -195
  382. data/src/examples/hello_trema/.gitignore +0 -2
  383. data/src/examples/hello_trema/README.md +0 -2
  384. data/src/examples/hello_trema/hello-trema.rb +0 -30
  385. data/src/examples/hello_trema/hello_trema.c +0 -48
  386. data/src/examples/hello_trema/sample.conf +0 -1
  387. data/src/examples/learning_switch/README +0 -15
  388. data/src/examples/learning_switch/fdb.rb +0 -110
  389. data/src/examples/learning_switch/learning-switch.rb +0 -90
  390. data/src/examples/learning_switch/learning_switch.c +0 -217
  391. data/src/examples/learning_switch/learning_switch.conf +0 -18
  392. data/src/examples/list_switches/README +0 -19
  393. data/src/examples/list_switches/list-switches.rb +0 -43
  394. data/src/examples/list_switches/list_switches.c +0 -79
  395. data/src/examples/list_switches/list_switches.conf +0 -15
  396. data/src/examples/match_compare/match-compare.conf +0 -30
  397. data/src/examples/match_compare/match-compare.rb +0 -97
  398. data/src/examples/multi_learning_switch/README +0 -14
  399. data/src/examples/multi_learning_switch/multi-learning-switch.rb +0 -94
  400. data/src/examples/multi_learning_switch/multi_learning_switch.c +0 -294
  401. data/src/examples/multi_learning_switch/multi_learning_switch.conf +0 -17
  402. data/src/examples/openflow_message/README +0 -11
  403. data/src/examples/openflow_message/echo.c +0 -80
  404. data/src/examples/openflow_message/echo.rb +0 -56
  405. data/src/examples/openflow_message/example.rb +0 -60
  406. data/src/examples/openflow_message/features-request.rb +0 -96
  407. data/src/examples/openflow_message/features_request.c +0 -167
  408. data/src/examples/openflow_message/hello.c +0 -68
  409. data/src/examples/openflow_message/hello.rb +0 -43
  410. data/src/examples/openflow_message/set-config.rb +0 -57
  411. data/src/examples/openflow_message/set_config.c +0 -68
  412. data/src/examples/openflow_message/vendor-action.rb +0 -43
  413. data/src/examples/openflow_message/vendor-stats-request.rb +0 -66
  414. data/src/examples/openflow_message/vendor_action.c +0 -103
  415. data/src/examples/openflow_switch/echo_switch.c +0 -89
  416. data/src/examples/openflow_switch/hello_switch.c +0 -85
  417. data/src/examples/packet_in/README +0 -15
  418. data/src/examples/packet_in/packet-in.rb +0 -37
  419. data/src/examples/packet_in/packet_in.c +0 -53
  420. data/src/examples/packet_in/packet_in.conf +0 -15
  421. data/src/examples/packetin_filter_config/README +0 -12
  422. data/src/examples/packetin_filter_config/add_filter.c +0 -71
  423. data/src/examples/packetin_filter_config/delete_filter.c +0 -63
  424. data/src/examples/packetin_filter_config/delete_filter_strict.c +0 -73
  425. data/src/examples/packetin_filter_config/dump_filter.c +0 -63
  426. data/src/examples/packetin_filter_config/dump_filter_strict.c +0 -73
  427. data/src/examples/packetin_filter_config/packetin_filter_config.c +0 -132
  428. data/src/examples/packetin_filter_config/packetin_filter_config.conf +0 -7
  429. data/src/examples/packetin_filter_config/utils.c +0 -100
  430. data/src/examples/packetin_filter_config/utils.h +0 -40
  431. data/src/examples/patch_panel/network.conf +0 -14
  432. data/src/examples/patch_panel/patch-panel.conf +0 -1
  433. data/src/examples/patch_panel/patch-panel.rb +0 -59
  434. data/src/examples/repeater_hub/README +0 -8
  435. data/src/examples/repeater_hub/repeater-hub.rb +0 -41
  436. data/src/examples/repeater_hub/repeater-hub_spec.rb +0 -154
  437. data/src/examples/repeater_hub/repeater_hub.c +0 -81
  438. data/src/examples/repeater_hub/repeater_hub.conf +0 -28
  439. data/src/examples/simple_router/README +0 -18
  440. data/src/examples/simple_router/arp-table.rb +0 -81
  441. data/src/examples/simple_router/interface.rb +0 -90
  442. data/src/examples/simple_router/routing-table.rb +0 -60
  443. data/src/examples/simple_router/simple-router.rb +0 -191
  444. data/src/examples/simple_router/simple_router.conf +0 -24
  445. data/src/examples/simple_router/simple_router_netns.conf +0 -15
  446. data/src/examples/simple_router/simple_router_network.conf +0 -6
  447. data/src/examples/switch_event_config/.gitignore +0 -6
  448. data/src/examples/switch_event_config/add_forward_entry.c +0 -227
  449. data/src/examples/switch_event_config/delete_forward_entry.c +0 -226
  450. data/src/examples/switch_event_config/dump_forward_entries.c +0 -190
  451. data/src/examples/switch_event_config/network.conf +0 -2
  452. data/src/examples/switch_event_config/set_forward_entries.c +0 -210
  453. data/src/examples/switch_info/README +0 -13
  454. data/src/examples/switch_info/switch-info.rb +0 -44
  455. data/src/examples/switch_info/switch_info.c +0 -78
  456. data/src/examples/switch_info/switch_info.conf +0 -3
  457. data/src/examples/switch_monitor/switch-monitor.conf +0 -3
  458. data/src/examples/switch_monitor/switch-monitor.rb +0 -56
  459. data/src/examples/switch_monitor/switch_monitor.c +0 -152
  460. data/src/examples/traffic_monitor/counter.c +0 -72
  461. data/src/examples/traffic_monitor/counter.h +0 -46
  462. data/src/examples/traffic_monitor/counter.rb +0 -44
  463. data/src/examples/traffic_monitor/fdb.c +0 -74
  464. data/src/examples/traffic_monitor/fdb.h +0 -48
  465. data/src/examples/traffic_monitor/fdb.rb +0 -42
  466. data/src/examples/traffic_monitor/traffic-monitor.rb +0 -98
  467. data/src/examples/traffic_monitor/traffic_monitor.c +0 -161
  468. data/src/examples/traffic_monitor/traffic_monitor.conf +0 -16
  469. data/src/examples/transparent_firewall/README.md +0 -61
  470. data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +0 -713
  471. data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +0 -3440
  472. data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +0 -11342
  473. data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +0 -1937
  474. data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +0 -7329
  475. data/src/examples/transparent_firewall/block-rfc1918.rb +0 -86
  476. data/src/examples/transparent_firewall/pass-delegated.rb +0 -178
  477. data/src/examples/transparent_firewall/regen_aggregated.sh +0 -53
  478. data/src/examples/transparent_firewall/stats-to-cidrs.rb +0 -59
  479. data/src/lib/arp.h +0 -64
  480. data/src/lib/bool.h +0 -47
  481. data/src/lib/buffer.c +0 -304
  482. data/src/lib/buffer.h +0 -54
  483. data/src/lib/byteorder.c +0 -571
  484. data/src/lib/byteorder.h +0 -108
  485. data/src/lib/checks.h +0 -40
  486. data/src/lib/chibach.c +0 -392
  487. data/src/lib/chibach.h +0 -69
  488. data/src/lib/chibach_private.c +0 -168
  489. data/src/lib/chibach_private.h +0 -50
  490. data/src/lib/daemon.c +0 -429
  491. data/src/lib/daemon.h +0 -40
  492. data/src/lib/doubly_linked_list.c +0 -284
  493. data/src/lib/doubly_linked_list.h +0 -86
  494. data/src/lib/ether.c +0 -47
  495. data/src/lib/ether.h +0 -92
  496. data/src/lib/etherip.h +0 -44
  497. data/src/lib/event_forward_interface.c +0 -788
  498. data/src/lib/event_forward_interface.h +0 -138
  499. data/src/lib/event_handler.c +0 -419
  500. data/src/lib/event_handler.h +0 -57
  501. data/src/lib/external_callback.c +0 -126
  502. data/src/lib/external_callback.h +0 -46
  503. data/src/lib/hash_table.c +0 -415
  504. data/src/lib/hash_table.h +0 -136
  505. data/src/lib/icmp.h +0 -72
  506. data/src/lib/igmp.h +0 -48
  507. data/src/lib/ipv4.h +0 -64
  508. data/src/lib/ipv6.h +0 -46
  509. data/src/lib/linked_list.c +0 -244
  510. data/src/lib/linked_list.h +0 -84
  511. data/src/lib/log.c +0 -636
  512. data/src/lib/log.h +0 -77
  513. data/src/lib/management_interface.c +0 -359
  514. data/src/lib/management_interface.h +0 -40
  515. data/src/lib/management_service_interface.c +0 -102
  516. data/src/lib/management_service_interface.h +0 -134
  517. data/src/lib/match.h +0 -82
  518. data/src/lib/match_table.c +0 -606
  519. data/src/lib/match_table.h +0 -49
  520. data/src/lib/message_queue.c +0 -143
  521. data/src/lib/message_queue.h +0 -59
  522. data/src/lib/messenger.c +0 -1821
  523. data/src/lib/messenger.h +0 -145
  524. data/src/lib/openflow_application_interface.c +0 -1800
  525. data/src/lib/openflow_application_interface.h +0 -359
  526. data/src/lib/openflow_message.c +0 -4240
  527. data/src/lib/openflow_message.h +0 -291
  528. data/src/lib/openflow_service_interface.h +0 -58
  529. data/src/lib/openflow_switch_interface.c +0 -1378
  530. data/src/lib/openflow_switch_interface.h +0 -262
  531. data/src/lib/packet_info.c +0 -336
  532. data/src/lib/packet_info.h +0 -233
  533. data/src/lib/packet_parser.c +0 -522
  534. data/src/lib/packetin_filter_interface.c +0 -292
  535. data/src/lib/packetin_filter_interface.h +0 -125
  536. data/src/lib/persistent_storage.c +0 -478
  537. data/src/lib/persistent_storage.h +0 -44
  538. data/src/lib/secure_channel.c +0 -496
  539. data/src/lib/secure_channel.h +0 -43
  540. data/src/lib/stat.c +0 -248
  541. data/src/lib/stat.h +0 -51
  542. data/src/lib/tcp.h +0 -62
  543. data/src/lib/timer.c +0 -349
  544. data/src/lib/timer.h +0 -51
  545. data/src/lib/trema.c +0 -776
  546. data/src/lib/trema.h +0 -80
  547. data/src/lib/trema.hpp +0 -49
  548. data/src/lib/trema_private.c +0 -175
  549. data/src/lib/trema_private.h +0 -64
  550. data/src/lib/trema_wrapper.c +0 -59
  551. data/src/lib/trema_wrapper.h +0 -66
  552. data/src/lib/udp.h +0 -41
  553. data/src/lib/utility.c +0 -625
  554. data/src/lib/utility.h +0 -84
  555. data/src/lib/wrapper.c +0 -121
  556. data/src/lib/wrapper.h +0 -76
  557. data/src/management/application.c +0 -222
  558. data/src/management/echo.c +0 -183
  559. data/src/management/set_logging_level.c +0 -151
  560. data/src/management/show_stats.c +0 -148
  561. data/src/management/trema_manager +0 -184
  562. data/src/packetin_filter/README +0 -17
  563. data/src/packetin_filter/packetin_filter.c +0 -575
  564. data/src/switch_manager/README +0 -20
  565. data/src/switch_manager/cookie_table.c +0 -290
  566. data/src/switch_manager/cookie_table.h +0 -70
  567. data/src/switch_manager/dpid_table.c +0 -108
  568. data/src/switch_manager/dpid_table.h +0 -43
  569. data/src/switch_manager/event_forward_entry_manipulation.c +0 -120
  570. data/src/switch_manager/event_forward_entry_manipulation.h +0 -31
  571. data/src/switch_manager/ofpmsg_recv.c +0 -497
  572. data/src/switch_manager/ofpmsg_recv.h +0 -39
  573. data/src/switch_manager/ofpmsg_send.c +0 -274
  574. data/src/switch_manager/ofpmsg_send.h +0 -51
  575. data/src/switch_manager/secure_channel_listener.c +0 -296
  576. data/src/switch_manager/secure_channel_listener.h +0 -40
  577. data/src/switch_manager/secure_channel_receiver.c +0 -129
  578. data/src/switch_manager/secure_channel_receiver.h +0 -40
  579. data/src/switch_manager/secure_channel_sender.c +0 -131
  580. data/src/switch_manager/secure_channel_sender.h +0 -41
  581. data/src/switch_manager/service_interface.c +0 -180
  582. data/src/switch_manager/service_interface.h +0 -44
  583. data/src/switch_manager/switch.c +0 -988
  584. data/src/switch_manager/switch.h +0 -50
  585. data/src/switch_manager/switch_manager.c +0 -643
  586. data/src/switch_manager/switch_manager.h +0 -65
  587. data/src/switch_manager/switch_option.c +0 -30
  588. data/src/switch_manager/switch_option.h +0 -41
  589. data/src/switch_manager/switchinfo.h +0 -81
  590. data/src/switch_manager/xid_table.c +0 -182
  591. data/src/switch_manager/xid_table.h +0 -53
  592. data/src/tremashark/README +0 -79
  593. data/src/tremashark/packet_capture.c +0 -358
  594. data/src/tremashark/pcap_private.h +0 -45
  595. data/src/tremashark/pcap_queue.c +0 -195
  596. data/src/tremashark/pcap_queue.h +0 -56
  597. data/src/tremashark/plugin/.gitignore +0 -6
  598. data/src/tremashark/plugin/packet-trema/.gitignore +0 -5
  599. data/src/tremashark/plugin/packet-trema/Makefile +0 -77
  600. data/src/tremashark/plugin/packet-trema/Makefile.am +0 -110
  601. data/src/tremashark/plugin/packet-trema/Makefile.common +0 -29
  602. data/src/tremashark/plugin/packet-trema/moduleinfo.h +0 -39
  603. data/src/tremashark/plugin/packet-trema/packet-trema.c +0 -1671
  604. data/src/tremashark/plugin/packet-trema/plugin.c +0 -31
  605. data/src/tremashark/plugin/user_dlts +0 -2
  606. data/src/tremashark/queue.c +0 -167
  607. data/src/tremashark/queue.h +0 -58
  608. data/src/tremashark/stdin_relay.c +0 -257
  609. data/src/tremashark/syslog_relay.c +0 -247
  610. data/src/tremashark/tremashark.c +0 -554
  611. data/trema +0 -11
  612. data/trema-config +0 -11
  613. data/unittests/buffer_stubs.c +0 -72
  614. data/unittests/cmockery_trema.c +0 -121
  615. data/unittests/cmockery_trema.h +0 -95
  616. data/unittests/lib/buffer_test.c +0 -368
  617. data/unittests/lib/byteorder_test.c +0 -1798
  618. data/unittests/lib/daemon_test.c +0 -804
  619. data/unittests/lib/doubly_linked_list_test.c +0 -348
  620. data/unittests/lib/ether_test.c +0 -125
  621. data/unittests/lib/event_forward_interface_test.c +0 -1676
  622. data/unittests/lib/external_callback_test.c +0 -282
  623. data/unittests/lib/hash_table_test.c +0 -278
  624. data/unittests/lib/linked_list_test.c +0 -434
  625. data/unittests/lib/log_test.c +0 -672
  626. data/unittests/lib/management_interface_test.c +0 -238
  627. data/unittests/lib/management_service_interface_test.c +0 -317
  628. data/unittests/lib/match_table_test.c +0 -1507
  629. data/unittests/lib/message_queue_test.c +0 -381
  630. data/unittests/lib/messenger_test.c +0 -623
  631. data/unittests/lib/openflow_application_interface_test.c +0 -3713
  632. data/unittests/lib/openflow_message_test.c +0 -8047
  633. data/unittests/lib/packet_info_test.c +0 -558
  634. data/unittests/lib/packet_parser_test.c +0 -784
  635. data/unittests/lib/packetin_filter_interface_test.c +0 -721
  636. data/unittests/lib/persistent_storage_test.c +0 -800
  637. data/unittests/lib/stat_test.c +0 -433
  638. data/unittests/lib/test_packets/arp_rep.cap +0 -0
  639. data/unittests/lib/test_packets/arp_req.cap +0 -0
  640. data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
  641. data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
  642. data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
  643. data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
  644. data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
  645. data/unittests/lib/test_packets/ipx.cap +0 -0
  646. data/unittests/lib/test_packets/lldp.cap +0 -0
  647. data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
  648. data/unittests/lib/test_packets/rarp_req.cap +0 -0
  649. data/unittests/lib/test_packets/tcp.cap +0 -0
  650. data/unittests/lib/test_packets/tcp_syn.cap +0 -0
  651. data/unittests/lib/test_packets/udp.cap +0 -0
  652. data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
  653. data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
  654. data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
  655. data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
  656. data/unittests/lib/timer_test.c +0 -246
  657. data/unittests/lib/trema_private_test.c +0 -321
  658. data/unittests/lib/trema_test.c +0 -1030
  659. data/unittests/lib/utility_test.c +0 -711
  660. data/unittests/lib/wrapper_test.c +0 -228
  661. data/unittests/packetin_filter/packetin_filter_test.c +0 -476
  662. data/unittests/switch_manager/switch_manager_test.c +0 -1183
  663. data/unittests/wrapper_stubs.c +0 -37
  664. data/vendor/.gitignore +0 -6
  665. data/vendor/README.md +0 -29
  666. data/vendor/cmockery-20110428.tar.gz +0 -0
  667. data/vendor/oflops-0.03.trema1.tar.gz +0 -0
  668. data/vendor/oflops_no_snmp+1.0.0.diff +0 -340
  669. data/vendor/openflow-1.0.0.tar.gz +0 -0
  670. data/vendor/openflow.git.tar.gz +0 -0
  671. data/vendor/openvswitch-1.2.2.trema1.tar.gz +0 -0
  672. data/vendor/openvswitch-1.2.2_librt-check.diff +0 -21
  673. data/vendor/packet-openflow.diff +0 -13
  674. data/vendor/ruby-ifconfig-1.2/COPYING +0 -340
  675. data/vendor/ruby-ifconfig-1.2/Changelog +0 -16
  676. data/vendor/ruby-ifconfig-1.2/INSTALL +0 -239
  677. data/vendor/ruby-ifconfig-1.2/README +0 -38
  678. data/vendor/ruby-ifconfig-1.2/Rakefile +0 -14
  679. data/vendor/ruby-ifconfig-1.2/TODO +0 -8
  680. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +0 -17
  681. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +0 -10
  682. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +0 -14
  683. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +0 -17
  684. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +0 -24
  685. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +0 -60
  686. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +0 -20
  687. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +0 -10
  688. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +0 -36
  689. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +0 -10
  690. data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +0 -71
  691. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +0 -72
  692. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +0 -69
  693. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +0 -3
  694. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +0 -84
  695. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +0 -130
  696. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +0 -49
  697. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +0 -43
  698. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +0 -112
  699. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +0 -55
  700. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +0 -38
  701. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +0 -77
  702. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +0 -4
  703. data/vendor/ruby-ifconfig-1.2/setup.rb +0 -1306
  704. data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +0 -35
  705. data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +0 -33
  706. data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +0 -35
  707. data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +0 -4
  708. data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +0 -31
  709. data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +0 -33
  710. data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +0 -33
  711. data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +0 -35
  712. data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +0 -40
  713. data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +0 -39
  714. data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +0 -40
  715. data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +0 -49
  716. data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +0 -39
  717. data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +0 -39
  718. data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +0 -44
@@ -1,233 +0,0 @@
1
- /*
2
- * Functions for accessing commonly-used header fields values.
3
- *
4
- * Copyright (C) 2008-2013 NEC Corporation
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License, version 2, as
8
- * published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License along
16
- * with this program; if not, write to the Free Software Foundation, Inc.,
17
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
- */
19
-
20
-
21
- #ifndef PACKET_INFO_H
22
- #define PACKET_INFO_H
23
-
24
-
25
- #include "arp.h"
26
- #include "checks.h"
27
- #include "bool.h"
28
- #include "ether.h"
29
- #include "icmp.h"
30
- #include "igmp.h"
31
- #include "ipv4.h"
32
- #include "ipv6.h"
33
- #include "tcp.h"
34
- #include "udp.h"
35
- #include "etherip.h"
36
-
37
-
38
- enum {
39
- ETH_DIX = 0x00000001,
40
- ETH_8023_RAW = 0x00000002,
41
- ETH_8023_LLC = 0x00000004,
42
- ETH_8023_SNAP = 0x00000008,
43
- ETH_8021Q = 0x00000010,
44
- NW_IPV4 = 0x00000100,
45
- NW_ICMPV4 = 0x00000200,
46
- NW_IPV6 = 0x00000400,
47
- NW_ICMPV6 = 0x00000800,
48
- NW_ARP = 0x00001000,
49
- NW_IGMP = 0x00002000,
50
- NW_LLDP = 0x00004000,
51
- NW_RARP = 0x00008000,
52
- TP_TCP = 0x00010000,
53
- TP_UDP = 0x00020000,
54
- TP_ETHERIP = 0x00040000,
55
-
56
- ETH_VTAG_DIX = ETH_8021Q | ETH_DIX,
57
- ETH_VTAG_RAW = ETH_8021Q | ETH_8023_RAW,
58
- ETH_VTAG_LLC = ETH_8021Q | ETH_8023_LLC,
59
- ETH_VTAG_SNAP = ETH_8021Q | ETH_8023_SNAP,
60
- ETH_ARP = ETH_DIX | NW_ARP,
61
- ETH_LLDP = ETH_DIX | NW_LLDP,
62
- ETH_RARP = ETH_DIX | NW_RARP,
63
- ETH_IPV4 = ETH_DIX | NW_IPV4,
64
- ETH_IPV4_ICMPV4 = ETH_IPV4 | NW_ICMPV4,
65
- ETH_IPV4_IGMP = ETH_IPV4 | NW_IGMP,
66
- ETH_IPV4_TCP = ETH_IPV4 | TP_TCP,
67
- ETH_IPV4_UDP = ETH_IPV4 | TP_UDP,
68
- ETH_IPV4_ETHERIP = ETH_IPV4 | TP_ETHERIP,
69
- ETH_VTAG_ARP = ETH_VTAG_DIX | NW_ARP,
70
- ETH_VTAG_IPV4 = ETH_VTAG_DIX | NW_IPV4,
71
- ETH_VTAG_IPV4_ICMPV4 = ETH_VTAG_IPV4 | NW_ICMPV4,
72
- ETH_VTAG_IPV4_TCP = ETH_VTAG_IPV4 | TP_TCP,
73
- ETH_VTAG_IPV4_UDP = ETH_VTAG_IPV4 | TP_UDP,
74
- ETH_SNAP_ARP = ETH_8023_SNAP | NW_ARP,
75
- ETH_SNAP_IPV4 = ETH_8023_SNAP | NW_IPV4,
76
- ETH_SNAP_IPV4_ICMPV4 = ETH_SNAP_IPV4 | NW_ICMPV4,
77
- ETH_SNAP_IPV4_TCP = ETH_SNAP_IPV4 | TP_TCP,
78
- ETH_SNAP_IPV4_UDP = ETH_SNAP_IPV4 | TP_UDP,
79
- ETH_VTAG_SNAP_ARP = ETH_VTAG_SNAP | NW_ARP,
80
- ETH_VTAG_SNAP_IPV4 = ETH_VTAG_SNAP | NW_IPV4,
81
- ETH_VTAG_SNAP_IPV4_ICMPV4 = ETH_VTAG_SNAP_IPV4 | NW_ICMPV4,
82
- ETH_VTAG_SNAP_IPV4_TCP = ETH_VTAG_SNAP_IPV4 | TP_TCP,
83
- ETH_VTAG_SNAP_IPV4_UDP = ETH_VTAG_SNAP_IPV4 | TP_UDP,
84
- };
85
-
86
-
87
- enum {
88
- SNAP_LLC_LENGTH = 3,
89
- SNAP_OUI_LENGTH = 3,
90
- };
91
-
92
-
93
- typedef struct {
94
- uint32_t format;
95
-
96
- uint8_t eth_macda[ ETH_ADDRLEN ];
97
- uint8_t eth_macsa[ ETH_ADDRLEN ];
98
- uint16_t eth_type;
99
-
100
- uint16_t vlan_tci;
101
- uint16_t vlan_tpid;
102
- uint8_t vlan_prio;
103
- uint8_t vlan_cfi;
104
- uint16_t vlan_vid;
105
-
106
- uint8_t snap_llc[ SNAP_LLC_LENGTH ];
107
- uint8_t snap_oui[ SNAP_OUI_LENGTH ];
108
- uint16_t snap_type;
109
-
110
- uint16_t arp_ar_hrd;
111
- uint16_t arp_ar_pro;
112
- uint8_t arp_ar_hln;
113
- uint8_t arp_ar_pln;
114
- uint16_t arp_ar_op;
115
- uint8_t arp_sha[ ETH_ADDRLEN ];
116
- uint32_t arp_spa;
117
- uint8_t arp_tha[ ETH_ADDRLEN ];
118
- uint32_t arp_tpa;
119
-
120
- uint8_t ipv4_version;
121
- uint8_t ipv4_ihl;
122
- uint8_t ipv4_tos;
123
- uint16_t ipv4_tot_len;
124
- uint16_t ipv4_id;
125
- uint16_t ipv4_frag_off;
126
- uint8_t ipv4_ttl;
127
- uint8_t ipv4_protocol;
128
- uint16_t ipv4_checksum;
129
- uint32_t ipv4_saddr;
130
- uint32_t ipv4_daddr;
131
-
132
- uint8_t ipv6_version;
133
- uint8_t ipv6_tc;
134
- uint32_t ipv6_flowlabel;
135
- uint16_t ipv6_plen;
136
- uint16_t ipv6_nexthdr;
137
- uint16_t ipv6_hoplimit;
138
- uint8_t ipv6_saddr[ IPV6_ADDRLEN ];
139
- uint8_t ipv6_daddr[ IPV6_ADDRLEN ];
140
-
141
- uint8_t icmpv4_type;
142
- uint8_t icmpv4_code;
143
- uint16_t icmpv4_checksum;
144
- uint16_t icmpv4_id;
145
- uint16_t icmpv4_seq;
146
- uint32_t icmpv4_gateway;
147
-
148
- uint8_t igmp_type;
149
- uint8_t igmp_code;
150
- uint16_t igmp_checksum;
151
- uint32_t igmp_group;
152
-
153
- uint16_t tcp_src_port;
154
- uint16_t tcp_dst_port;
155
- uint32_t tcp_seq_no;
156
- uint32_t tcp_ack_no;
157
- uint8_t tcp_offset;
158
- uint8_t tcp_flags;
159
- uint16_t tcp_window;
160
- uint16_t tcp_checksum;
161
- uint16_t tcp_urgent;
162
-
163
- uint16_t udp_src_port;
164
- uint16_t udp_dst_port;
165
- uint16_t udp_len;
166
- uint16_t udp_checksum;
167
-
168
- uint16_t etherip_version;
169
- uint16_t etherip_offset;
170
-
171
- void *l2_header;
172
- void *l2_payload;
173
- size_t l2_payload_length;
174
- void *l3_header;
175
- void *l3_payload;
176
- size_t l3_payload_length;
177
- void *l4_header;
178
- void *l4_payload;
179
- size_t l4_payload_length;
180
- } packet_info;
181
-
182
-
183
- bool parse_packet( buffer *buf );
184
-
185
- void calloc_packet_info( buffer *frame );
186
- void free_packet_info( buffer *frame );
187
- packet_info get_packet_info( const buffer *frame );
188
-
189
- bool packet_type_eth_dix( const buffer *frame );
190
- bool packet_type_eth_vtag( const buffer *frame );
191
- bool packet_type_eth_raw( const buffer *frame );
192
- bool packet_type_eth_llc( const buffer *frame );
193
- bool packet_type_eth_snap( const buffer *frame );
194
- bool packet_type_ether( const buffer *frame );
195
- bool packet_type_arp( const buffer *frame );
196
- bool packet_type_rarp( const buffer *frame );
197
- bool packet_type_ipv4( const buffer *frame );
198
- bool packet_type_ipv6( const buffer *frame );
199
- bool packet_type_lldp( const buffer *frame );
200
- bool packet_type_icmpv4( const buffer *frame );
201
- bool packet_type_igmp( const buffer *frame );
202
- bool packet_type_ipv4_tcp( const buffer *frame );
203
- bool packet_type_ipv6_tcp( const buffer *frame );
204
- bool packet_type_ipv4_udp( const buffer *frame );
205
- bool packet_type_ipv6_udp( const buffer *frame );
206
- bool packet_type_ipv4_etherip( const buffer *frame );
207
-
208
- bool packet_type_arp_request( const buffer *frame );
209
- bool packet_type_arp_reply( const buffer *frame );
210
- bool packet_type_rarp_request( const buffer *frame );
211
- bool packet_type_rarp_reply( const buffer *frame );
212
-
213
- bool packet_type_icmpv4_echo_reply( const buffer *frame );
214
- bool packet_type_icmpv4_dst_unreach( const buffer *frame );
215
- bool packet_type_icmpv4_redirect( const buffer *frame );
216
- bool packet_type_icmpv4_echo_request( const buffer *frame );
217
-
218
- bool packet_type_igmp_membership_query( const buffer *frame );
219
- bool packet_type_igmp_v1_membership_report( const buffer *frame );
220
- bool packet_type_igmp_v2_membership_report( const buffer *frame );
221
- bool packet_type_igmp_v2_leave_group( const buffer *frame );
222
- bool packet_type_igmp_v3_membership_report( const buffer *frame );
223
-
224
-
225
- #endif // PACKET_INFO_H
226
-
227
-
228
- /*
229
- * Local variables:
230
- * c-basic-offset: 2
231
- * indent-tabs-mode: nil
232
- * End:
233
- */
@@ -1,522 +0,0 @@
1
- /*
2
- * Copyright (C) 2008-2013 NEC Corporation
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License, version 2, as
6
- * published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- *
13
- * You should have received a copy of the GNU General Public License along
14
- * with this program; if not, write to the Free Software Foundation, Inc.,
15
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
- */
17
-
18
-
19
- #include <arpa/inet.h>
20
- #include <assert.h>
21
- #include <net/ethernet.h>
22
- #include <netinet/ip.h>
23
- #include <stdint.h>
24
- #include "packet_info.h"
25
- #include "log.h"
26
- #include "wrapper.h"
27
-
28
-
29
- #define REMAINED_BUFFER_LENGTH( buf, ptr ) \
30
- ( buf->length - ( size_t ) ( ( char * ) ptr - ( char * ) buf->data ) )
31
-
32
-
33
- static void
34
- parse_ether( buffer *buf ) {
35
- assert( buf != NULL );
36
-
37
- packet_info *packet_info = buf->user_data;
38
- void *ptr = packet_info->l2_header;
39
- assert( ptr != NULL );
40
-
41
- // Check the length of remained buffer
42
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
43
- if ( length < sizeof( ether_header_t ) ) {
44
- return;
45
- }
46
-
47
- // Ethernet header
48
- ether_header_t *ether_header = ptr;
49
- memcpy( packet_info->eth_macsa, ether_header->macsa, ETH_ADDRLEN );
50
- memcpy( packet_info->eth_macda, ether_header->macda, ETH_ADDRLEN );
51
- packet_info->eth_type = ntohs( ether_header->type );
52
-
53
- ptr = ( void * ) ( ether_header + 1 );
54
-
55
- // vlan tag
56
- if ( packet_info->eth_type == ETH_ETHTYPE_TPID ) {
57
- // Check the length of remained buffer
58
- length = REMAINED_BUFFER_LENGTH( buf, ptr );
59
- if ( length < sizeof( vlantag_header_t ) ) {
60
- return;
61
- }
62
- vlantag_header_t *vlantag_header = ptr;
63
-
64
- packet_info->vlan_tci = ntohs( vlantag_header->tci );
65
- packet_info->vlan_tpid = packet_info->eth_type;
66
- packet_info->vlan_prio = TCI_GET_PRIO( packet_info->vlan_tci );
67
- packet_info->vlan_cfi = TCI_GET_CFI( packet_info->vlan_tci );
68
- packet_info->vlan_vid = TCI_GET_VID( packet_info->vlan_tci );
69
-
70
- // Rewrite eth_type
71
- packet_info->eth_type = ntohs( vlantag_header->type );
72
-
73
- packet_info->format |= ETH_8021Q;
74
-
75
- ptr = ( void * ) ( vlantag_header + 1 );
76
- }
77
-
78
- // Skip nested vlan headers.
79
- while ( packet_info->eth_type == ETH_ETHTYPE_TPID ) {
80
- // Check the length of remained buffer
81
- length = REMAINED_BUFFER_LENGTH( buf, ptr );
82
- if ( length < sizeof( vlantag_header_t ) ) {
83
- return;
84
- }
85
- vlantag_header_t *vlantag_header = ptr;
86
-
87
- // Rewrite eth_type
88
- packet_info->eth_type = ntohs( vlantag_header->type );
89
- ptr = ( void * ) ( vlantag_header + 1 );
90
- }
91
-
92
- // snap header.
93
- if ( packet_info->eth_type <= ETH_MTU ) {
94
- // Check the length of remained buffer
95
- length = REMAINED_BUFFER_LENGTH( buf, ptr );
96
- if ( length < sizeof( snap_header_t ) ) {
97
- return;
98
- }
99
- snap_header_t *snap_header = ptr;
100
-
101
- memcpy( packet_info->snap_llc, snap_header->llc, SNAP_LLC_LENGTH );
102
- memcpy( packet_info->snap_oui, snap_header->oui, SNAP_OUI_LENGTH );
103
- packet_info->snap_type = ntohs( snap_header->type );
104
-
105
- packet_info->format |= ETH_8023_SNAP;
106
-
107
- ptr = ( void * ) ( snap_header + 1 );
108
- }
109
- else {
110
- packet_info->format |= ETH_DIX;
111
- }
112
-
113
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
114
- if ( payload_length > 0 ) {
115
- packet_info->l2_payload = ptr;
116
- packet_info->l2_payload_length = payload_length;
117
- }
118
- }
119
-
120
-
121
- static void
122
- parse_arp( buffer *buf, uint32_t format ) {
123
- assert( buf != NULL );
124
-
125
- packet_info *packet_info = buf->user_data;
126
- void *ptr = packet_info->l3_header;
127
- assert( ptr != NULL );
128
-
129
- // Check the length of remained buffer
130
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
131
- if ( length < sizeof( arp_header_t ) ) {
132
- return;
133
- }
134
-
135
- // Ethernet header
136
- arp_header_t *arp_header = ptr;
137
- packet_info->arp_ar_hrd = ntohs( arp_header->ar_hrd );
138
- packet_info->arp_ar_pro = ntohs( arp_header->ar_pro );
139
- packet_info->arp_ar_hln = arp_header->ar_hln;
140
- packet_info->arp_ar_pln = arp_header->ar_pln;
141
- packet_info->arp_ar_op = ntohs( arp_header->ar_op );
142
- memcpy( packet_info->arp_sha, arp_header->sha, ETH_ADDRLEN );
143
- packet_info->arp_spa = ntohl( arp_header->sip );
144
- memcpy( packet_info->arp_tha, arp_header->tha, ETH_ADDRLEN );
145
- packet_info->arp_tpa = ntohl( arp_header->tip );
146
-
147
- packet_info->format |= format;
148
- }
149
-
150
-
151
- static void
152
- parse_ipv4( buffer *buf ) {
153
- assert( buf != NULL );
154
-
155
- packet_info *packet_info = buf->user_data;
156
- void *ptr = packet_info->l3_header;
157
- assert( ptr != NULL );
158
-
159
- // Check the length of remained buffer for an ipv4 header without options.
160
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
161
- if ( length < sizeof( ipv4_header_t ) ) {
162
- return;
163
- }
164
-
165
- // Check the length of remained buffer for an ipv4 header with options.
166
- ipv4_header_t *ipv4_header = ptr;
167
- if ( ipv4_header->ihl < 5 ) {
168
- return;
169
- }
170
- if ( length < ( size_t ) ipv4_header->ihl * 4 ) {
171
- return;
172
- }
173
-
174
- // Parses IPv4 header
175
- packet_info->ipv4_version = ipv4_header->version;
176
- packet_info->ipv4_ihl = ipv4_header->ihl;
177
- packet_info->ipv4_tos = ipv4_header->tos;
178
- packet_info->ipv4_tot_len = ntohs( ipv4_header->tot_len );
179
- packet_info->ipv4_id = ntohs( ipv4_header->id );
180
- packet_info->ipv4_frag_off = ntohs( ipv4_header->frag_off );
181
- packet_info->ipv4_ttl = ipv4_header->ttl;
182
- packet_info->ipv4_protocol = ipv4_header->protocol;
183
- packet_info->ipv4_checksum = ntohs( ipv4_header->csum );
184
- packet_info->ipv4_saddr = ntohl( ipv4_header->saddr );
185
- packet_info->ipv4_daddr = ntohl( ipv4_header->daddr );
186
-
187
- ptr = ( char * ) ipv4_header + packet_info->ipv4_ihl * 4;
188
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
189
- if ( payload_length > 0 ) {
190
- packet_info->l3_payload = ptr;
191
- packet_info->l3_payload_length = payload_length;
192
- }
193
-
194
- packet_info->format |= NW_IPV4;
195
- }
196
-
197
-
198
- static void
199
- parse_ipv6( buffer *buf ) {
200
- assert( buf != NULL );
201
-
202
- packet_info *packet_info = buf->user_data;
203
- void *ptr = packet_info->l3_header;
204
- assert( ptr != NULL );
205
-
206
- // Check the length of remained buffer for an ipv6 header without nexthdr.
207
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
208
- if ( length < sizeof( ipv6_header_t ) ) {
209
- return;
210
- }
211
-
212
- // Parses IPv6 header
213
- ipv6_header_t *ipv6_header = ptr;
214
- uint32_t hdrctl = ntohl( ipv6_header->hdrctl );
215
- packet_info->ipv6_version = ( uint8_t ) ( hdrctl >> 28 );
216
- packet_info->ipv6_tc = ( uint8_t ) ( hdrctl >> 20 & 0xFF );
217
- packet_info->ipv6_flowlabel = hdrctl & 0xFFFFF;
218
- packet_info->ipv6_plen = ntohs( ipv6_header->plen );
219
- packet_info->ipv6_nexthdr = ipv6_header->nexthdr;
220
- packet_info->ipv6_hoplimit = ipv6_header->hoplimit;
221
- memcpy( packet_info->ipv6_saddr, ipv6_header->saddr, IPV6_ADDRLEN );
222
- memcpy( packet_info->ipv6_daddr, ipv6_header->daddr, IPV6_ADDRLEN );
223
-
224
- packet_info->format |= NW_IPV6;
225
- }
226
-
227
-
228
- static void
229
- parse_lldp( buffer *buf ) {
230
- assert( buf != NULL );
231
-
232
- packet_info *packet_info = buf->user_data;
233
- void *ptr = packet_info->l3_header;
234
- assert( ptr != NULL );
235
-
236
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
237
- if ( payload_length > 0 ) {
238
- packet_info->l3_payload = ptr;
239
- packet_info->l3_payload_length = payload_length;
240
- }
241
-
242
- packet_info->format |= NW_LLDP;
243
- }
244
-
245
-
246
- static void
247
- parse_icmp( buffer *buf ) {
248
- assert( buf != NULL );
249
-
250
- packet_info *packet_info = buf->user_data;
251
- void *ptr = packet_info->l4_header;
252
- assert( ptr != NULL );
253
-
254
- // Check the length of remained buffer
255
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
256
- if ( length < sizeof( icmp_header_t ) ) {
257
- return;
258
- }
259
-
260
- // ICMPV4 header
261
- icmp_header_t *icmp_header = ptr;
262
- packet_info->icmpv4_type = icmp_header->type;
263
- packet_info->icmpv4_code = icmp_header->code;
264
- packet_info->icmpv4_checksum = ntohs( icmp_header->csum );
265
-
266
- switch ( packet_info->icmpv4_type ) {
267
- case ICMP_TYPE_ECHOREP:
268
- case ICMP_TYPE_ECHOREQ:
269
- packet_info->icmpv4_id = ntohs( icmp_header->icmp_data.echo.ident );
270
- packet_info->icmpv4_seq = ntohs( icmp_header->icmp_data.echo.seq );
271
- break;
272
-
273
- case ICMP_TYPE_REDIRECT:
274
- packet_info->icmpv4_gateway = ntohl( icmp_header->icmp_data.gateway );
275
- break;
276
-
277
- default:
278
- break;
279
- }
280
-
281
- ptr = ( void * ) ( icmp_header + 1 );
282
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
283
- if ( payload_length > 0 ) {
284
- packet_info->l4_payload = ptr;
285
- packet_info->l4_payload_length = payload_length;
286
- }
287
-
288
- packet_info->format |= NW_ICMPV4;
289
- }
290
-
291
-
292
- static void
293
- parse_udp( buffer *buf ) {
294
- assert( buf != NULL );
295
-
296
- packet_info *packet_info = buf->user_data;
297
- void *ptr = packet_info->l4_header;
298
- assert( ptr != NULL );
299
-
300
- // Check the length of remained buffer
301
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
302
- if ( length < sizeof( udp_header_t ) ) {
303
- return;
304
- }
305
-
306
- // UDP header
307
- udp_header_t *udp_header = ptr;
308
- packet_info->udp_src_port = ntohs( udp_header->src_port );
309
- packet_info->udp_dst_port = ntohs( udp_header->dst_port );
310
- packet_info->udp_len = ntohs( udp_header->len );
311
- packet_info->udp_checksum = ntohs( udp_header->csum );
312
-
313
- ptr = ( void * ) ( udp_header + 1 );
314
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
315
- if ( payload_length > 0 ) {
316
- packet_info->l4_payload = ptr;
317
- packet_info->l4_payload_length = payload_length;
318
- }
319
-
320
- packet_info->format |= TP_UDP;
321
- }
322
-
323
-
324
- static void
325
- parse_tcp( buffer *buf ) {
326
- assert( buf != NULL );
327
-
328
- packet_info *packet_info = buf->user_data;
329
- void *ptr = packet_info->l4_header;
330
- assert( ptr != NULL );
331
-
332
- // Check the length of remained buffer for the tcp header without options
333
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
334
- if ( length < sizeof( tcp_header_t ) ) {
335
- return;
336
- }
337
-
338
- // Check the length of remained buffer for the tcp header with options
339
- tcp_header_t *tcp_header = ptr;
340
- if ( tcp_header->offset < 5 ) {
341
- return;
342
- }
343
- if ( length < ( size_t ) tcp_header->offset * 4 ) {
344
- return;
345
- }
346
-
347
- // TCP header
348
- packet_info->tcp_src_port = ntohs( tcp_header->src_port );
349
- packet_info->tcp_dst_port = ntohs( tcp_header->dst_port );
350
- packet_info->tcp_seq_no = ntohl( tcp_header->seq_no );
351
- packet_info->tcp_ack_no = ntohl( tcp_header->ack_no );
352
- packet_info->tcp_offset = tcp_header->offset;
353
- packet_info->tcp_flags = tcp_header->flags;
354
- packet_info->tcp_window = ntohs( tcp_header->window );
355
- packet_info->tcp_checksum = ntohs( tcp_header->csum );
356
- packet_info->tcp_urgent = ntohs( tcp_header->urgent );
357
-
358
- ptr = ( char * ) tcp_header + packet_info->tcp_offset * 4;
359
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
360
- if ( payload_length > 0 ) {
361
- packet_info->l4_payload = ptr;
362
- packet_info->l4_payload_length = payload_length;
363
- }
364
-
365
- packet_info->format |= TP_TCP;
366
- }
367
-
368
-
369
- static void
370
- parse_igmp( buffer *buf ) {
371
- assert( buf != NULL );
372
-
373
- packet_info *packet_info = buf->user_data;
374
- void *ptr = packet_info->l4_header;
375
- assert( ptr != NULL );
376
-
377
- // Check the length of remained buffer
378
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
379
- if ( length < sizeof( igmp_header_t ) ) {
380
- return;
381
- }
382
-
383
- igmp_header_t *igmp = ptr;
384
- packet_info->igmp_type = igmp->type;
385
- packet_info->igmp_code = igmp->code;
386
- packet_info->igmp_checksum = ntohs( igmp->csum );
387
- packet_info->igmp_group = ntohl( igmp->group );
388
-
389
- packet_info->format |= NW_IGMP;
390
- }
391
-
392
-
393
- static void
394
- parse_etherip( buffer *buf ) {
395
- assert( buf != NULL );
396
-
397
- packet_info *packet_info = buf->user_data;
398
- void *ptr = packet_info->l4_header;
399
- assert( ptr != NULL );
400
-
401
- // Check the length of remained buffer
402
- size_t length = REMAINED_BUFFER_LENGTH( buf, ptr );
403
- if ( length < sizeof( etherip_header ) ) {
404
- return;
405
- }
406
-
407
- // Ether header
408
- etherip_header *etherip_header = ptr;
409
- packet_info->etherip_version = ntohs( etherip_header->version );
410
- packet_info->etherip_offset = 0;
411
-
412
- ptr = ( void * ) ( etherip_header + 1 );
413
- size_t payload_length = REMAINED_BUFFER_LENGTH( buf, ptr );
414
- if ( payload_length > 0 ) {
415
- packet_info->l4_payload = ptr;
416
- packet_info->l4_payload_length = payload_length;
417
- packet_info->etherip_offset = ( uint16_t ) ( ( char * ) ptr - ( char * ) buf->data );
418
- }
419
-
420
- packet_info->format |= TP_ETHERIP;
421
- }
422
-
423
-
424
- bool
425
- parse_packet( buffer *buf ) {
426
- assert( buf != NULL );
427
- assert( buf->data != NULL );
428
-
429
- calloc_packet_info( buf );
430
- if ( buf->user_data == NULL ) {
431
- error( "Can't alloc memory for packet_info." );
432
- return false;
433
- }
434
-
435
- // Parse the L2 header.
436
- packet_info *packet_info = buf->user_data;
437
- packet_info->l2_header = buf->data;
438
- parse_ether( buf );
439
-
440
- // Parse the L3 header.
441
- switch ( packet_info->eth_type ) {
442
- case ETH_ETHTYPE_ARP:
443
- packet_info->l3_header = packet_info->l2_payload;
444
- parse_arp( buf, NW_ARP );
445
- break;
446
-
447
- case ETH_ETHTYPE_RARP:
448
- packet_info->l3_header = packet_info->l2_payload;
449
- parse_arp( buf, NW_RARP );
450
- break;
451
-
452
- case ETH_ETHTYPE_IPV4:
453
- packet_info->l3_header = packet_info->l2_payload;
454
- parse_ipv4( buf );
455
- break;
456
-
457
- case ETH_ETHTYPE_IPV6:
458
- packet_info->l3_header = packet_info->l2_payload;
459
- parse_ipv6( buf );
460
- break;
461
-
462
- case ETH_ETHTYPE_LLDP:
463
- packet_info->l3_header = packet_info->l2_payload;
464
- parse_lldp( buf );
465
- break;
466
-
467
- default:
468
- // Unknown L3 type
469
- return true;
470
- }
471
-
472
- if ( !( packet_info->format & NW_IPV4 ) ) {
473
- return true;
474
- }
475
- else if ( ( packet_info->ipv4_frag_off & IP_OFFMASK ) != 0 ) {
476
- // The ipv4 packet is fragmented.
477
- return true;
478
- }
479
-
480
- // Parse the L4 header.
481
- switch ( packet_info->ipv4_protocol ) {
482
- case IPPROTO_ICMP:
483
- packet_info->l4_header = packet_info->l3_payload;
484
- parse_icmp( buf );
485
- break;
486
-
487
- case IPPROTO_TCP:
488
- packet_info->l4_header = packet_info->l3_payload;
489
- parse_tcp( buf );
490
- break;
491
-
492
- case IPPROTO_UDP:
493
- packet_info->l4_header = packet_info->l3_payload;
494
- parse_udp( buf );
495
- break;
496
-
497
- case IPPROTO_IGMP:
498
- packet_info->l4_header = packet_info->l3_payload;
499
- parse_igmp( buf );
500
- break;
501
-
502
- case IPPROTO_ETHERIP:
503
- packet_info->l4_header = packet_info->l3_payload;
504
- parse_etherip( buf );
505
- break;
506
-
507
- default:
508
- // Unknown L4 type
509
- break;
510
- }
511
-
512
- return true;
513
-
514
- }
515
-
516
-
517
- /*
518
- * Local variables:
519
- * c-basic-offset: 2
520
- * indent-tabs-mode: nil
521
- * End:
522
- */