trema 0.1.3

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 (560) hide show
  1. data/.mono.rant +4107 -0
  2. data/.rspec +1 -0
  3. data/.yardopts +4 -0
  4. data/Doxyfile +1679 -0
  5. data/GPL2 +339 -0
  6. data/Gemfile +22 -0
  7. data/Gemfile.lock +71 -0
  8. data/README.md +135 -0
  9. data/Rakefile +140 -0
  10. data/Rantfile +834 -0
  11. data/VERSION +1 -0
  12. data/build.rb +32 -0
  13. data/cruise.rb +389 -0
  14. data/features/example.dumper.feature +87 -0
  15. data/features/example.learning_switch.feature +39 -0
  16. data/features/example.list_switches.feature +38 -0
  17. data/features/example.message.echo_reply.feature +26 -0
  18. data/features/example.message.echo_request.feature +25 -0
  19. data/features/example.message.features_request.feature +84 -0
  20. data/features/example.message.hello.feature +25 -0
  21. data/features/example.message.set_config.feature +27 -0
  22. data/features/example.multi_learning_switch.feature +135 -0
  23. data/features/example.packetin_filter_config.feature +91 -0
  24. data/features/example.repeater_hub.feature +49 -0
  25. data/features/example.switch_monitor.feature +39 -0
  26. data/features/packetin_filter.feature +49 -0
  27. data/features/step_definitions/kill_steps.rb +30 -0
  28. data/features/step_definitions/log_steps.rb +90 -0
  29. data/features/step_definitions/misc_steps.rb +64 -0
  30. data/features/step_definitions/off_steps.rb +30 -0
  31. data/features/step_definitions/run_steps.rb +91 -0
  32. data/features/step_definitions/send_packets_steps.rb +42 -0
  33. data/features/step_definitions/show_stats_steps.rb +43 -0
  34. data/features/step_definitions/stats_steps.rb +39 -0
  35. data/features/support/env.rb +75 -0
  36. data/features/support/hooks.rb +8 -0
  37. data/features/switch_manager.feature +35 -0
  38. data/features/trema-config.feature +68 -0
  39. data/features/trema.dump_flows.feature +25 -0
  40. data/features/trema.feature +25 -0
  41. data/features/trema.kill.feature +53 -0
  42. data/features/trema.killall.feature +30 -0
  43. data/features/trema.reset_stats.feature +14 -0
  44. data/features/trema.run.feature +46 -0
  45. data/features/trema.send_packets.feature +56 -0
  46. data/features/trema.show_stats.feature +67 -0
  47. data/features/tutorial.hello_trema.feature +27 -0
  48. data/features/tutorial.packet_in.feature +47 -0
  49. data/features/tutorial.switch_info.feature +55 -0
  50. data/ruby/.gitignore +4 -0
  51. data/ruby/blocker.rb +78 -0
  52. data/ruby/extconf.rb +71 -0
  53. data/ruby/sub-process.rb +291 -0
  54. data/ruby/trema/action-common.c +60 -0
  55. data/ruby/trema/action-common.h +42 -0
  56. data/ruby/trema/action-enqueue.c +161 -0
  57. data/ruby/trema/action-enqueue.h +40 -0
  58. data/ruby/trema/action-output.c +169 -0
  59. data/ruby/trema/action-output.h +42 -0
  60. data/ruby/trema/action-set-dl-dst.c +131 -0
  61. data/ruby/trema/action-set-dl-dst.h +44 -0
  62. data/ruby/trema/action-set-dl-src.c +131 -0
  63. data/ruby/trema/action-set-dl-src.h +44 -0
  64. data/ruby/trema/action-set-nw-dst.c +135 -0
  65. data/ruby/trema/action-set-nw-dst.h +42 -0
  66. data/ruby/trema/action-set-nw-src.c +140 -0
  67. data/ruby/trema/action-set-nw-src.h +42 -0
  68. data/ruby/trema/action-set-nw-tos.c +124 -0
  69. data/ruby/trema/action-set-nw-tos.h +42 -0
  70. data/ruby/trema/action-set-tp-dst.c +122 -0
  71. data/ruby/trema/action-set-tp-dst.h +42 -0
  72. data/ruby/trema/action-set-tp-src.c +124 -0
  73. data/ruby/trema/action-set-tp-src.h +42 -0
  74. data/ruby/trema/action-set-vlan-pcp.c +128 -0
  75. data/ruby/trema/action-set-vlan-pcp.h +42 -0
  76. data/ruby/trema/action-set-vlan-vid.c +125 -0
  77. data/ruby/trema/action-set-vlan-vid.h +42 -0
  78. data/ruby/trema/action-strip-vlan.c +81 -0
  79. data/ruby/trema/action-strip-vlan.h +42 -0
  80. data/ruby/trema/action-vendor.c +121 -0
  81. data/ruby/trema/action-vendor.h +42 -0
  82. data/ruby/trema/aggregate-stats-reply.rb +70 -0
  83. data/ruby/trema/app.rb +112 -0
  84. data/ruby/trema/barrier-reply.c +99 -0
  85. data/ruby/trema/barrier-reply.h +46 -0
  86. data/ruby/trema/barrier-request.c +108 -0
  87. data/ruby/trema/barrier-request.h +44 -0
  88. data/ruby/trema/cli.rb +269 -0
  89. data/ruby/trema/command.rb +40 -0
  90. data/ruby/trema/command/dump_flows.rb +62 -0
  91. data/ruby/trema/command/kill.rb +71 -0
  92. data/ruby/trema/command/killall.rb +56 -0
  93. data/ruby/trema/command/reset_stats.rb +61 -0
  94. data/ruby/trema/command/ruby.rb +55 -0
  95. data/ruby/trema/command/run.rb +120 -0
  96. data/ruby/trema/command/send_packets.rb +130 -0
  97. data/ruby/trema/command/shell.rb +61 -0
  98. data/ruby/trema/command/show_stats.rb +84 -0
  99. data/ruby/trema/command/usage.rb +61 -0
  100. data/ruby/trema/command/version.rb +39 -0
  101. data/ruby/trema/controller.c +595 -0
  102. data/ruby/trema/controller.h +44 -0
  103. data/ruby/trema/controller.rb +81 -0
  104. data/ruby/trema/daemon.rb +167 -0
  105. data/ruby/trema/dsl.rb +34 -0
  106. data/ruby/trema/dsl/configuration.rb +153 -0
  107. data/ruby/trema/dsl/context.rb +71 -0
  108. data/ruby/trema/dsl/link.rb +41 -0
  109. data/ruby/trema/dsl/parser.rb +70 -0
  110. data/ruby/trema/dsl/run.rb +49 -0
  111. data/ruby/trema/dsl/runner.rb +165 -0
  112. data/ruby/trema/dsl/stanza.rb +53 -0
  113. data/ruby/trema/dsl/switch.rb +78 -0
  114. data/ruby/trema/dsl/syntax-error.rb +33 -0
  115. data/ruby/trema/dsl/syntax.rb +109 -0
  116. data/ruby/trema/dsl/vhost.rb +108 -0
  117. data/ruby/trema/dsl/vswitch.rb +47 -0
  118. data/ruby/trema/echo-reply.c +107 -0
  119. data/ruby/trema/echo-reply.h +42 -0
  120. data/ruby/trema/echo-request.c +140 -0
  121. data/ruby/trema/echo-request.h +42 -0
  122. data/ruby/trema/error.c +253 -0
  123. data/ruby/trema/error.h +44 -0
  124. data/ruby/trema/exact-match.rb +36 -0
  125. data/ruby/trema/executables.rb +95 -0
  126. data/ruby/trema/features-reply.c +238 -0
  127. data/ruby/trema/features-reply.h +60 -0
  128. data/ruby/trema/features-request.c +109 -0
  129. data/ruby/trema/features-request.h +44 -0
  130. data/ruby/trema/flow-removed.c +275 -0
  131. data/ruby/trema/flow-removed.h +46 -0
  132. data/ruby/trema/flow-stats-reply.rb +109 -0
  133. data/ruby/trema/flow.rb +56 -0
  134. data/ruby/trema/get-config-reply.c +159 -0
  135. data/ruby/trema/get-config-reply.h +52 -0
  136. data/ruby/trema/get-config-request.c +107 -0
  137. data/ruby/trema/get-config-request.h +44 -0
  138. data/ruby/trema/hello.c +110 -0
  139. data/ruby/trema/hello.h +44 -0
  140. data/ruby/trema/host.rb +257 -0
  141. data/ruby/trema/ip.rb +101 -0
  142. data/ruby/trema/link.rb +176 -0
  143. data/ruby/trema/list-switches-reply.c +46 -0
  144. data/ruby/trema/list-switches-reply.h +40 -0
  145. data/ruby/trema/logger.c +162 -0
  146. data/ruby/trema/logger.h +44 -0
  147. data/ruby/trema/mac.rb +151 -0
  148. data/ruby/trema/match.c +594 -0
  149. data/ruby/trema/match.h +36 -0
  150. data/ruby/trema/monkey-patch/integer.rb +35 -0
  151. data/ruby/trema/monkey-patch/integer/base-conversions.rb +36 -0
  152. data/ruby/trema/monkey-patch/integer/ranges.rb +51 -0
  153. data/ruby/trema/monkey-patch/module.rb +33 -0
  154. data/ruby/trema/monkey-patch/module/deprecation.rb +41 -0
  155. data/ruby/trema/monkey-patch/string.rb +33 -0
  156. data/ruby/trema/monkey-patch/string/inflectors.rb +54 -0
  157. data/ruby/trema/network-component.rb +153 -0
  158. data/ruby/trema/ofctl.rb +62 -0
  159. data/ruby/trema/open-vswitch.rb +154 -0
  160. data/ruby/trema/openflow-error.c +191 -0
  161. data/ruby/trema/openflow-error.h +53 -0
  162. data/ruby/trema/openflow-switch.rb +88 -0
  163. data/ruby/trema/ordered-hash.rb +74 -0
  164. data/ruby/trema/packet-queue.rb +178 -0
  165. data/ruby/trema/packet_in.c +736 -0
  166. data/ruby/trema/packet_in.h +46 -0
  167. data/ruby/trema/packetin-filter.rb +126 -0
  168. data/ruby/trema/path.rb +135 -0
  169. data/ruby/trema/phost.rb +69 -0
  170. data/ruby/trema/port-mod.c +226 -0
  171. data/ruby/trema/port-mod.h +36 -0
  172. data/ruby/trema/port-stats-reply.rb +111 -0
  173. data/ruby/trema/port-status.c +156 -0
  174. data/ruby/trema/port-status.h +45 -0
  175. data/ruby/trema/port.c +295 -0
  176. data/ruby/trema/port.h +47 -0
  177. data/ruby/trema/process.rb +76 -0
  178. data/ruby/trema/queue-get-config-reply.c +200 -0
  179. data/ruby/trema/queue-get-config-reply.h +47 -0
  180. data/ruby/trema/queue-get-config-request.c +141 -0
  181. data/ruby/trema/queue-get-config-request.h +44 -0
  182. data/ruby/trema/queue-stats-reply.rb +78 -0
  183. data/ruby/trema/set-config.c +171 -0
  184. data/ruby/trema/set-config.h +44 -0
  185. data/ruby/trema/shell.rb +39 -0
  186. data/ruby/trema/shell/down.rb +39 -0
  187. data/ruby/trema/shell/killall.rb +40 -0
  188. data/ruby/trema/shell/link.rb +61 -0
  189. data/ruby/trema/shell/reset_stats.rb +50 -0
  190. data/ruby/trema/shell/run.rb +67 -0
  191. data/ruby/trema/shell/send_packets.rb +42 -0
  192. data/ruby/trema/shell/show_stats.rb +49 -0
  193. data/ruby/trema/shell/up.rb +43 -0
  194. data/ruby/trema/shell/vhost.rb +44 -0
  195. data/ruby/trema/shell/vswitch.rb +49 -0
  196. data/ruby/trema/stats-helper.rb +65 -0
  197. data/ruby/trema/stats-reply.c +483 -0
  198. data/ruby/trema/stats-reply.h +53 -0
  199. data/ruby/trema/stats-request.c +634 -0
  200. data/ruby/trema/stats-request.h +42 -0
  201. data/ruby/trema/switch-daemon.rb +74 -0
  202. data/ruby/trema/switch-disconnected.c +40 -0
  203. data/ruby/trema/switch-disconnected.h +38 -0
  204. data/ruby/trema/switch-manager.rb +121 -0
  205. data/ruby/trema/switch.rb +37 -0
  206. data/ruby/trema/table-stats-reply.rb +87 -0
  207. data/ruby/trema/timers.rb +97 -0
  208. data/ruby/trema/trema.c +122 -0
  209. data/ruby/trema/tremashark.rb +39 -0
  210. data/ruby/trema/util.rb +84 -0
  211. data/ruby/trema/vendor-request.c +193 -0
  212. data/ruby/trema/vendor-request.h +44 -0
  213. data/ruby/trema/vendor-stats-reply.rb +62 -0
  214. data/ruby/trema/vendor.c +152 -0
  215. data/ruby/trema/vendor.h +52 -0
  216. data/ruby/trema/version.rb +30 -0
  217. data/spec/spec_helper.rb +153 -0
  218. data/spec/support/openflow-message.rb +94 -0
  219. data/spec/trema/action-enqueue_spec.rb +100 -0
  220. data/spec/trema/action-output_spec.rb +116 -0
  221. data/spec/trema/action-set-dl-dst_spec.rb +95 -0
  222. data/spec/trema/action-set-dl-src_spec.rb +92 -0
  223. data/spec/trema/action-set-nw-dst_spec.rb +96 -0
  224. data/spec/trema/action-set-nw-src_spec.rb +97 -0
  225. data/spec/trema/action-set-nw-tos_spec.rb +88 -0
  226. data/spec/trema/action-set-tp-dst_spec.rb +88 -0
  227. data/spec/trema/action-set-tp-src_spec.rb +88 -0
  228. data/spec/trema/action-set-vlan-pcp_spec.rb +91 -0
  229. data/spec/trema/action-set-vlan-vid_spec.rb +91 -0
  230. data/spec/trema/action-strip-vlan_spec.rb +57 -0
  231. data/spec/trema/action-vendor_spec.rb +90 -0
  232. data/spec/trema/app_spec.rb +90 -0
  233. data/spec/trema/barrier-reply_spec.rb +45 -0
  234. data/spec/trema/barrier-request_spec.rb +83 -0
  235. data/spec/trema/cli_spec.rb +160 -0
  236. data/spec/trema/controller_spec.rb +100 -0
  237. data/spec/trema/dsl/configuration_spec.rb +122 -0
  238. data/spec/trema/dsl/link_spec.rb +54 -0
  239. data/spec/trema/dsl/run_spec.rb +78 -0
  240. data/spec/trema/dsl/runner_spec.rb +239 -0
  241. data/spec/trema/dsl/switch_spec.rb +77 -0
  242. data/spec/trema/dsl/syntax_spec.rb +121 -0
  243. data/spec/trema/dsl/vhost_spec.rb +148 -0
  244. data/spec/trema/dsl/vswitch_spec.rb +90 -0
  245. data/spec/trema/echo-reply_spec.rb +49 -0
  246. data/spec/trema/echo-request_spec.rb +75 -0
  247. data/spec/trema/error_spec.rb +142 -0
  248. data/spec/trema/executables_spec.rb +75 -0
  249. data/spec/trema/features-reply_spec.rb +57 -0
  250. data/spec/trema/features-request_spec.rb +66 -0
  251. data/spec/trema/flow-removed_spec.rb +146 -0
  252. data/spec/trema/get-config-reply_spec.rb +43 -0
  253. data/spec/trema/get-config-request_spec.rb +82 -0
  254. data/spec/trema/hello_spec.rb +49 -0
  255. data/spec/trema/host_spec.rb +193 -0
  256. data/spec/trema/link_spec.rb +64 -0
  257. data/spec/trema/list-switches-reply_spec.rb +48 -0
  258. data/spec/trema/logger_spec.rb +48 -0
  259. data/spec/trema/mac_spec.rb +115 -0
  260. data/spec/trema/match_spec.rb +113 -0
  261. data/spec/trema/open-vswitch_spec.rb +123 -0
  262. data/spec/trema/openflow-error_spec.rb +141 -0
  263. data/spec/trema/openflow-switch_spec.rb +56 -0
  264. data/spec/trema/packet-in_spec.rb +168 -0
  265. data/spec/trema/packet-out_spec.rb +128 -0
  266. data/spec/trema/packetin-filter_spec.rb +41 -0
  267. data/spec/trema/port-mod_spec.rb +101 -0
  268. data/spec/trema/port-status_spec.rb +108 -0
  269. data/spec/trema/port_spec.rb +61 -0
  270. data/spec/trema/process_spec.rb +71 -0
  271. data/spec/trema/queue-get-config-reply_spec.rb +66 -0
  272. data/spec/trema/queue-get-config-request_spec.rb +69 -0
  273. data/spec/trema/set-config_spec.rb +80 -0
  274. data/spec/trema/shell/vhost_spec.rb +57 -0
  275. data/spec/trema/shell/vswitch_spec.rb +89 -0
  276. data/spec/trema/stats-reply_spec.rb +306 -0
  277. data/spec/trema/stats-request_spec.rb +151 -0
  278. data/spec/trema/switch-disconnected_spec.rb +58 -0
  279. data/spec/trema/switch-manager_spec.rb +43 -0
  280. data/spec/trema/tremashark_spec.rb +41 -0
  281. data/spec/trema/util_spec.rb +93 -0
  282. data/spec/trema/vendor-request_spec.rb +79 -0
  283. data/src/examples/cbench_switch/README +21 -0
  284. data/src/examples/cbench_switch/cbench-switch.rb +39 -0
  285. data/src/examples/cbench_switch/cbench_switch.c +68 -0
  286. data/src/examples/dumper/dumper.c +370 -0
  287. data/src/examples/dumper/dumper.conf +7 -0
  288. data/src/examples/dumper/dumper.rb +196 -0
  289. data/src/examples/hello_trema/README +13 -0
  290. data/src/examples/hello_trema/hello_trema.c +51 -0
  291. data/src/examples/hello_trema/hello_trema.conf +3 -0
  292. data/src/examples/hello_trema/hello_trema.rb +35 -0
  293. data/src/examples/learning_switch/README +15 -0
  294. data/src/examples/learning_switch/fdb.rb +112 -0
  295. data/src/examples/learning_switch/learning-switch.rb +88 -0
  296. data/src/examples/learning_switch/learning_switch.c +236 -0
  297. data/src/examples/learning_switch/learning_switch.conf +18 -0
  298. data/src/examples/list_switches/README +19 -0
  299. data/src/examples/list_switches/list-switches.rb +45 -0
  300. data/src/examples/list_switches/list_switches.c +81 -0
  301. data/src/examples/list_switches/list_switches.conf +15 -0
  302. data/src/examples/match_compare/match-compare.conf +30 -0
  303. data/src/examples/match_compare/match-compare.rb +99 -0
  304. data/src/examples/multi_learning_switch/README +14 -0
  305. data/src/examples/multi_learning_switch/multi-learning-switch.rb +96 -0
  306. data/src/examples/multi_learning_switch/multi_learning_switch.c +296 -0
  307. data/src/examples/multi_learning_switch/multi_learning_switch.conf +17 -0
  308. data/src/examples/openflow_message/README +11 -0
  309. data/src/examples/openflow_message/echo-reply.rb +59 -0
  310. data/src/examples/openflow_message/echo-request.rb +58 -0
  311. data/src/examples/openflow_message/echo_reply.c +70 -0
  312. data/src/examples/openflow_message/echo_request.c +70 -0
  313. data/src/examples/openflow_message/example.rb +63 -0
  314. data/src/examples/openflow_message/features-request.rb +97 -0
  315. data/src/examples/openflow_message/features_request.c +168 -0
  316. data/src/examples/openflow_message/hello.c +70 -0
  317. data/src/examples/openflow_message/hello.rb +58 -0
  318. data/src/examples/openflow_message/set-config.rb +59 -0
  319. data/src/examples/openflow_message/set_config.c +70 -0
  320. data/src/examples/packet_in/README +15 -0
  321. data/src/examples/packet_in/packet_in.c +55 -0
  322. data/src/examples/packet_in/packet_in.conf +15 -0
  323. data/src/examples/packet_in/packet_in.rb +34 -0
  324. data/src/examples/packetin_filter_config/README +12 -0
  325. data/src/examples/packetin_filter_config/add_filter.c +73 -0
  326. data/src/examples/packetin_filter_config/delete_filter.c +65 -0
  327. data/src/examples/packetin_filter_config/delete_filter_strict.c +75 -0
  328. data/src/examples/packetin_filter_config/dump_filter.c +65 -0
  329. data/src/examples/packetin_filter_config/dump_filter_strict.c +75 -0
  330. data/src/examples/packetin_filter_config/packetin_filter_config.c +134 -0
  331. data/src/examples/packetin_filter_config/packetin_filter_config.conf +7 -0
  332. data/src/examples/packetin_filter_config/utils.c +102 -0
  333. data/src/examples/packetin_filter_config/utils.h +42 -0
  334. data/src/examples/repeater_hub/README +8 -0
  335. data/src/examples/repeater_hub/repeater-hub.rb +43 -0
  336. data/src/examples/repeater_hub/repeater-hub_spec.rb +156 -0
  337. data/src/examples/repeater_hub/repeater_hub.c +83 -0
  338. data/src/examples/repeater_hub/repeater_hub.conf +28 -0
  339. data/src/examples/switch_info/README +13 -0
  340. data/src/examples/switch_info/switch_info.c +80 -0
  341. data/src/examples/switch_info/switch_info.conf +3 -0
  342. data/src/examples/switch_info/switch_info.rb +46 -0
  343. data/src/examples/switch_monitor/switch-monitor.conf +3 -0
  344. data/src/examples/switch_monitor/switch-monitor.rb +58 -0
  345. data/src/examples/switch_monitor/switch_monitor.c +154 -0
  346. data/src/examples/traffic_monitor/counter.c +74 -0
  347. data/src/examples/traffic_monitor/counter.h +48 -0
  348. data/src/examples/traffic_monitor/counter.rb +46 -0
  349. data/src/examples/traffic_monitor/fdb.c +76 -0
  350. data/src/examples/traffic_monitor/fdb.h +50 -0
  351. data/src/examples/traffic_monitor/fdb.rb +44 -0
  352. data/src/examples/traffic_monitor/traffic-monitor.rb +100 -0
  353. data/src/examples/traffic_monitor/traffic_monitor.c +163 -0
  354. data/src/examples/traffic_monitor/traffic_monitor.conf +16 -0
  355. data/src/lib/arp.h +61 -0
  356. data/src/lib/bool.h +49 -0
  357. data/src/lib/buffer.c +305 -0
  358. data/src/lib/buffer.h +56 -0
  359. data/src/lib/byteorder.c +547 -0
  360. data/src/lib/byteorder.h +110 -0
  361. data/src/lib/checks.h +42 -0
  362. data/src/lib/daemon.c +302 -0
  363. data/src/lib/daemon.h +42 -0
  364. data/src/lib/doubly_linked_list.c +281 -0
  365. data/src/lib/doubly_linked_list.h +88 -0
  366. data/src/lib/ether.c +48 -0
  367. data/src/lib/ether.h +94 -0
  368. data/src/lib/etherip.h +46 -0
  369. data/src/lib/event_handler.c +389 -0
  370. data/src/lib/event_handler.h +64 -0
  371. data/src/lib/hash_table.c +417 -0
  372. data/src/lib/hash_table.h +138 -0
  373. data/src/lib/icmp.h +74 -0
  374. data/src/lib/igmp.h +50 -0
  375. data/src/lib/ipv4.h +50 -0
  376. data/src/lib/linked_list.c +199 -0
  377. data/src/lib/linked_list.h +84 -0
  378. data/src/lib/log.c +402 -0
  379. data/src/lib/log.h +78 -0
  380. data/src/lib/match.h +84 -0
  381. data/src/lib/match_table.c +608 -0
  382. data/src/lib/match_table.h +51 -0
  383. data/src/lib/message_queue.c +143 -0
  384. data/src/lib/message_queue.h +61 -0
  385. data/src/lib/messenger.c +1714 -0
  386. data/src/lib/messenger.h +145 -0
  387. data/src/lib/openflow_application_interface.c +1673 -0
  388. data/src/lib/openflow_application_interface.h +329 -0
  389. data/src/lib/openflow_message.c +4051 -0
  390. data/src/lib/openflow_message.h +288 -0
  391. data/src/lib/openflow_service_interface.h +59 -0
  392. data/src/lib/packet_info.c +230 -0
  393. data/src/lib/packet_info.h +209 -0
  394. data/src/lib/packet_parser.c +502 -0
  395. data/src/lib/packetin_filter_interface.c +294 -0
  396. data/src/lib/packetin_filter_interface.h +127 -0
  397. data/src/lib/persistent_storage.c +480 -0
  398. data/src/lib/persistent_storage.h +46 -0
  399. data/src/lib/stat.c +213 -0
  400. data/src/lib/stat.h +44 -0
  401. data/src/lib/tcp.h +67 -0
  402. data/src/lib/timer.c +350 -0
  403. data/src/lib/timer.h +53 -0
  404. data/src/lib/trema.c +710 -0
  405. data/src/lib/trema.h +79 -0
  406. data/src/lib/trema_private.c +177 -0
  407. data/src/lib/trema_private.h +60 -0
  408. data/src/lib/trema_wrapper.c +56 -0
  409. data/src/lib/trema_wrapper.h +64 -0
  410. data/src/lib/udp.h +43 -0
  411. data/src/lib/utility.c +515 -0
  412. data/src/lib/utility.h +67 -0
  413. data/src/lib/wrapper.c +100 -0
  414. data/src/lib/wrapper.h +76 -0
  415. data/src/packetin_filter/README +17 -0
  416. data/src/packetin_filter/packetin_filter.c +575 -0
  417. data/src/switch_manager/README +20 -0
  418. data/src/switch_manager/cookie_table.c +292 -0
  419. data/src/switch_manager/cookie_table.h +72 -0
  420. data/src/switch_manager/dpid_table.c +110 -0
  421. data/src/switch_manager/dpid_table.h +46 -0
  422. data/src/switch_manager/management_interface.h +44 -0
  423. data/src/switch_manager/ofpmsg_recv.c +482 -0
  424. data/src/switch_manager/ofpmsg_recv.h +42 -0
  425. data/src/switch_manager/ofpmsg_send.c +235 -0
  426. data/src/switch_manager/ofpmsg_send.h +50 -0
  427. data/src/switch_manager/secure_channel_listener.c +281 -0
  428. data/src/switch_manager/secure_channel_listener.h +42 -0
  429. data/src/switch_manager/secure_channel_receiver.c +126 -0
  430. data/src/switch_manager/secure_channel_receiver.h +43 -0
  431. data/src/switch_manager/secure_channel_sender.c +126 -0
  432. data/src/switch_manager/secure_channel_sender.h +43 -0
  433. data/src/switch_manager/service_interface.c +181 -0
  434. data/src/switch_manager/service_interface.h +46 -0
  435. data/src/switch_manager/switch.c +538 -0
  436. data/src/switch_manager/switch.h +51 -0
  437. data/src/switch_manager/switch_manager.c +448 -0
  438. data/src/switch_manager/switch_manager.h +63 -0
  439. data/src/switch_manager/switchinfo.h +72 -0
  440. data/src/switch_manager/xid_table.c +184 -0
  441. data/src/switch_manager/xid_table.h +56 -0
  442. data/src/tremashark/README +78 -0
  443. data/src/tremashark/packet_capture.c +357 -0
  444. data/src/tremashark/pcap_private.h +47 -0
  445. data/src/tremashark/pcap_queue.c +197 -0
  446. data/src/tremashark/pcap_queue.h +58 -0
  447. data/src/tremashark/plugin/.gitignore +6 -0
  448. data/src/tremashark/plugin/packet-trema/.gitignore +5 -0
  449. data/src/tremashark/plugin/packet-trema/Makefile +77 -0
  450. data/src/tremashark/plugin/packet-trema/Makefile.am +110 -0
  451. data/src/tremashark/plugin/packet-trema/Makefile.common +31 -0
  452. data/src/tremashark/plugin/packet-trema/moduleinfo.h +41 -0
  453. data/src/tremashark/plugin/packet-trema/packet-trema.c +1659 -0
  454. data/src/tremashark/plugin/packet-trema/plugin.c +31 -0
  455. data/src/tremashark/plugin/user_dlts +2 -0
  456. data/src/tremashark/queue.c +168 -0
  457. data/src/tremashark/queue.h +60 -0
  458. data/src/tremashark/stdin_relay.c +257 -0
  459. data/src/tremashark/syslog_relay.c +247 -0
  460. data/src/tremashark/tremashark.c +556 -0
  461. data/trema +93 -0
  462. data/trema-config +61 -0
  463. data/unittests/buffer_stubs.c +74 -0
  464. data/unittests/cmockery_trema.c +123 -0
  465. data/unittests/cmockery_trema.h +96 -0
  466. data/unittests/lib/buffer_test.c +370 -0
  467. data/unittests/lib/byteorder_test.c +1717 -0
  468. data/unittests/lib/daemon_test.c +664 -0
  469. data/unittests/lib/doubly_linked_list_test.c +346 -0
  470. data/unittests/lib/ether_test.c +127 -0
  471. data/unittests/lib/hash_table_test.c +278 -0
  472. data/unittests/lib/linked_list_test.c +343 -0
  473. data/unittests/lib/log_test.c +459 -0
  474. data/unittests/lib/match_table_test.c +1509 -0
  475. data/unittests/lib/message_queue_test.c +379 -0
  476. data/unittests/lib/messenger_test.c +438 -0
  477. data/unittests/lib/openflow_application_interface_test.c +3488 -0
  478. data/unittests/lib/openflow_message_test.c +7337 -0
  479. data/unittests/lib/packet_info_test.c +544 -0
  480. data/unittests/lib/packet_parser_test.c +703 -0
  481. data/unittests/lib/packetin_filter_interface_test.c +723 -0
  482. data/unittests/lib/persistent_storage_test.c +802 -0
  483. data/unittests/lib/stat_test.c +291 -0
  484. data/unittests/lib/test_packets/arp_rep.cap +0 -0
  485. data/unittests/lib/test_packets/arp_req.cap +0 -0
  486. data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
  487. data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
  488. data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
  489. data/unittests/lib/test_packets/ipx.cap +0 -0
  490. data/unittests/lib/test_packets/lldp.cap +0 -0
  491. data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
  492. data/unittests/lib/test_packets/tcp.cap +0 -0
  493. data/unittests/lib/test_packets/tcp_syn.cap +0 -0
  494. data/unittests/lib/test_packets/udp.cap +0 -0
  495. data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
  496. data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
  497. data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
  498. data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
  499. data/unittests/lib/timer_test.c +248 -0
  500. data/unittests/lib/trema_private_test.c +323 -0
  501. data/unittests/lib/trema_test.c +985 -0
  502. data/unittests/lib/utility_test.c +628 -0
  503. data/unittests/lib/wrapper_test.c +201 -0
  504. data/unittests/packetin_filter/packetin_filter_test.c +477 -0
  505. data/unittests/switch_manager/switch_manager_test.c +1178 -0
  506. data/unittests/wrapper_stubs.c +39 -0
  507. data/vendor/.gitignore +6 -0
  508. data/vendor/README +30 -0
  509. data/vendor/cmockery-20110428.tar.gz +0 -0
  510. data/vendor/oflops-0.03.tar.gz +0 -0
  511. data/vendor/oflops_no_snmp+1.0.0.patch +340 -0
  512. data/vendor/openflow-1.0.0.tar.gz +0 -0
  513. data/vendor/openflow.git.tar.gz +0 -0
  514. data/vendor/openvswitch-1.2.2.tar.gz +0 -0
  515. data/vendor/ruby-ifconfig-1.2/COPYING +340 -0
  516. data/vendor/ruby-ifconfig-1.2/Changelog +16 -0
  517. data/vendor/ruby-ifconfig-1.2/INSTALL +239 -0
  518. data/vendor/ruby-ifconfig-1.2/README +38 -0
  519. data/vendor/ruby-ifconfig-1.2/Rakefile +14 -0
  520. data/vendor/ruby-ifconfig-1.2/TODO +8 -0
  521. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +17 -0
  522. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +10 -0
  523. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +14 -0
  524. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +17 -0
  525. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +24 -0
  526. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +60 -0
  527. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +20 -0
  528. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +10 -0
  529. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +36 -0
  530. data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +10 -0
  531. data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +71 -0
  532. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +72 -0
  533. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +69 -0
  534. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +3 -0
  535. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +84 -0
  536. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +130 -0
  537. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +49 -0
  538. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +43 -0
  539. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +112 -0
  540. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +55 -0
  541. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +38 -0
  542. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +77 -0
  543. data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +4 -0
  544. data/vendor/ruby-ifconfig-1.2/setup.rb +1306 -0
  545. data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +35 -0
  546. data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +33 -0
  547. data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +35 -0
  548. data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +4 -0
  549. data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +31 -0
  550. data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +33 -0
  551. data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +33 -0
  552. data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +35 -0
  553. data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +40 -0
  554. data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +39 -0
  555. data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +40 -0
  556. data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +49 -0
  557. data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +39 -0
  558. data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +39 -0
  559. data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +44 -0
  560. metadata +856 -0
@@ -0,0 +1,20 @@
1
+ eth0 Link encap:Ethernet HWaddr 00:50:DA:C1:C3:45
2
+ inet addr:216.87.223.240 Bcast:216.87.223.255 Mask:255.255.255.0
3
+ inet6 addr: fe80::250:daff:fec1:c345/10 Scope:Link
4
+ inet6 addr: 3ffe:b00:c18:1fff::2bd/0 Scope:Global
5
+ IPX/Ethernet II addr:CA008137:00204808C79B
6
+ IPX/Ethernet SNAP addr:00204808C79B
7
+ IPX/Ethernet 802.2 addr:00204808C79B
8
+ IPX/Ethernet 802.3 addr:00204808C79B
9
+ EtherTalk Phase 2 addr:7349/195
10
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
11
+ RX packets:90170 errors:0 dropped:0 overruns:0 frame:0
12
+ TX packets:2854 errors:0 dropped:0 overruns:0 carrier:0
13
+ collisions:0 txqueuelen:100
14
+ RX bytes:1037052545 (989.0 MiB) TX bytes:32859376 (31.3 MiB)
15
+ Interrupt:10 Base address:0xe400
16
+
17
+ eth0:0 Link encap:Ethernet HWaddr 00:50:DA:C1:C3:45
18
+ inet addr:172.16.0.93 Bcast:172.16.0.255 Mask:255.255.255.0
19
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
20
+ Interrupt:10 Base address:0xe400
@@ -0,0 +1,10 @@
1
+ cs0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
2
+ address: 08:00:2b:81:62:ca
3
+ media: Ethernet 10baseT
4
+ status: active
5
+ inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255
6
+ inet6 fe80::a00:2bff:fe81:62ca%cs0 prefixlen 64 scopeid 0x1
7
+ lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 33220
8
+ inet 127.0.0.1 netmask 0xff000000
9
+ inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
10
+ inet6 ::1 prefixlen 128
@@ -0,0 +1,36 @@
1
+ lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33224
2
+ inet 127.0.0.1 netmask 0xff000000
3
+ inet6 ::1 prefixlen 128
4
+ inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
5
+ lo1: flags=8008<LOOPBACK,MULTICAST> mtu 33224
6
+ xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
7
+ address: 00:01:02:c6:4b:3d
8
+ media: Ethernet autoselect (100baseTX full-duplex)
9
+ status: active
10
+ inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
11
+ inet6 fe80::201:2ff:fec6:4b3d%xl0 prefixlen 64 scopeid 0x1
12
+ ep0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
13
+ address: 00:20:af:31:99:43
14
+ media: Ethernet 10baseT
15
+ inet6 fe80::220:afff:fe31:9943%ep0 prefixlen 64 scopeid 0x2
16
+ inet 24.6.50.88 netmask 0xfffff800 broadcast 255.255.255.255
17
+ pflog0: flags=41<UP,RUNNING> mtu 33224
18
+ pfsync0: flags=0<> mtu 1896
19
+ sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
20
+ sl1: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
21
+ ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
22
+ ppp1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
23
+ tun0: flags=10<POINTOPOINT> mtu 3000
24
+ tun1: flags=10<POINTOPOINT> mtu 3000
25
+ enc0: flags=0<> mtu 1536
26
+ bridge0: flags=0<> mtu 1500
27
+ bridge1: flags=0<> mtu 1500
28
+ vlan0: flags=0<> mtu 1500
29
+ address: 00:00:00:00:00:00
30
+ vlan1: flags=0<> mtu 1500
31
+ address: 00:00:00:00:00:00
32
+ gre0: flags=9010<POINTOPOINT,LINK0,MULTICAST> mtu 1450
33
+ gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
34
+ gif1: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
35
+ gif2: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
36
+ gif3: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
@@ -0,0 +1,10 @@
1
+ lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
2
+ inet 127.0.0.1 netmask ff000000
3
+ inet6 ::1/128
4
+ bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
5
+ inet 10.32.4.138 netmask ffffff00 broadcast 10.32.4.255
6
+ ether 0:3:ba:42:9d:ef
7
+ inet6 fe80::a00:20ff:fe72:9724/10
8
+ le1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
9
+ inet 172.16.254.99 netmask ffff0000 broadcast 172.16.255.255
10
+ ether 8:0:20:1d:71:eb
@@ -0,0 +1,71 @@
1
+ # $Revision: 1.1.1.1 $
2
+ # $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:57 hobe Exp $
3
+
4
+ # = Ruby/Ifconfig - ruby interface to the information presented by ifconfig
5
+ #
6
+ # == Prerequisites
7
+ #
8
+ # You must have a working ifconfig binary in your path.
9
+ # The output format of you particular version of ifconfig must be supported.
10
+ # Currently this has only been tested with net-tool 1.6 on Linux
11
+ #
12
+ # == Example
13
+ # require 'ifconfig'
14
+ #
15
+ # cfg = IfconfigWrapper.new.parse # parses the output of ifconfig
16
+ #
17
+ # cfg.interfaces() # returns list of interfaces
18
+ #
19
+ # cfg[eth0].addresses('inet') # returns ipv4 address of eth0
20
+ #
21
+ # cfg.addrresses('inet') # returns list of all ipv4 addresses
22
+ #
23
+ # cfg[eth0].status # returns true if interface is up
24
+ #
25
+ # cfg.each { block } # run a block on each interface object
26
+
27
+
28
+ #
29
+ # inspired by Net::Ifconfig::Wrapper perl module
30
+ # by Daniel Podolsky, <tpaba@cpan.org>
31
+ #
32
+ # Ruby version by Daniel Hobe <daniel@packetspike.net>
33
+ # Licence:: GPL[http://www.gnu.org/copyleft/gpl.html]
34
+ #
35
+
36
+ require 'ipaddr'
37
+
38
+ class IfconfigWrapper
39
+ NAME = 'Ruby/Ifconfig'
40
+ include Enumerable
41
+
42
+ #
43
+ # Can manually specify the platform (should be output of the 'uname' command)
44
+ # and the ifconfig input
45
+ #
46
+ def initialize(platform=nil,input=nil,netstat=nil)
47
+ platform = self.get_os unless !platform.nil?
48
+ require "ifconfig/"+platform.downcase+"/ifconfig"
49
+ @cfg = Ifconfig.new(input,netstat)
50
+ end
51
+ def parse
52
+ return @cfg
53
+ end
54
+ # Find out what os we are on
55
+ #
56
+ def get_os
57
+ plat = IO.popen('uname'){ |f| f.gets.strip }
58
+ case plat
59
+ when 'Windows'
60
+ return plat
61
+ when 'Linux'
62
+ return plat
63
+ when 'SunOS'
64
+ return plat
65
+ when 'FreeBSD','OpenBSD','NetBSD','DragonFly','Darwin'
66
+ return 'BSD'
67
+ else
68
+ return 'Linux'
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,72 @@
1
+ # $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
2
+ #
3
+ require 'ifconfig/common/ifconfig'
4
+ require 'ifconfig/bsd/network_types'
5
+ require 'ifconfig/bsd/interface_types'
6
+
7
+ class Ifconfig
8
+ #
9
+ # ifconfig = user provided ifconifg output
10
+ # netstat = same, but for netstat -in
11
+ #
12
+ @@ifcfg_cmd = "/usr/bin/env ifconfig -a"
13
+ @@netstat_cmd = "/usr/bin/env netstat -in"
14
+ def initialize(ifconfig=nil,netstat=nil,verbose=nil)
15
+ @ifconfig = ifconfig
16
+ @ifconfig ||= IO.popen(@@ifcfg_cmd){ |f| f.readlines.join }
17
+
18
+ @netstat = netstat
19
+ @netstat ||= IO.popen(@@netstat_cmd){ |f| f.readlines.join }
20
+
21
+ @verbose = verbose
22
+
23
+ @ifaces = {}
24
+ split_interfaces(@ifconfig).each do |iface|
25
+ iface_name = get_iface_name(iface)
26
+ case iface
27
+ when /^lo\d\:/im
28
+ @ifaces[iface_name] = LoopbackInterface.new(iface_name,iface)
29
+ parse_activity(iface_name)
30
+ when /\s+media\:\s+Ethernet\s+/im
31
+ @ifaces[iface_name] = EthernetAdapter.new(iface_name,iface)
32
+ parse_activity(iface_name)
33
+ when /\s+supported\smedia\:\s+none\s+autoselect\s+/im
34
+ # This clause is only matched on Darwin. This pattern will only be
35
+ # matched on ethernet devices (won't match on fw0 or any other
36
+ # interface I can see).
37
+ @ifaces[iface_name] = EthernetAdapter.new(iface_name,iface)
38
+ parse_activity(iface_name)
39
+ else
40
+ puts "Unknown Adapter Type: #{iface}" if @verbose
41
+ end
42
+ end
43
+ end
44
+
45
+ # Parse activity on interface
46
+ #
47
+ # Not doing it in each interface class so we can pass in
48
+ # fake input
49
+ #
50
+ def parse_activity(iface)
51
+ mtu = rxpackets = rxerrors = txpackets = txerrors = 0
52
+ @netstat.split("\n").each { |line|
53
+ line.strip!
54
+ if line =~ /^#{iface}/
55
+ next if line.split[2] =~ /\<Link\#\d\>/
56
+ puts "matched line for "+iface
57
+ toks = line.split
58
+ mtu = toks[1]
59
+ rxpackets += toks[4].to_i
60
+ rxerrors += toks[5].to_i
61
+ txpackets += toks[6].to_i
62
+ txerrors += toks[7].to_i
63
+ @ifaces[iface].mtu = mtu.to_i
64
+ @ifaces[iface].rx = { 'packets' => rxpackets,
65
+ 'errors' => rxerrors }
66
+ @ifaces[iface].tx = { 'packets' => txpackets,
67
+ 'errors' => txerrors }
68
+ end
69
+ }
70
+ end
71
+
72
+ end
@@ -0,0 +1,69 @@
1
+ # $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
2
+ #
3
+ require 'ifconfig/common/interface_types'
4
+
5
+ class NetworkAdapter
6
+ # becuase on *BSD we get activity from netstat
7
+ # we need to have a way to set this:
8
+ attr_writer :mtu
9
+
10
+ # iterate line by line and dispatch to helper functions
11
+ # for lines that match a pattern
12
+ #
13
+ def parse_ifconfig
14
+ @ifconfig.split("\n").each { |line|
15
+ case line
16
+ when /^\s+#{@protos}/
17
+ add_network(line)
18
+ when /flags\=/i
19
+ parse_flags(line)
20
+ end
21
+ }
22
+ end
23
+
24
+ # parses the "UP LOOPBACK RUNNING MTU:3924 Metric:1" line
25
+ #
26
+ def parse_flags(line)
27
+ flags = line.match(/\<(\S+)\>/i)[1]
28
+ @flags = flags.strip.split(',')
29
+ @status = true if @flags.include?('UP')
30
+ end
31
+
32
+ # Parses networks on an interface based on the first token in the line.
33
+ # eg: inet or inet6
34
+ #
35
+ def add_network(line)
36
+ case line
37
+ when /^\s+inet\s/
38
+ addr,mask = line.match(/\s+([\d\d?\d?\.]{4,})\s+netmask\s+(\S+)/i)[1..2]
39
+ bcast = line.match(/\s+broadcast\s([\d\d?\d?\.]{4,})/i)
40
+ bcast = bcast[1] unless bcast.nil?
41
+ @networks['inet'] = Ipv4Network.new(addr, mask, bcast)
42
+ when /^\s+inet6\s/
43
+ # there can be multiple inet6 entries
44
+ begin
45
+ addr,scope = line.match(/inet6\s+(\S+)%/i)[1]
46
+ rescue NoMethodError
47
+ addr,scope = line.match(/inet6\s+(\S+)/i)[1]
48
+ end
49
+ @networks["inet6:#{addr}"] = Ipv6Network.new(addr)
50
+ else
51
+ puts "unknown network type: #{line}"
52
+ end
53
+ end
54
+ end
55
+
56
+
57
+ class EthernetAdapter
58
+ def set_mac
59
+ begin
60
+ match=@ifconfig.match(/\s+ether\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)
61
+ return match[1] unless match.nil?
62
+ # Openbsd
63
+ match = @ifconfig.match(/\s+address\:\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)
64
+ return match[1] unless match.nil?
65
+ rescue NoMethodError
66
+ puts "Couldn't Parse MAC Address for: "+@name
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ # $Id: network_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
2
+ #
3
+ require 'ifconfig/common/network_types'
@@ -0,0 +1,84 @@
1
+ # $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
2
+ #
3
+ class Ifconfig
4
+ include Enumerable
5
+
6
+ #
7
+ # Give hash like access to the interfaces
8
+ #
9
+ def [](iface)
10
+ return @ifaces[iface]
11
+ end
12
+
13
+ def each( &block )
14
+ return @ifaces.each_value( &block )
15
+ end
16
+
17
+ # return list of interface names
18
+ #
19
+ def interfaces
20
+ return @ifaces.keys
21
+ end
22
+
23
+ # returns array of interface text blocks
24
+ #
25
+ def split_interfaces(text)
26
+ ifaces = []
27
+ text.split("\n").each { |line|
28
+ ifaces[ifaces.length] = "" if line =~ /^\S/
29
+ ifaces[ifaces.length-1] += line.rstrip+"\n"
30
+ }
31
+ return ifaces
32
+ end
33
+
34
+ # Given an interface block
35
+ # returns the name of an interface (eth0, eth0:1 ppp0, etc.)
36
+ #
37
+ def get_iface_name(text)
38
+ name = Regexp.compile(/^(\S+)/).match(text)[1]
39
+ # strip trailing :, for bsd, sun
40
+ name.sub!(/:$/,'')
41
+ return name
42
+ end
43
+
44
+ def to_s
45
+ s=""
46
+ self.interfaces.sort.each { |k|
47
+ s += @ifaces[k].to_s
48
+ s += "\n-------------------------\n"
49
+ }
50
+ return s
51
+ end
52
+
53
+ # return list of all addresses on all interfaces reported by ifconfig
54
+ #
55
+ def addresses(type=nil)
56
+ addr = []
57
+ @ifaces.each_value { |iface|
58
+ addr += iface.addresses
59
+ }
60
+ return addr
61
+ end
62
+
63
+ # returns array of arrays
64
+ # [ [address , type ] ]
65
+ #
66
+ def addrs_with_type
67
+ addr = []
68
+ @ifaces.each_value { |iface|
69
+ addr += iface.addrs_with_type
70
+ }
71
+ return addr
72
+ end
73
+
74
+ def valid_addr?(addr,type='inet')
75
+ case type
76
+ when /(inet|v4)/
77
+ return addr.ipv4?
78
+ when /(inet6|v6)/
79
+ return addr.ipv6?
80
+ else
81
+ raise "Unknown address type `#{type}' for address `#{addr}'"
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,130 @@
1
+ # $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
2
+ #
3
+ class NetworkAdapter
4
+ def initialize(name, ifacetxt)
5
+ @name = name
6
+ @ifconfig = ifacetxt
7
+ @status = false
8
+ @protos = ['inet','inet6','IPX/Ethernet II',
9
+ 'IPX/Ethernet SNAP',
10
+ 'IPX/Ethernet 802.2',
11
+ 'IPX/Ethernet 802.3',
12
+ 'EtherTalk Phase 2'].join("|")
13
+ @networks = {}
14
+ @flags = []
15
+ @mtu = nil
16
+ @metric = nil
17
+ @rx = @tx = {}
18
+ parse_ifconfig
19
+ end
20
+ attr_reader :status, :name, :flags, :mtu, :networks
21
+ attr_accessor :tx, :rx
22
+
23
+ # take array and turn each two entries into
24
+ # hash key and value, also converts each value to an integer
25
+ #
26
+ # [1,2,3,4] => { 1 => 2, 3 => 4}
27
+ #
28
+ # Internal utility function used to populate rx and tx hashes
29
+ def array_to_hash_elem(array)
30
+ h = {}
31
+ if array.length.modulo(2) != 0
32
+ puts "Array mus have even number of elements to turn into a hash"
33
+ return nil
34
+ end
35
+ while array.length > 0
36
+ h[array.shift] = array.shift.to_i
37
+ end
38
+ return h
39
+ end
40
+
41
+ # Return all addresses bound to this interface or
42
+ # optionally only the specified type of network address
43
+ #
44
+ def addresses(type=nil)
45
+ a = []
46
+ @networks.each_value { |network|
47
+ a << (network.addr) if network.nettype == type or type.nil?
48
+ }
49
+ return a
50
+ end
51
+
52
+ def ifacetype
53
+ return self.class
54
+ end
55
+
56
+ def up?
57
+ return status
58
+ end
59
+
60
+ # returns array of arrays
61
+ # [ [address , type ] ]
62
+ #
63
+ def addrs_with_type
64
+ addrs = []
65
+ @networks.each_value { |network|
66
+ addrs.push([network.addr,network.nettype])
67
+ }
68
+ return addrs
69
+ end
70
+
71
+ def addr_types
72
+ types = []
73
+ @networks.each_value { |network|
74
+ types.push(network.nettype) unless types.include?(network.nettype)
75
+ }
76
+ return types
77
+ end
78
+
79
+ def has_addr?(addr)
80
+ return self.addresses.include?(addr)
81
+ end
82
+
83
+ def to_s
84
+ s = @name+":"+self.ifacetype.to_s+"\n"
85
+ @networks.keys.sort.each { |network|
86
+ s += @networks[network].to_s+"\n"
87
+ }
88
+ if self.rx['bytes'] && self.tx['bytes']
89
+ s += " RX bytes: #{self.rx['bytes']}, TX bytes: #{self.tx['bytes']}\n"
90
+ elsif self.rx['packets'] && self.tx['packets']
91
+ s += " RX packets: #{self.rx['packets']}, TX packets: #{self.tx['packets']}\n"
92
+ end
93
+
94
+ s += " MTU: #{@mtu}\n"
95
+ s += " Metric: #{@metric}\n"
96
+ s += " Flags: #{@flags.join(',')}\n"
97
+ s += " Status: UP" if self.status
98
+ return s
99
+ end
100
+ end
101
+
102
+ # each platform defines it's own set_mac
103
+ # function to get the mac address
104
+ #
105
+ class EthernetAdapter < NetworkAdapter
106
+ def initialize(name,ifconfigtxt)
107
+ super(name,ifconfigtxt)
108
+ @mac = set_mac
109
+ end
110
+
111
+ attr_reader :mac, :interrupt, :rxbytes, :txbytes, :rxpackets,
112
+ :txpackets
113
+
114
+ def to_s
115
+ super + "\n MAC: #{@mac}"
116
+ end
117
+
118
+ end
119
+
120
+ class PPP < NetworkAdapter
121
+ end
122
+
123
+ class LoopbackInterface < NetworkAdapter
124
+ end
125
+
126
+ class IPv6_in_IPv4 < NetworkAdapter
127
+ end
128
+
129
+ class SerialLineIP < NetworkAdapter
130
+ end