trema 0.2.5 → 0.2.6

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 (292) hide show
  1. data/.gitignore +1 -1
  2. data/Doxyfile +1 -1
  3. data/Gemfile +18 -6
  4. data/README.md +112 -5
  5. data/Rakefile +3 -1
  6. data/Rantfile +88 -1
  7. data/bin/trema +248 -0
  8. data/bin/trema-config +59 -0
  9. data/cruise.rb +1 -1
  10. data/features/example.dumper.feature +45 -65
  11. data/features/example.hello_trema.feature +21 -0
  12. data/features/example.learning_switch.feature +26 -28
  13. data/features/example.list_switches.feature +19 -33
  14. data/features/example.message.echo_reply.feature +10 -10
  15. data/features/example.message.echo_request.feature +2 -2
  16. data/features/example.message.features_request.feature +6 -5
  17. data/features/example.message.hello.feature +47 -13
  18. data/features/example.message.set_config.feature +4 -4
  19. data/features/example.message.vendor-action.feature +23 -0
  20. data/features/example.multi_learning_switch.feature +14 -42
  21. data/features/example.packet_in.feature +31 -0
  22. data/features/example.packetin_filter_config.feature +11 -7
  23. data/features/example.patch_panel.feature +29 -0
  24. data/features/example.repeater_hub.feature +43 -40
  25. data/features/example.switch_info.feature +51 -0
  26. data/features/example.switch_monitor.feature +24 -42
  27. data/features/packetin_filter.feature +28 -22
  28. data/features/step_definitions/misc_steps.rb +19 -8
  29. data/features/step_definitions/send_packets_steps.rb +1 -10
  30. data/features/step_definitions/stats_steps.rb +4 -4
  31. data/features/support/env.rb +2 -1
  32. data/features/support/hooks.rb +35 -2
  33. data/features/switch_manager.feature +18 -12
  34. data/features/trema-config.feature +26 -39
  35. data/features/trema.dump_flows.feature +26 -12
  36. data/features/trema.help.feature +26 -0
  37. data/features/trema.kill.feature +39 -41
  38. data/features/trema.killall.feature +23 -23
  39. data/features/trema.reset_stats.feature +50 -10
  40. data/features/trema.run.feature +28 -39
  41. data/features/trema.send_packets.feature +29 -40
  42. data/features/trema.show_stats.feature +30 -33
  43. data/features/trema.up.feature +33 -0
  44. data/features/trema.version.feature +9 -0
  45. data/ruby/extconf.rb +7 -0
  46. data/ruby/trema/aggregate-stats-reply.rb +3 -3
  47. data/ruby/trema/app.rb +5 -1
  48. data/ruby/trema/barrier-request.c +55 -30
  49. data/ruby/trema/cli.rb +8 -8
  50. data/ruby/trema/command.rb +1 -3
  51. data/ruby/trema/command/dump_flows.rb +5 -24
  52. data/ruby/trema/command/kill.rb +31 -36
  53. data/ruby/trema/command/killall.rb +1 -19
  54. data/{features/step_definitions/kill_steps.rb → ruby/trema/command/netns.rb} +13 -5
  55. data/ruby/trema/command/reset_stats.rb +3 -23
  56. data/ruby/trema/command/ruby.rb +2 -19
  57. data/ruby/trema/command/run.rb +6 -27
  58. data/ruby/trema/command/send_packets.rb +6 -90
  59. data/ruby/trema/command/show_stats.rb +21 -40
  60. data/ruby/trema/command/up.rb +5 -26
  61. data/ruby/trema/command/version.rb +1 -5
  62. data/ruby/trema/controller.c +14 -16
  63. data/ruby/trema/custom-switch.rb +56 -0
  64. data/ruby/trema/desc-stats-reply.rb +5 -5
  65. data/ruby/trema/dsl/configuration.rb +4 -0
  66. data/{features/step_definitions/up_steps.rb → ruby/trema/dsl/custom-switch.rb} +18 -4
  67. data/ruby/trema/dsl/netns.rb +78 -0
  68. data/ruby/trema/dsl/parser.rb +2 -0
  69. data/ruby/trema/dsl/runner.rb +8 -0
  70. data/ruby/trema/dsl/syntax.rb +18 -0
  71. data/ruby/trema/echo-reply.h +2 -2
  72. data/ruby/trema/echo-request.c +3 -5
  73. data/ruby/trema/enqueue.rb +2 -2
  74. data/ruby/trema/error.c +3 -3
  75. data/ruby/trema/executables.rb +26 -2
  76. data/ruby/trema/features-request.c +3 -5
  77. data/ruby/trema/flow-removed.c +6 -6
  78. data/ruby/trema/flow-stats-reply.rb +6 -8
  79. data/ruby/trema/flow.rb +12 -1
  80. data/ruby/trema/get-config-request.c +55 -28
  81. data/ruby/trema/hello.c +3 -5
  82. data/ruby/trema/host.rb +8 -0
  83. data/ruby/trema/list-switches-reply.c +1 -1
  84. data/ruby/trema/mac.rb +1 -1
  85. data/ruby/trema/match.c +15 -14
  86. data/ruby/trema/monkey-patch/module/deprecation.rb +0 -2
  87. data/ruby/trema/netns.rb +127 -0
  88. data/ruby/trema/ordered-hash.rb +5 -4
  89. data/ruby/trema/packet-in.c +136 -113
  90. data/ruby/trema/packet-queue.rb +9 -9
  91. data/ruby/trema/packetin-filter.rb +1 -1
  92. data/ruby/trema/phost.rb +16 -7
  93. data/ruby/trema/port-mod.c +6 -5
  94. data/ruby/trema/port-stats-reply.rb +2 -2
  95. data/ruby/trema/process.rb +29 -0
  96. data/ruby/trema/queue-stats-reply.rb +2 -4
  97. data/ruby/trema/send-out-port.rb +5 -3
  98. data/ruby/trema/set-eth-addr.rb +4 -0
  99. data/ruby/trema/set-ip-addr.rb +4 -2
  100. data/ruby/trema/set-ip-dst-addr.rb +2 -1
  101. data/ruby/trema/set-ip-src-addr.rb +2 -1
  102. data/ruby/trema/set-ip-tos.rb +3 -2
  103. data/ruby/trema/set-transport-port.rb +3 -2
  104. data/ruby/trema/set-vlan-priority.rb +3 -2
  105. data/ruby/trema/set-vlan-vid.rb +5 -4
  106. data/ruby/trema/shell/reset_stats.rb +2 -1
  107. data/ruby/trema/shell/run.rb +1 -1
  108. data/ruby/trema/shell/send_packets.rb +1 -1
  109. data/ruby/trema/shell/show_stats.rb +1 -1
  110. data/ruby/trema/stats-helper.rb +3 -3
  111. data/ruby/trema/stats-reply.c +26 -17
  112. data/ruby/trema/stats-request.c +39 -41
  113. data/ruby/trema/switch-daemon.rb +36 -31
  114. data/ruby/trema/switch.c +1 -1
  115. data/ruby/trema/table-stats-reply.rb +1 -1
  116. data/ruby/trema/timers.rb +13 -13
  117. data/ruby/trema/trema.c +3 -3
  118. data/ruby/trema/tremashark.rb +9 -2
  119. data/ruby/trema/util.rb +39 -15
  120. data/ruby/trema/vendor-action.rb +8 -3
  121. data/ruby/trema/vendor-stats-reply.rb +4 -6
  122. data/ruby/trema/vendor.c +1 -1
  123. data/ruby/trema/version.rb +1 -1
  124. data/spec/trema/barrier-request_spec.rb +47 -37
  125. data/spec/trema/controller_spec.rb +1 -0
  126. data/spec/trema/dsl/runner_spec.rb +8 -3
  127. data/spec/trema/dsl/vhost_spec.rb +8 -8
  128. data/spec/trema/echo-request_spec.rb +1 -0
  129. data/spec/trema/features-request_spec.rb +1 -0
  130. data/spec/trema/flow-removed_spec.rb +9 -9
  131. data/spec/trema/get-config-request_spec.rb +51 -39
  132. data/spec/trema/match_spec.rb +1 -1
  133. data/spec/trema/openflow-error_spec.rb +11 -11
  134. data/spec/trema/packet-out_spec.rb +5 -5
  135. data/spec/trema/queue-get-config-reply_spec.rb +1 -1
  136. data/spec/trema/queue-get-config-request_spec.rb +1 -1
  137. data/spec/trema/set-eth-dst-addr_spec.rb +1 -1
  138. data/spec/trema/set-eth-src-addr_spec.rb +1 -1
  139. data/spec/trema/set-ip-dst-addr_spec.rb +1 -0
  140. data/spec/trema/set-ip-src-addr_spec.rb +1 -0
  141. data/spec/trema/set-ip-tos_spec.rb +1 -0
  142. data/spec/trema/set-transport-dst-port_spec.rb +1 -0
  143. data/spec/trema/set-transport-src-port_spec.rb +1 -0
  144. data/spec/trema/set-vlan-priority_spec.rb +1 -0
  145. data/spec/trema/set-vlan-vid_spec.rb +2 -1
  146. data/spec/trema/stats-reply_spec.rb +38 -36
  147. data/spec/trema/stats-request_spec.rb +6 -6
  148. data/spec/trema/strip-vlan-header_spec.rb +1 -0
  149. data/spec/trema/util_spec.rb +3 -2
  150. data/spec/trema/vendor-action_spec.rb +9 -8
  151. data/src/examples/dumper/dumper.c +8 -6
  152. data/src/examples/dumper/dumper.rb +1 -1
  153. data/{features/step_definitions/killall_steps.rb → src/examples/hello_trema/hello-trema.rb} +6 -5
  154. data/src/examples/hello_trema/hello_trema.c +4 -4
  155. data/src/examples/learning_switch/learning_switch.c +1 -1
  156. data/src/examples/list_switches/list_switches.c +2 -2
  157. data/src/examples/match_compare/match-compare.rb +2 -2
  158. data/src/examples/multi_learning_switch/multi-learning-switch.rb +1 -1
  159. data/src/examples/multi_learning_switch/multi_learning_switch.c +3 -3
  160. data/src/examples/openflow_message/README +1 -1
  161. data/src/examples/openflow_message/echo-request.rb +1 -1
  162. data/src/examples/openflow_message/features_request.c +21 -21
  163. data/src/examples/openflow_message/hello.c +1 -3
  164. data/src/examples/openflow_message/hello.rb +9 -24
  165. data/src/examples/{hello_trema/hello_trema.rb → openflow_message/vendor-action.rb} +17 -7
  166. data/src/examples/openflow_message/vendor_action.c +105 -0
  167. data/src/examples/openflow_switch/hello_switch.c +81 -0
  168. data/src/examples/packet_in/packet-in.rb +9 -13
  169. data/src/examples/packetin_filter_config/packetin_filter_config.c +2 -2
  170. data/src/examples/patch_panel/network.conf +14 -0
  171. data/src/examples/patch_panel/patch-panel.conf +1 -0
  172. data/{features/step_definitions/show_stats_steps.rb → src/examples/patch_panel/patch-panel.rb} +29 -13
  173. data/src/examples/switch_info/{switch_info.rb → switch-info.rb} +2 -2
  174. data/src/examples/switch_info/switch_info.c +4 -4
  175. data/src/examples/switch_monitor/switch_monitor.c +3 -3
  176. data/src/examples/traffic_monitor/counter.c +9 -9
  177. data/src/examples/traffic_monitor/fdb.c +9 -9
  178. data/src/lib/arp.h +1 -1
  179. data/src/lib/buffer.c +4 -3
  180. data/src/lib/byteorder.c +31 -5
  181. data/src/lib/byteorder.h +2 -2
  182. data/src/lib/chibach.c +8 -6
  183. data/src/lib/daemon.c +29 -3
  184. data/src/lib/doubly_linked_list.c +6 -1
  185. data/src/lib/ether.c +1 -1
  186. data/src/lib/ether.h +1 -1
  187. data/src/lib/event_handler.c +3 -3
  188. data/src/lib/hash_table.c +1 -1
  189. data/src/lib/linked_list.c +50 -2
  190. data/src/lib/linked_list.h +2 -2
  191. data/src/lib/log.c +122 -22
  192. data/src/lib/log.h +13 -9
  193. data/src/lib/management_interface.c +361 -0
  194. data/src/lib/management_interface.h +42 -0
  195. data/src/lib/management_service_interface.c +104 -0
  196. data/src/lib/management_service_interface.h +136 -0
  197. data/src/lib/match_table.c +5 -5
  198. data/src/lib/message_queue.c +5 -3
  199. data/src/lib/message_queue.h +1 -1
  200. data/src/lib/messenger.c +73 -39
  201. data/src/lib/messenger.h +3 -2
  202. data/src/lib/openflow_application_interface.c +17 -17
  203. data/src/lib/openflow_message.c +175 -23
  204. data/src/lib/openflow_message.h +2 -1
  205. data/src/lib/openflow_switch_interface.c +12 -12
  206. data/src/lib/packet_parser.c +11 -32
  207. data/src/lib/packetin_filter_interface.c +5 -5
  208. data/src/lib/persistent_storage.c +7 -7
  209. data/src/lib/secure_channel.c +6 -6
  210. data/src/lib/secure_channel.h +1 -1
  211. data/src/lib/stat.c +54 -17
  212. data/src/lib/stat.h +9 -0
  213. data/src/lib/timer.c +11 -10
  214. data/src/lib/trema.c +38 -9
  215. data/src/lib/trema.h +1 -0
  216. data/src/lib/trema_private.h +6 -0
  217. data/src/lib/trema_wrapper.c +4 -4
  218. data/src/lib/trema_wrapper.h +10 -10
  219. data/src/lib/utility.c +6 -6
  220. data/src/management/application.c +224 -0
  221. data/src/management/echo.c +185 -0
  222. data/src/management/set_logging_level.c +153 -0
  223. data/src/management/show_stats.c +150 -0
  224. data/src/management/trema_manager +184 -0
  225. data/src/packetin_filter/packetin_filter.c +31 -29
  226. data/src/switch_manager/cookie_table.c +7 -7
  227. data/src/switch_manager/dpid_table.c +3 -3
  228. data/src/switch_manager/dpid_table.h +0 -1
  229. data/src/switch_manager/management_interface.h +0 -1
  230. data/src/switch_manager/ofpmsg_recv.c +3 -3
  231. data/src/switch_manager/ofpmsg_recv.h +0 -1
  232. data/src/switch_manager/ofpmsg_send.c +2 -2
  233. data/src/switch_manager/ofpmsg_send.h +0 -1
  234. data/src/switch_manager/secure_channel_listener.c +2 -2
  235. data/src/switch_manager/secure_channel_receiver.c +2 -2
  236. data/src/switch_manager/secure_channel_receiver.h +0 -1
  237. data/src/switch_manager/secure_channel_sender.c +8 -1
  238. data/src/switch_manager/service_interface.c +5 -4
  239. data/src/switch_manager/switch.c +79 -53
  240. data/src/switch_manager/switch_manager.c +24 -22
  241. data/src/switch_manager/xid_table.c +6 -6
  242. data/src/switch_manager/xid_table.h +0 -1
  243. data/src/tremashark/README +4 -3
  244. data/src/tremashark/packet_capture.c +11 -9
  245. data/src/tremashark/pcap_queue.c +2 -2
  246. data/src/tremashark/pcap_queue.h +2 -2
  247. data/src/tremashark/plugin/packet-trema/Makefile +1 -1
  248. data/src/tremashark/plugin/packet-trema/Makefile.common +1 -1
  249. data/src/tremashark/plugin/packet-trema/packet-trema.c +50 -37
  250. data/src/tremashark/queue.c +5 -4
  251. data/src/tremashark/queue.h +1 -1
  252. data/src/tremashark/stdin_relay.c +10 -8
  253. data/src/tremashark/syslog_relay.c +14 -12
  254. data/src/tremashark/tremashark.c +15 -18
  255. data/trema +2 -96
  256. data/trema-config +2 -52
  257. data/trema.gemspec +12 -1
  258. data/unittests/cmockery_trema.h +14 -13
  259. data/unittests/lib/buffer_test.c +1 -1
  260. data/unittests/lib/byteorder_test.c +108 -25
  261. data/unittests/lib/daemon_test.c +141 -5
  262. data/unittests/lib/doubly_linked_list_test.c +5 -1
  263. data/unittests/lib/ether_test.c +4 -4
  264. data/unittests/lib/hash_table_test.c +5 -3
  265. data/unittests/lib/linked_list_test.c +82 -4
  266. data/unittests/lib/log_test.c +96 -5
  267. data/unittests/lib/management_interface_test.c +240 -0
  268. data/unittests/lib/management_service_interface_test.c +319 -0
  269. data/unittests/lib/message_queue_test.c +6 -2
  270. data/unittests/lib/messenger_test.c +167 -2
  271. data/unittests/lib/openflow_application_interface_test.c +16 -22
  272. data/unittests/lib/openflow_message_test.c +721 -24
  273. data/unittests/lib/packet_info_test.c +2 -2
  274. data/unittests/lib/packet_parser_test.c +15 -16
  275. data/unittests/lib/packetin_filter_interface_test.c +6 -6
  276. data/unittests/lib/persistent_storage_test.c +11 -11
  277. data/unittests/lib/stat_test.c +151 -7
  278. data/unittests/lib/timer_test.c +1 -1
  279. data/unittests/lib/trema_private_test.c +2 -2
  280. data/unittests/lib/trema_test.c +40 -12
  281. data/unittests/lib/utility_test.c +3 -3
  282. data/unittests/lib/wrapper_test.c +3 -3
  283. data/unittests/packetin_filter/packetin_filter_test.c +12 -11
  284. data/unittests/switch_manager/switch_manager_test.c +29 -22
  285. metadata +99 -20
  286. data/features/step_definitions/log_steps.rb +0 -90
  287. data/features/step_definitions/run_steps.rb +0 -91
  288. data/features/trema.feature +0 -27
  289. data/features/tutorial.hello_trema.feature +0 -27
  290. data/features/tutorial.packet_in.feature +0 -47
  291. data/features/tutorial.switch_info.feature +0 -55
  292. data/ruby/trema/command/usage.rb +0 -63
@@ -4,7 +4,7 @@ Feature: Send set config messages
4
4
  I want to send set config messages to openflow switches
5
5
  So that I can set configuration parameters of openflow switches
6
6
 
7
-
7
+ @wip
8
8
  Scenario: set config x 10
9
9
  When I try trema run "./objects/examples/openflow_message/set_config 10" with following configuration (backgrounded):
10
10
  """
@@ -12,10 +12,10 @@ Feature: Send set config messages
12
12
  """
13
13
  And wait until "set_config" is up
14
14
  And *** sleep 2 ***
15
- And I terminated all trema services
15
+ And I run `trema killall`
16
16
  Then the log file "openflowd.set_config.log" should include "received: OFPT_SET_CONFIG" x 11
17
17
 
18
-
18
+ @wip
19
19
  Scenario: set config x 10 in Ruby
20
20
  When I try trema run "./src/examples/openflow_message/set-config.rb 0xabc, 10" with following configuration (backgrounded):
21
21
  """
@@ -23,5 +23,5 @@ Feature: Send set config messages
23
23
  """
24
24
  And wait until "SetConfigController" is up
25
25
  And *** sleep 2 ***
26
- And I terminated all trema services
26
+ And I run `trema killall`
27
27
  Then the log file "openflowd.set-config.log" should include "received: OFPT_SET_CONFIG" x 11
@@ -0,0 +1,23 @@
1
+ Feature: "Vendor Action" sample application
2
+
3
+ In order to learn how to send Vendor Action
4
+ As a developer using Trema
5
+ I want to execute "Vendor Action" sample application
6
+
7
+ Background:
8
+ Given a file named "vendor_action.conf" with:
9
+ """
10
+ vswitch( "vendor_action" ) { datapath_id "0xabc" }
11
+ """
12
+
13
+ @slow_process
14
+ Scenario: Run "Packet In" C example
15
+ Given I run `trema run ../../objects/examples/openflow_message/vendor_action -c vendor_action.conf -d`
16
+ And wait until "vendor_action" is up
17
+ Then the file "../../tmp/log/openflowd.vendor_action.log" should contain "actions=note:54.72.65.6d.61.00"
18
+
19
+ @slow_process
20
+ Scenario: Run "Packet In" Ruby example
21
+ Given I run `trema run ../../src/examples/openflow_message/vendor-action.rb -c vendor_action.conf -d`
22
+ And wait until "VendorActionSampleController" is up
23
+ Then the file "../../tmp/log/openflowd.vendor_action.log" should contain "actions=note:54.72.65.6d.61.00"
@@ -1,12 +1,11 @@
1
- Feature: control multiple openflow switches using multi learning switch controller
1
+ Feature: "Multi Learning Switch" sample application
2
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
3
+ In order to learn how to implement software L2 switch (multiple switch support)
4
+ As a developer using Trema
5
+ I want to execute "Multi Learning Switch" sample application
6
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):
7
+ Background:
8
+ Given a file named "multi_learning_switch.conf" with:
10
9
  """
11
10
  vswitch("multi_learning1") { datapath_id "0x1" }
12
11
  vswitch("multi_learning2") { datapath_id "0x2" }
@@ -26,9 +25,11 @@ Feature: control multiple openflow switches using multi learning switch controll
26
25
  link "multi_learning2", "multi_learning3"
27
26
  link "multi_learning3", "multi_learning4"
28
27
  """
29
- And wait until "multi_learning_switch" is up
30
- And *** sleep 1 ***
31
28
 
29
+ @slow_process
30
+ Scenario: Run "Multi Learning Switch" C example
31
+ Given I run `trema run ../../objects/examples/multi_learning_switch/multi_learning_switch -c multi_learning_switch.conf -d`
32
+ And wait until "multi_learning_switch" is up
32
33
  When I send 2 packets from host1 to host2
33
34
  Then the total number of tx packets should be:
34
35
  | host1 | host2 | host3 | host4 |
@@ -36,7 +37,6 @@ Feature: control multiple openflow switches using multi learning switch controll
36
37
  And the total number of rx packets should be:
37
38
  | host1 | host2 | host3 | host4 |
38
39
  | 0 | 2 | 0 | 0 |
39
-
40
40
  When I send 3 packets from host3 to host4
41
41
  Then the total number of tx packets should be:
42
42
  | host1 | host2 | host3 | host4 |
@@ -44,7 +44,6 @@ Feature: control multiple openflow switches using multi learning switch controll
44
44
  And the total number of rx packets should be:
45
45
  | host1 | host2 | host3 | host4 |
46
46
  | 0 | 2 | 0 | 3 |
47
-
48
47
  When I send 2 packets from host4 to host1
49
48
  Then the total number of tx packets should be:
50
49
  | host1 | host2 | host3 | host4 |
@@ -52,7 +51,6 @@ Feature: control multiple openflow switches using multi learning switch controll
52
51
  And the total number of rx packets should be:
53
52
  | host1 | host2 | host3 | host4 |
54
53
  | 2 | 2 | 0 | 3 |
55
-
56
54
  When I send 4 packets from host2 to host3
57
55
  Then the total number of tx packets should be:
58
56
  | host1 | host2 | host3 | host4 |
@@ -60,7 +58,6 @@ Feature: control multiple openflow switches using multi learning switch controll
60
58
  And the total number of rx packets should be:
61
59
  | host1 | host2 | host3 | host4 |
62
60
  | 2 | 2 | 4 | 3 |
63
-
64
61
  When I send 1 packets from host1 to host4
65
62
  Then the total number of tx packets should be:
66
63
  | host1 | host2 | host3 | host4 |
@@ -69,31 +66,10 @@ Feature: control multiple openflow switches using multi learning switch controll
69
66
  | host1 | host2 | host3 | host4 |
70
67
  | 2 | 2 | 4 | 4 |
71
68
 
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
-
69
+ @slow_process
70
+ Scenario: Run "Multi Learning Switch" Ruby example
71
+ Given I run `trema run ../../src/examples/multi_learning_switch/multi-learning-switch.rb -c multi_learning_switch.conf -d`
72
+ And wait until "MultiLearningSwitch" is up
97
73
  When I send 2 packets from host1 to host2
98
74
  Then the total number of tx packets should be:
99
75
  | host1 | host2 | host3 | host4 |
@@ -101,7 +77,6 @@ Feature: control multiple openflow switches using multi learning switch controll
101
77
  And the total number of rx packets should be:
102
78
  | host1 | host2 | host3 | host4 |
103
79
  | 0 | 2 | 0 | 0 |
104
-
105
80
  When I send 3 packets from host3 to host4
106
81
  Then the total number of tx packets should be:
107
82
  | host1 | host2 | host3 | host4 |
@@ -109,7 +84,6 @@ Feature: control multiple openflow switches using multi learning switch controll
109
84
  And the total number of rx packets should be:
110
85
  | host1 | host2 | host3 | host4 |
111
86
  | 0 | 2 | 0 | 3 |
112
-
113
87
  When I send 2 packets from host4 to host1
114
88
  Then the total number of tx packets should be:
115
89
  | host1 | host2 | host3 | host4 |
@@ -117,7 +91,6 @@ Feature: control multiple openflow switches using multi learning switch controll
117
91
  And the total number of rx packets should be:
118
92
  | host1 | host2 | host3 | host4 |
119
93
  | 2 | 2 | 0 | 3 |
120
-
121
94
  When I send 4 packets from host2 to host3
122
95
  Then the total number of tx packets should be:
123
96
  | host1 | host2 | host3 | host4 |
@@ -125,7 +98,6 @@ Feature: control multiple openflow switches using multi learning switch controll
125
98
  And the total number of rx packets should be:
126
99
  | host1 | host2 | host3 | host4 |
127
100
  | 2 | 2 | 4 | 3 |
128
-
129
101
  When I send 1 packets from host1 to host4
130
102
  Then the total number of tx packets should be:
131
103
  | host1 | host2 | host3 | host4 |
@@ -0,0 +1,31 @@
1
+ Feature: "Packet In" sample application
2
+
3
+ In order to learn how to handle Packet In messages
4
+ As a developer using Trema
5
+ I want to execute "Packet In" sample application
6
+
7
+ Background:
8
+ Given a file named "packet_in.conf" with:
9
+ """
10
+ vswitch("packet_in") { dpid 0xabc }
11
+
12
+ vhost("host1")
13
+ vhost("host2")
14
+
15
+ link "packet_in", "host1"
16
+ link "packet_in", "host2"
17
+ """
18
+
19
+ @slow_process
20
+ Scenario: Run "Packet In" C example
21
+ Given I run `trema run ../../objects/examples/packet_in/packet_in -c packet_in.conf -d`
22
+ And wait until "packet_in" is up
23
+ When I send 1 packet from host1 to host2
24
+ Then the file "../../tmp/log/packet_in.log" should contain "received a packet_in"
25
+
26
+ @slow_process
27
+ Scenario: Run "Packet In" Ruby example
28
+ Given I run `trema run ../../src/examples/packet_in/packet-in.rb -c packet_in.conf -d`
29
+ And wait until "PacketInDumper" is up
30
+ When I send 1 packet from host1 to host2
31
+ Then the file "../../tmp/log/PacketInDumper.log" should contain "received a packet_in"
@@ -4,7 +4,7 @@ Feature: Packet-In filter configuration example
4
4
  I want to configure packetin_filter
5
5
  So that I can configuration filters of packetin_filter
6
6
 
7
-
7
+ @wip
8
8
  Scenario: add filter
9
9
  When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
10
10
  """
@@ -16,9 +16,10 @@ Feature: Packet-In filter configuration example
16
16
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/add_filter"
17
17
  Then the output should include:
18
18
  """
19
- A packetin filter was added ( match = [wildcards = 0xc(dl_src|dl_dst), 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 ).
19
+ A packetin filter was added ( match = [wildcards = 0xc(dl_src|dl_dst), in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0xffff, 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
20
  """
21
21
 
22
+ @wip
22
23
  Scenario: dump filter
23
24
  When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
24
25
  """
@@ -35,6 +36,7 @@ Feature: Packet-In filter configuration example
35
36
  [#1] match = [wildcards = 0x3fffff(all), 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
  """
37
38
 
39
+ @wip
38
40
  Scenario: dump filter strict
39
41
  When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
40
42
  """
@@ -46,16 +48,17 @@ Feature: Packet-In filter configuration example
46
48
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/dump_filter_strict"
47
49
  Then the output should include:
48
50
  """
49
- 0 packetin filter found ( match = [wildcards = 0xc(dl_src|dl_dst), 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 ).
51
+ 0 packetin filter found ( match = [wildcards = 0xc(dl_src|dl_dst), in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0xffff, 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
52
  """
51
53
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/add_filter"
52
54
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/dump_filter_strict"
53
55
  Then the output should include:
54
56
  """
55
- 1 packetin filter found ( match = [wildcards = 0xc(dl_src|dl_dst), 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(dl_src|dl_dst), 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
+ 1 packetin filter found ( match = [wildcards = 0xc(dl_src|dl_dst), in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0xffff, 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 ).
58
+ [#0] match = [wildcards = 0xc(dl_src|dl_dst), in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0xffff, 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
59
  """
58
60
 
61
+ @wip
59
62
  Scenario: delete filter strict
60
63
  When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
61
64
  """
@@ -67,15 +70,16 @@ Feature: Packet-In filter configuration example
67
70
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/delete_filter_strict"
68
71
  Then the output should include:
69
72
  """
70
- 0 packetin filter was deleted ( match = [wildcards = 0xc(dl_src|dl_dst), 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 ).
73
+ 0 packetin filter was deleted ( match = [wildcards = 0xc(dl_src|dl_dst), in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0xffff, 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
74
  """
72
75
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/add_filter"
73
76
  And I try to run "TREMA_HOME=`pwd` ./objects/examples/packetin_filter_config/delete_filter_strict"
74
77
  Then the output should include:
75
78
  """
76
- 1 packetin filter was deleted ( match = [wildcards = 0xc(dl_src|dl_dst), 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 ).
79
+ 1 packetin filter was deleted ( match = [wildcards = 0xc(dl_src|dl_dst), in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0xffff, 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
80
  """
78
81
 
82
+ @wip
79
83
  Scenario: delete filter
80
84
  When I try trema run "./objects/examples/dumper/dumper" with following configuration (backgrounded):
81
85
  """
@@ -0,0 +1,29 @@
1
+ Feature: "Patch Panel" sample application
2
+
3
+ In order to learn how to implement software patch panel
4
+ As a developer using Trema
5
+ I want to execute "Patch Panel" sample application
6
+
7
+ @slow_process
8
+ Scenario: Run "Patch Panel" Ruby example
9
+ Given a file named "patch-panel.conf" with:
10
+ """
11
+ 1 2
12
+ """
13
+ And a file named "network.conf" with:
14
+ """
15
+ vswitch("patch") { datapath_id "0xabc" }
16
+
17
+ vhost("host1") { ip "192.168.0.1" }
18
+ vhost("host2") { ip "192.168.0.2" }
19
+
20
+ link "patch", "host1"
21
+ link "patch", "host2"
22
+ """
23
+ And I run `trema run ../../src/examples/patch_panel/patch-panel.rb -c network.conf -d`
24
+ And wait until "PatchPanel" is up
25
+ When I send 1 packet from host1 to host2
26
+ And I run `trema show_stats host1 --tx`
27
+ And I run `trema show_stats host2 --rx`
28
+ Then the output from "trema show_stats host1 --tx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
29
+ And the output from "trema show_stats host2 --rx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
@@ -1,49 +1,52 @@
1
- Feature: Control one openflow switch with repeater_hub controller
1
+ Feature: "Repeater Hub" sample application
2
2
 
3
- As a Trema user
4
- I want to control one openflow switch using repeater_hub controller
5
- So that I can flood incoming packets to every other port
3
+ In order to learn how to flood incoming packets to every other port
4
+ As a developer using Trema
5
+ I want to execute "Repeater Hub" sample application
6
6
 
7
-
8
- Scenario: Run repeater hub
9
- When I try trema run "./objects/examples/repeater_hub/repeater_hub" with following configuration (backgrounded):
7
+ Background:
8
+ Given a file named "repeater_hub.conf" with:
10
9
  """
11
- vswitch("repeater_hub") { datapath_id "0xabc" }
12
-
13
- vhost("host1") { promisc "On" }
14
- vhost("host2") { promisc "On" }
15
- vhost("host3") { promisc "On" }
10
+ vswitch("repeater_hub") { datapath_id 0xabc }
11
+
12
+ vhost("host1") {
13
+ ip "192.168.0.1"
14
+ promisc "On"
15
+ }
16
+ vhost("host2") {
17
+ ip "192.168.0.2"
18
+ promisc "On"
19
+ }
20
+ vhost("host3") {
21
+ ip "192.168.0.3"
22
+ promisc "On"
23
+ }
16
24
 
17
25
  link "repeater_hub", "host1"
18
26
  link "repeater_hub", "host2"
19
27
  link "repeater_hub", "host3"
20
28
  """
21
- And wait until "repeater_hub" is up
22
- And I send 1 packet from host1 to host2
23
- And I try to run "./trema show_stats host1 --tx" (log = "host1.repeater_hub.log")
24
- And I try to run "./trema show_stats host2 --rx" (log = "host2.repeater_hub.log")
25
- And I try to run "./trema show_stats host3 --rx" (log = "host3.repeater_hub.log")
26
- Then the content of "host1.repeater_hub.log" and "host2.repeater_hub.log" should be identical
27
- And the content of "host1.repeater_hub.log" and "host3.repeater_hub.log" should be identical
28
-
29
-
30
- Scenario: Run repeater hub (Ruby)
31
- When I try trema run "./src/examples/repeater_hub/repeater-hub.rb" with following configuration (backgrounded):
32
- """
33
- vswitch("repeater_hub") { datapath_id "0xabc" }
34
29
 
35
- vhost("host1") { promisc "On" }
36
- vhost("host2") { promisc "On" }
37
- vhost("host3") { promisc "On" }
38
-
39
- link "repeater_hub", "host1"
40
- link "repeater_hub", "host2"
41
- link "repeater_hub", "host3"
42
- """
43
- And wait until "RepeaterHub" is up
44
- And I send 1 packet from host1 to host2
45
- And I try to run "./trema show_stats host1 --tx" (log = "host1.repeater-hub.rb.log")
46
- And I try to run "./trema show_stats host2 --rx" (log = "host2.repeater-hub.rb.log")
47
- And I try to run "./trema show_stats host3 --rx" (log = "host3.repeater-hub.rb.log")
48
- Then the content of "host1.repeater-hub.rb.log" and "host2.repeater-hub.rb.log" should be identical
49
- And the content of "host1.repeater-hub.rb.log" and "host3.repeater-hub.rb.log" should be identical
30
+ @slow_process
31
+ Scenario: Run "Repeater Hub" C example
32
+ Given I run `trema run ../../objects/examples/repeater_hub/repeater_hub -c repeater_hub.conf -d`
33
+ And wait until "repeater_hub" is up
34
+ When I send 1 packet from host1 to host2
35
+ And I run `trema show_stats host1 --tx`
36
+ And I run `trema show_stats host2 --rx`
37
+ And I run `trema show_stats host3 --rx`
38
+ Then the output from "trema show_stats host1 --tx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
39
+ And the output from "trema show_stats host2 --rx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
40
+ And the output from "trema show_stats host3 --rx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
41
+
42
+ @slow_process
43
+ Scenario: Run "Repeater Hub" Ruby example
44
+ Given I run `trema run ../../src/examples/repeater_hub/repeater-hub.rb -c repeater_hub.conf -d`
45
+ And wait until "RepeaterHub" is up
46
+ When I send 1 packet from host1 to host2
47
+ And I run `trema show_stats host1 --tx`
48
+ And I run `trema show_stats host2 --rx`
49
+ And I run `trema show_stats host3 --rx`
50
+ Then the output from "trema show_stats host1 --tx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
51
+ And the output from "trema show_stats host2 --rx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
52
+ And the output from "trema show_stats host3 --rx" should contain "192.168.0.2,1,192.168.0.1,1,1,50"
@@ -0,0 +1,51 @@
1
+ Feature: "Switch Info" sample application
2
+
3
+ In order to learn how to acquire switch spec
4
+ As a developer using Trema
5
+ I want to execute "Switch Info" sample application
6
+
7
+ @slow_process
8
+ Scenario: Run "Switch Info" C example
9
+ Given a file named "switch_info.conf" with:
10
+ """
11
+ vswitch { datapath_id 0xabc }
12
+ """
13
+ And I run `trema run ../../objects/examples/switch_info/switch_info -c switch_info.conf -d`
14
+ And *** sleep 2 ***
15
+ Then the file "../../tmp/log/switch_info.log" should contain "datapath_id: 0xabc"
16
+ And the file "../../tmp/log/switch_info.log" should contain "#ports: 1"
17
+
18
+ @slow_process
19
+ Scenario: Run "Switch Info" C example with two switches
20
+ Given a file named "switch_info.conf" with:
21
+ """
22
+ vswitch { datapath_id 0xabc }
23
+ vswitch { datapath_id 0xdef }
24
+ link "0xabc", "0xdef"
25
+ """
26
+ And I run `trema run ../../objects/examples/switch_info/switch_info -c switch_info.conf -d`
27
+ And *** sleep 2 ***
28
+ Then the file "../../tmp/log/switch_info.log" should contain "#ports: 2"
29
+
30
+ @slow_process
31
+ Scenario: Run "Switch Info" Ruby example
32
+ Given a file named "switch_info.conf" with:
33
+ """
34
+ vswitch { datapath_id 0xabc }
35
+ """
36
+ And I run `trema run ../../src/examples/switch_info/switch-info.rb -c switch_info.conf -d`
37
+ And *** sleep 2 ***
38
+ Then the file "../../tmp/log/SwitchInfo.log" should contain "datapath_id: 0xabc"
39
+ And the file "../../tmp/log/SwitchInfo.log" should contain "#ports: 1"
40
+
41
+ @slow_process
42
+ Scenario: Run "Switch Info" Ruby example with two switches
43
+ Given a file named "switch_info.conf" with:
44
+ """
45
+ vswitch { datapath_id 0xabc }
46
+ vswitch { datapath_id 0xdef }
47
+ link "0xabc", "0xdef"
48
+ """
49
+ And I run `trema run ../../src/examples/switch_info/switch-info.rb -c switch_info.conf -d`
50
+ And *** sleep 2 ***
51
+ Then the file "../../tmp/log/SwitchInfo.log" should contain "#ports: 2"