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,39 @@
1
+ Feature: control one openflow switch using learning-switch controller
2
+
3
+ As a Trema user
4
+ I want to control one openflow switch using learning-switch controller
5
+ So that I can send and receive packets
6
+
7
+
8
+ Scenario: Send and receive packets
9
+ Given I try trema run "learning_switch" example with following configuration (backgrounded):
10
+ """
11
+ vswitch("learning") { datapath_id "0xabc" }
12
+
13
+ vhost("host1")
14
+ vhost("host2")
15
+
16
+ link "learning", "host1"
17
+ link "learning", "host2"
18
+ """
19
+ When I send 1 packet from host1 to host2
20
+ And I try to run "./trema show_stats host1 --tx" (log = "host1.learning_switch.log")
21
+ And I try to run "./trema show_stats host2 --rx" (log = "host2.learning_switch.log")
22
+ Then the content of "host1.learning_switch.log" and "host2.learning_switch.log" should be identical
23
+
24
+
25
+ Scenario: Send and receive packets (in Ruby)
26
+ Given I try trema run "learning-switch.rb" example with following configuration (backgrounded):
27
+ """
28
+ vswitch("learning") { datapath_id "0xabc" }
29
+
30
+ vhost("host1")
31
+ vhost("host2")
32
+
33
+ link "learning", "host1"
34
+ link "learning", "host2"
35
+ """
36
+ When I send 1 packet from host1 to host2
37
+ And I try to run "./trema show_stats host1 --tx" (log = "host1.LearningSwitch.log")
38
+ And I try to run "./trema show_stats host2 --rx" (log = "host2.LearningSwitch.log")
39
+ Then the content of "host1.LearningSwitch.log" and "host2.LearningSwitch.log" should be identical
@@ -0,0 +1,38 @@
1
+ Feature: Get the list of openflow switches with list_switches
2
+
3
+ As a Trema user
4
+ I want to get the list of openflow switches
5
+ So that I can check how many switches are connected to my controller
6
+
7
+
8
+ Scenario: Get the list of openflow switches
9
+ Given I try trema run "./objects/examples/list_switches/list_switches" with following configuration (backgrounded):
10
+ """
11
+ vswitch { datapath_id "0x1" }
12
+ vswitch { datapath_id "0x2" }
13
+ vswitch { datapath_id "0x3" }
14
+ vswitch { datapath_id "0x4" }
15
+ """
16
+ And wait until "list_switches" is up
17
+ And *** sleep 2 ***
18
+ And I terminated all trema services
19
+ Then the output should include:
20
+ """
21
+ switches = 0x1, 0x2, 0x3, 0x4
22
+ """
23
+
24
+ Scenario: Get the list of openflow switches (in Ruby)
25
+ Given I try trema run "./src/examples/list_switches/list-switches.rb" with following configuration (backgrounded):
26
+ """
27
+ vswitch { datapath_id "0x1" }
28
+ vswitch { datapath_id "0x2" }
29
+ vswitch { datapath_id "0x3" }
30
+ vswitch { datapath_id "0x4" }
31
+ """
32
+ And wait until "ListSwitches" is up
33
+ And *** sleep 2 ***
34
+ And I terminated all trema services
35
+ Then the output should include:
36
+ """
37
+ switches = 0x1, 0x2, 0x3, 0x4
38
+ """
@@ -0,0 +1,26 @@
1
+ Feature: Send echo reply messages
2
+
3
+ As a Trema user
4
+ I want to send echo reply messages to openflow switches
5
+ Because I want to reply to echo requests from openflow switches
6
+
7
+
8
+ Scenario: Send echo reply x 10
9
+ When I try trema run "./objects/examples/openflow_message/echo_reply 10" with following configuration (backgrounded):
10
+ """
11
+ vswitch("echo_reply") { datapath_id "0xabc" }
12
+ """
13
+ And wait until "echo_reply" is up
14
+ And *** sleep 2 ***
15
+ Then the log file "openflowd.echo_reply.log" should include "received: OFPT_ECHO_REPLY" x 10
16
+
17
+
18
+ Scenario: Send echo reply x 10 in Ruby
19
+ When I try trema run "./src/examples/openflow_message/echo-reply.rb 0xabc, 10" with following configuration (backgrounded):
20
+ """
21
+ vswitch("echo-reply") { datapath_id "0xabc" }
22
+ """
23
+ And wait until "EchoReplyController" is up
24
+ And *** sleep 2 ***
25
+ Then the log file "openflowd.echo-reply.log" should include "received: OFPT_ECHO_REPLY" x 10
26
+
@@ -0,0 +1,25 @@
1
+ Feature: Send echo request messages
2
+
3
+ As a Trema user
4
+ I want to send echo request messages to openflow switches
5
+ So that I can receive echo reply messages from openflow switches
6
+
7
+
8
+ Scenario: Send echo request x 10
9
+ When I try trema run "./objects/examples/openflow_message/echo_request 10" with following configuration (backgrounded):
10
+ """
11
+ vswitch("echo_request") { datapath_id "0xabc" }
12
+ """
13
+ And wait until "echo_request" is up
14
+ And *** sleep 2 ***
15
+ Then the log file "openflowd.echo_request.log" should include "received: OFPT_ECHO_REQUEST" x 10
16
+
17
+
18
+ Scenario: Send echo request x 10 in Ruby
19
+ When I try trema run "./src/examples/openflow_message/echo-request.rb 0xabc, 10" with following configuration (backgrounded):
20
+ """
21
+ vswitch("echo-request") { datapath_id "0xabc" }
22
+ """
23
+ And wait until "EchoRequestController" is up
24
+ And *** sleep 2 ***
25
+ Then the log file "openflowd.echo-request.log" should include "received: OFPT_ECHO_REQUEST" x 10
@@ -0,0 +1,84 @@
1
+ Feature: Send a features request message
2
+
3
+ As a Trema user
4
+ I want to send a features request message to openflow switches
5
+ So that I can get the list of switch features
6
+
7
+
8
+ Scenario: Send a features request
9
+ When I try trema run "./objects/examples/openflow_message/features_request" with following configuration (backgrounded):
10
+ """
11
+ vswitch( "features_request" ) { datapath_id "0xabc" }
12
+ """
13
+ And wait until "features_request" is up
14
+ And I terminated all trema services
15
+ Then the output should include:
16
+ """
17
+ datapath_id: 0xabc
18
+ n_buffers: 256
19
+ n_tables: 1
20
+ capabilities:
21
+ OFPC_FLOW_STATS
22
+ OFPC_TABLE_STATS
23
+ OFPC_PORT_STATS
24
+ OFPC_ARP_MATCH_IP
25
+ actions:
26
+ OFPAT_OUTPUT
27
+ OFPAT_SET_VLAN_VID
28
+ OFPAT_SET_VLAN_PCP
29
+ OFPAT_STRIP_VLAN
30
+ OFPAT_SET_DL_SRC
31
+ OFPAT_SET_DL_DST
32
+ OFPAT_SET_NW_SRC
33
+ OFPAT_SET_NW_DST
34
+ OFPAT_SET_NW_TOS
35
+ OFPAT_SET_TP_SRC
36
+ OFPAT_SET_TP_DST
37
+ port_no: 65534
38
+ name = vsw_0xabc
39
+ config = 0x1
40
+ state = 0x1
41
+ curr = 0x82
42
+ advertised = 0
43
+ supported = 0
44
+ peer = 0
45
+ """
46
+
47
+ Scenario: Send a features request in Ruby
48
+ When I try trema run "./src/examples/openflow_message/features-request.rb" with following configuration (backgrounded):
49
+ """
50
+ vswitch( "features-request" ) { datapath_id "0xabc" }
51
+ """
52
+ And wait until "FeaturesRequestController" is up
53
+ And I terminated all trema services
54
+ Then the output should include:
55
+ """
56
+ datapath_id: 0xabc
57
+ n_buffers: 256
58
+ n_tables: 1
59
+ capabilities:
60
+ OFPC_FLOW_STATS
61
+ OFPC_TABLE_STATS
62
+ OFPC_PORT_STATS
63
+ OFPC_ARP_MATCH_IP
64
+ actions:
65
+ OFPAT_OUTPUT
66
+ OFPAT_SET_VLAN_VID
67
+ OFPAT_SET_VLAN_PCP
68
+ OFPAT_STRIP_VLAN
69
+ OFPAT_SET_DL_SRC
70
+ OFPAT_SET_DL_DST
71
+ OFPAT_SET_NW_SRC
72
+ OFPAT_SET_NW_DST
73
+ OFPAT_SET_NW_TOS
74
+ OFPAT_SET_TP_SRC
75
+ OFPAT_SET_TP_DST
76
+ port_no: 65534
77
+ name = vsw_0xabc
78
+ config = 0x1
79
+ state = 0x1
80
+ curr = 0x82
81
+ advertised = 0x0
82
+ supported = 0x0
83
+ peer = 0x0
84
+ """
@@ -0,0 +1,25 @@
1
+ Feature: Send hello messages
2
+
3
+ As a Trema user
4
+ I want to send hello messages to openflow switches
5
+ So that I can start transactions with switches
6
+
7
+
8
+ Scenario: Hello trema
9
+ When I try trema run "./objects/examples/openflow_message/hello 10" with following configuration (backgrounded):
10
+ """
11
+ vswitch("hello") { datapath_id "0xabc" }
12
+ """
13
+ And wait until "hello" is up
14
+ And I terminated all trema services
15
+ Then the log file "openflowd.hello.log" should include "received: OFPT_HELLO" x 11
16
+
17
+
18
+ Scenario: Hello trema in Ruby
19
+ When I try trema run "./src/examples/openflow_message/hello.rb 0xabc, 10" with following configuration (backgrounded):
20
+ """
21
+ vswitch("hello-r") { datapath_id "0xabc" }
22
+ """
23
+ And wait until "HelloController" is up
24
+ And I terminated all trema services
25
+ Then the log file "openflowd.hello-r.log" should include "received: OFPT_HELLO" x 11
@@ -0,0 +1,27 @@
1
+ Feature: Send set config messages
2
+
3
+ As a Trema user
4
+ I want to send set config messages to openflow switches
5
+ So that I can set configuration parameters of openflow switches
6
+
7
+
8
+ Scenario: set config x 10
9
+ When I try trema run "./objects/examples/openflow_message/set_config 10" with following configuration (backgrounded):
10
+ """
11
+ vswitch("set_config") { datapath_id "0xabc" }
12
+ """
13
+ And wait until "set_config" is up
14
+ And *** sleep 2 ***
15
+ And I terminated all trema services
16
+ Then the log file "openflowd.set_config.log" should include "received: OFPT_SET_CONFIG" x 11
17
+
18
+
19
+ Scenario: set config x 10 in Ruby
20
+ When I try trema run "./src/examples/openflow_message/set-config.rb 0xabc, 10" with following configuration (backgrounded):
21
+ """
22
+ vswitch("set-config") { datapath_id "0xabc" }
23
+ """
24
+ And wait until "SetConfigController" is up
25
+ And *** sleep 2 ***
26
+ And I terminated all trema services
27
+ Then the log file "openflowd.set-config.log" should include "received: OFPT_SET_CONFIG" x 11
@@ -0,0 +1,135 @@
1
+ Feature: control multiple openflow switches using multi learning switch controller
2
+
3
+ As a Trema user
4
+ I want to control multiple openflow switches using multi learning switch controller
5
+ So that I can send and receive packets
6
+
7
+
8
+ Scenario: Send and receive packets
9
+ Given I try trema run "./objects/examples/multi_learning_switch/multi_learning_switch" with following configuration (backgrounded):
10
+ """
11
+ vswitch("multi_learning1") { datapath_id "0x1" }
12
+ vswitch("multi_learning2") { datapath_id "0x2" }
13
+ vswitch("multi_learning3") { datapath_id "0x3" }
14
+ vswitch("multi_learning4") { datapath_id "0x4" }
15
+
16
+ vhost("host1")
17
+ vhost("host2")
18
+ vhost("host3")
19
+ vhost("host4")
20
+
21
+ link "multi_learning1", "host1"
22
+ link "multi_learning2", "host2"
23
+ link "multi_learning3", "host3"
24
+ link "multi_learning4", "host4"
25
+ link "multi_learning1", "multi_learning2"
26
+ link "multi_learning2", "multi_learning3"
27
+ link "multi_learning3", "multi_learning4"
28
+ """
29
+ And wait until "multi_learning_switch" is up
30
+ And *** sleep 1 ***
31
+
32
+ When I send 2 packets from host1 to host2
33
+ Then the total number of tx packets should be:
34
+ | host1 | host2 | host3 | host4 |
35
+ | 2 | 0 | 0 | 0 |
36
+ And the total number of rx packets should be:
37
+ | host1 | host2 | host3 | host4 |
38
+ | 0 | 2 | 0 | 0 |
39
+
40
+ When I send 3 packets from host3 to host4
41
+ Then the total number of tx packets should be:
42
+ | host1 | host2 | host3 | host4 |
43
+ | 2 | 0 | 3 | 0 |
44
+ And the total number of rx packets should be:
45
+ | host1 | host2 | host3 | host4 |
46
+ | 0 | 2 | 0 | 3 |
47
+
48
+ When I send 2 packets from host4 to host1
49
+ Then the total number of tx packets should be:
50
+ | host1 | host2 | host3 | host4 |
51
+ | 2 | 0 | 3 | 2 |
52
+ And the total number of rx packets should be:
53
+ | host1 | host2 | host3 | host4 |
54
+ | 2 | 2 | 0 | 3 |
55
+
56
+ When I send 4 packets from host2 to host3
57
+ Then the total number of tx packets should be:
58
+ | host1 | host2 | host3 | host4 |
59
+ | 2 | 4 | 3 | 2 |
60
+ And the total number of rx packets should be:
61
+ | host1 | host2 | host3 | host4 |
62
+ | 2 | 2 | 4 | 3 |
63
+
64
+ When I send 1 packets from host1 to host4
65
+ Then the total number of tx packets should be:
66
+ | host1 | host2 | host3 | host4 |
67
+ | 3 | 4 | 3 | 2 |
68
+ And the total number of rx packets should be:
69
+ | host1 | host2 | host3 | host4 |
70
+ | 2 | 2 | 4 | 4 |
71
+
72
+
73
+ Scenario: Send and receive packets
74
+ Given I try trema run "./src/examples/multi_learning_switch/multi-learning-switch.rb" with following configuration (backgrounded):
75
+ """
76
+ vswitch("multi_learning1") { datapath_id "0x1" }
77
+ vswitch("multi_learning2") { datapath_id "0x2" }
78
+ vswitch("multi_learning3") { datapath_id "0x3" }
79
+ vswitch("multi_learning4") { datapath_id "0x4" }
80
+
81
+ vhost("host1")
82
+ vhost("host2")
83
+ vhost("host3")
84
+ vhost("host4")
85
+
86
+ link "multi_learning1", "host1"
87
+ link "multi_learning2", "host2"
88
+ link "multi_learning3", "host3"
89
+ link "multi_learning4", "host4"
90
+ link "multi_learning1", "multi_learning2"
91
+ link "multi_learning2", "multi_learning3"
92
+ link "multi_learning3", "multi_learning4"
93
+ """
94
+ And wait until "MultiLearningSwitch" is up
95
+ And *** sleep 1 ***
96
+
97
+ When I send 2 packets from host1 to host2
98
+ Then the total number of tx packets should be:
99
+ | host1 | host2 | host3 | host4 |
100
+ | 2 | 0 | 0 | 0 |
101
+ And the total number of rx packets should be:
102
+ | host1 | host2 | host3 | host4 |
103
+ | 0 | 2 | 0 | 0 |
104
+
105
+ When I send 3 packets from host3 to host4
106
+ Then the total number of tx packets should be:
107
+ | host1 | host2 | host3 | host4 |
108
+ | 2 | 0 | 3 | 0 |
109
+ And the total number of rx packets should be:
110
+ | host1 | host2 | host3 | host4 |
111
+ | 0 | 2 | 0 | 3 |
112
+
113
+ When I send 2 packets from host4 to host1
114
+ Then the total number of tx packets should be:
115
+ | host1 | host2 | host3 | host4 |
116
+ | 2 | 0 | 3 | 2 |
117
+ And the total number of rx packets should be:
118
+ | host1 | host2 | host3 | host4 |
119
+ | 2 | 2 | 0 | 3 |
120
+
121
+ When I send 4 packets from host2 to host3
122
+ Then the total number of tx packets should be:
123
+ | host1 | host2 | host3 | host4 |
124
+ | 2 | 4 | 3 | 2 |
125
+ And the total number of rx packets should be:
126
+ | host1 | host2 | host3 | host4 |
127
+ | 2 | 2 | 4 | 3 |
128
+
129
+ When I send 1 packets from host1 to host4
130
+ Then the total number of tx packets should be:
131
+ | host1 | host2 | host3 | host4 |
132
+ | 3 | 4 | 3 | 2 |
133
+ And the total number of rx packets should be:
134
+ | host1 | host2 | host3 | host4 |
135
+ | 2 | 2 | 4 | 4 |
@@ -0,0 +1,91 @@
1
+ Feature: Packet-In filter configuration example
2
+
3
+ As a Trema user
4
+ I want to configure packetin_filter
5
+ So that I can configuration filters of packetin_filter
6
+
7
+
8
+ Scenario: add filter
9
+ When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
10
+ """
11
+ event :port_status => "dumper", :packet_in => "filter", :state_notify => "dumper"
12
+ filter :lldp => "dumper", :packet_in => "dumper"
13
+ """
14
+ And wait until "dumper" is up
15
+ And *** sleep 2 ***
16
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/add_filter"
17
+ Then the output should include:
18
+ """
19
+ A packetin filter was added ( match = [wildcards = 0xc, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 10, nw_src = 10.0.0.1/32, nw_dst = 10.0.0.2/32, tp_src = 1024, tp_dst = 2048], service_name = dumper ).
20
+ """
21
+
22
+ Scenario: dump filter
23
+ When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
24
+ """
25
+ event :port_status => "dumper", :packet_in => "filter", :state_notify => "dumper"
26
+ filter :lldp => "dumper", :packet_in => "dumper"
27
+ """
28
+ And wait until "dumper" is up
29
+ And *** sleep 2 ***
30
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/dump_filter"
31
+ Then the output should include:
32
+ """
33
+ 2 packetin filters found ( match = [wildcards = 0x3fffff, in_port = 0, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0, dl_vlan_pcp = 0, dl_type = 0, nw_tos = 0, nw_proto = 0, nw_src = 0.0.0.0/0, nw_dst = 0.0.0.0/0, tp_src = 0, tp_dst = 0], service_name = dumper, strict = false ).
34
+ [#0] match = [wildcards = 0x3fffef, in_port = 0, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0, dl_vlan_pcp = 0, dl_type = 0x88cc, nw_tos = 0, nw_proto = 0, nw_src = 0.0.0.0/0, nw_dst = 0.0.0.0/0, tp_src = 0, tp_dst = 0], priority = 32768, service_name = dumper.
35
+ [#1] match = [wildcards = 0x3fffff, in_port = 0, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0, dl_vlan_pcp = 0, dl_type = 0, nw_tos = 0, nw_proto = 0, nw_src = 0.0.0.0/0, nw_dst = 0.0.0.0/0, tp_src = 0, tp_dst = 0], priority = 0, service_name = dumper.
36
+ """
37
+
38
+ Scenario: dump filter strict
39
+ When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
40
+ """
41
+ event :port_status => "dumper", :packet_in => "filter", :state_notify => "dumper"
42
+ filter :lldp => "dumper", :packet_in => "dumper"
43
+ """
44
+ And wait until "dumper" is up
45
+ And *** sleep 2 ***
46
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/dump_filter_strict"
47
+ Then the output should include:
48
+ """
49
+ 0 packetin filter found ( match = [wildcards = 0xc, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 10, nw_src = 10.0.0.1/32, nw_dst = 10.0.0.2/32, tp_src = 1024, tp_dst = 2048], service_name = dumper, strict = true ).
50
+ """
51
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/add_filter"
52
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/dump_filter_strict"
53
+ Then the output should include:
54
+ """
55
+ 1 packetin filter found ( match = [wildcards = 0xc, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 10, nw_src = 10.0.0.1/32, nw_dst = 10.0.0.2/32, tp_src = 1024, tp_dst = 2048], service_name = dumper, strict = true ).
56
+ [#0] match = [wildcards = 0xc, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 10, nw_src = 10.0.0.1/32, nw_dst = 10.0.0.2/32, tp_src = 1024, tp_dst = 2048], priority = 65535, service_name = dumper.
57
+ """
58
+
59
+ Scenario: delete filter strict
60
+ When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
61
+ """
62
+ event :port_status => "dumper", :packet_in => "filter", :state_notify => "dumper"
63
+ filter :lldp => "dumper", :packet_in => "dumper"
64
+ """
65
+ And wait until "dumper" is up
66
+ And *** sleep 2 ***
67
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/delete_filter_strict"
68
+ Then the output should include:
69
+ """
70
+ 0 packetin filter was deleted ( match = [wildcards = 0xc, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 10, nw_src = 10.0.0.1/32, nw_dst = 10.0.0.2/32, tp_src = 1024, tp_dst = 2048], service_name = dumper, strict = true ).
71
+ """
72
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/add_filter"
73
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/delete_filter_strict"
74
+ Then the output should include:
75
+ """
76
+ 1 packetin filter was deleted ( match = [wildcards = 0xc, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 65535, dl_vlan_pcp = 0, dl_type = 0x800, nw_tos = 0, nw_proto = 10, nw_src = 10.0.0.1/32, nw_dst = 10.0.0.2/32, tp_src = 1024, tp_dst = 2048], service_name = dumper, strict = true ).
77
+ """
78
+
79
+ Scenario: delete filter
80
+ When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
81
+ """
82
+ event :port_status => "dumper", :packet_in => "filter", :state_notify => "dumper"
83
+ filter :lldp => "dumper", :packet_in => "dumper"
84
+ """
85
+ And wait until "dumper" is up
86
+ And *** sleep 2 ***
87
+ And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/delete_filter"
88
+ Then the output should include:
89
+ """
90
+ 2 packetin filters were deleted ( match = [wildcards = 0x3fffff, in_port = 0, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0, dl_vlan_pcp = 0, dl_type = 0, nw_tos = 0, nw_proto = 0, nw_src = 0.0.0.0/0, nw_dst = 0.0.0.0/0, tp_src = 0, tp_dst = 0], service_name = dumper, strict = false ).
91
+ """