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
data/ruby/trema/switch.c CHANGED
@@ -83,7 +83,7 @@ handle_flow_mod(
83
83
  uint16_t flags,
84
84
  const openflow_actions *actions,
85
85
  void *rbswitch
86
- ){
86
+ ) {
87
87
  UNUSED( match );
88
88
  UNUSED( cookie );
89
89
  UNUSED( priority );
@@ -35,7 +35,7 @@ module Trema
35
35
  #
36
36
  # @overload initialize(options={})
37
37
  #
38
- # @example
38
+ # @example
39
39
  # TableStatsReply.new(
40
40
  # :table_id => 0,
41
41
  # :name => "classifier",
data/ruby/trema/timers.rb CHANGED
@@ -28,8 +28,8 @@ module Timers
28
28
  module TimerMethods
29
29
  lambda {
30
30
  timer_event_handlers = {}
31
-
32
-
31
+
32
+
33
33
  Kernel.send :define_method, :add_timer do | handler, interval, event_type |
34
34
  timer_event_handlers[ handler ] = {
35
35
  :interval => interval,
@@ -37,8 +37,8 @@ module Timers
37
37
  :event_type => event_type
38
38
  }
39
39
  end
40
-
41
-
40
+
41
+
42
42
  Kernel.send :define_method, :fire_event do
43
43
  timer_event_handlers.each do | handler, data |
44
44
  data[ :rest ] -= 1
@@ -51,38 +51,38 @@ module Timers
51
51
  data[ :rest ] <= 0 && data[ :event_type ] == :oneshot
52
52
  end
53
53
  end
54
-
55
-
54
+
55
+
56
56
  Kernel.send :define_method, :delete_timer do | handler |
57
57
  timer_event_handlers.delete
58
58
  end
59
59
  }.call
60
60
 
61
-
61
+
62
62
  def add_timer_event handler, interval, event_type
63
63
  add_timer handler, interval, event_type
64
64
  end
65
65
  alias_method :timer_event, :add_timer_event
66
66
 
67
-
67
+
68
68
  def delete_timer_event handler
69
- delete_timer handler
69
+ delete_timer handler
70
70
  end
71
71
 
72
-
72
+
73
73
  # shortcut methods
74
74
  def add_periodic_timer_event handler, interval
75
75
  add_timer_event handler, interval, :periodic
76
76
  end
77
77
  alias_method :periodic_timer_event, :add_periodic_timer_event
78
78
 
79
-
79
+
80
80
  def add_oneshot_timer_event handler, interval
81
81
  add_timer_event handler, interval, :oneshot
82
82
  end
83
83
  alias_method :oneshot_timer_event, :add_oneshot_timer_event
84
-
85
-
84
+
85
+
86
86
  def handle_timer_event
87
87
  fire_event
88
88
  end
data/ruby/trema/trema.c CHANGED
@@ -58,7 +58,7 @@ Init_trema() {
58
58
  rb_define_const( mTrema, "OFPC_FLOW_STATS", INT2NUM( OFPC_FLOW_STATS ) );
59
59
  rb_define_const( mTrema, "OFPC_TABLE_STATS", INT2NUM( OFPC_TABLE_STATS ) );
60
60
  rb_define_const( mTrema, "OFPC_PORT_STATS", INT2NUM( OFPC_PORT_STATS ) );
61
- rb_define_const( mTrema, "OFPC_STP", INT2NUM( OFPC_STP) );
61
+ rb_define_const( mTrema, "OFPC_STP", INT2NUM( OFPC_STP ) );
62
62
  rb_define_const( mTrema, "OFPC_RESERVED", INT2NUM( OFPC_RESERVED ) );
63
63
  rb_define_const( mTrema, "OFPC_IP_REASM", INT2NUM( OFPC_IP_REASM ) );
64
64
  rb_define_const( mTrema, "OFPC_QUEUE_STATS", INT2NUM( OFPC_QUEUE_STATS ) );
@@ -68,8 +68,8 @@ Init_trema() {
68
68
  rb_define_const( mTrema, "OFPAT_SET_VLAN_VID", INT2NUM( OFPAT_SET_VLAN_VID ) );
69
69
  rb_define_const( mTrema, "OFPAT_SET_VLAN_PCP", INT2NUM( OFPAT_SET_VLAN_PCP ) );
70
70
  rb_define_const( mTrema, "OFPAT_STRIP_VLAN", INT2NUM( OFPAT_STRIP_VLAN ) );
71
- rb_define_const( mTrema, "OFPAT_SET_DL_SRC", INT2NUM( OFPAT_SET_DL_SRC) );
72
- rb_define_const( mTrema, "OFPAT_SET_DL_DST", INT2NUM( OFPAT_SET_DL_DST) );
71
+ rb_define_const( mTrema, "OFPAT_SET_DL_SRC", INT2NUM( OFPAT_SET_DL_SRC ) );
72
+ rb_define_const( mTrema, "OFPAT_SET_DL_DST", INT2NUM( OFPAT_SET_DL_DST ) );
73
73
  rb_define_const( mTrema, "OFPAT_SET_NW_SRC", INT2NUM( OFPAT_SET_NW_SRC ) );
74
74
  rb_define_const( mTrema, "OFPAT_SET_NW_DST", INT2NUM( OFPAT_SET_NW_DST ) );
75
75
  rb_define_const( mTrema, "OFPAT_SET_NW_TOS", INT2NUM( OFPAT_SET_NW_TOS ) );
@@ -1,8 +1,6 @@
1
1
  #
2
2
  # The controller class of tremashark.
3
3
  #
4
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
5
- #
6
4
  # Copyright (C) 2008-2012 NEC Corporation
7
5
  #
8
6
  # This program is free software; you can redistribute it and/or modify
@@ -24,7 +22,16 @@ require "trema/executables"
24
22
 
25
23
 
26
24
  module Trema
25
+ #
26
+ # Represents an abstract instance to start the tremashark debugging program.
27
+ #
27
28
  class Tremashark
29
+ #
30
+ # Runs the tremashark program as a daemon for debugging.
31
+ #
32
+ # @return [Boolean, Nil]
33
+ # a true or false tremashark exit status code or nil if failed to run.
34
+ #
28
35
  def run
29
36
  sh "#{ Executables.tremashark } --daemonize"
30
37
  end
data/ruby/trema/util.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  #
2
2
  # Common utility functions.
3
3
  #
4
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
5
- #
6
4
  # Copyright (C) 2008-2012 NEC Corporation
7
5
  #
8
6
  # This program is free software; you can redistribute it and/or modify
@@ -27,7 +25,16 @@ require "trema/process"
27
25
 
28
26
 
29
27
  module Trema::Util
30
- def sanity_check
28
+ def sh cmd
29
+ ENV[ "TREMA_HOME" ] = Trema.home
30
+ puts cmd if $verbose
31
+ unless system( cmd )
32
+ raise "Command '#{ cmd }' failed!"
33
+ end
34
+ end
35
+
36
+
37
+ def assert_trema_is_built
31
38
  unless Trema::Executables.compiled?
32
39
  $stderr.puts <<-EOF
33
40
  ERROR: Trema is not compiled yet!
@@ -40,15 +47,6 @@ EOF
40
47
  end
41
48
 
42
49
 
43
- def sh cmd
44
- ENV[ "TREMA_HOME" ] = Trema.home
45
- puts cmd if $verbose
46
- unless system( cmd )
47
- raise "Command '#{ cmd }' failed!"
48
- end
49
- end
50
-
51
-
52
50
  def cleanup session
53
51
  # [FIXME] Use session.switch_manager
54
52
  sm_pid = File.join( Trema.pid, "switch_manager.pid" )
@@ -67,17 +65,43 @@ EOF
67
65
  session.links.each do | name, link |
68
66
  link.delete!
69
67
  end
68
+ session.netnss.each do | name, netns |
69
+ netns.shutdown!
70
+ end
70
71
 
71
72
  Dir.glob( File.join Trema.pid, "*.pid" ).each do | each |
72
73
  Trema::Process.read( each ).kill!
73
74
  end
74
-
75
- FileUtils.rm_f Trema::DSL::Context::PATH
76
75
  end
77
76
 
78
77
 
79
78
  def cleanup_current_session
80
- cleanup Trema::DSL::Context.load_current
79
+ begin
80
+ cleanup Trema::DSL::Context.load_current
81
+ ensure
82
+ FileUtils.rm_f Trema::DSL::Context::PATH
83
+ end
84
+ end
85
+
86
+
87
+ def find_app_by_name name
88
+ # [FIXME] Trema apps does not appear in context.apps. why?
89
+ pid_file = File.join( Trema.pid, "#{ name }.pid" )
90
+ if FileTest.exist?( pid_file )
91
+ Trema::Process.read( pid_file )
92
+ else
93
+ nil
94
+ end
95
+ end
96
+
97
+
98
+ def find_switch_by_name name
99
+ Trema::DSL::Context.load_current.switches[ name ]
100
+ end
101
+
102
+
103
+ def find_host_by_name name
104
+ Trema::DSL::Context.load_current.hosts[ name ]
81
105
  end
82
106
  end
83
107
 
@@ -25,7 +25,12 @@ module Trema
25
25
  # An action to set vendor specific extensions.
26
26
  #
27
27
  class VendorAction < Action
28
+ #
29
+ # @return [Array<Fixnum>] the value of attribute {#body} that represents
30
+ # binary data as an array of bytes.
31
+ #
28
32
  attr_reader :body
33
+ # @return [Integer] the value of attribute {#vendor_id}
29
34
  attr_reader :vendor_id
30
35
 
31
36
 
@@ -46,16 +51,16 @@ module Trema
46
51
  # @raise [TypeError] if body is not an Array.
47
52
  #
48
53
  def initialize vendor_id, body = nil
49
- if not vendor_id.is_a?( Integer )
54
+ unless vendor_id.is_a?( Integer )
50
55
  raise TypeError, "Vendor ID must be an unsigned 32-bit integer"
51
56
  end
52
- if not vendor_id.unsigned_32bit?
57
+ unless vendor_id.unsigned_32bit?
53
58
  raise ArgumentError, "Vendor ID must be an unsigned 32-bit integer"
54
59
  end
55
60
  if ( not body.nil? ) and ( not body.is_a?( Array ) )
56
61
  raise TypeError, "Body must be an Array"
57
62
  end
58
-
63
+
59
64
  @vendor_id = vendor_id
60
65
  @body = body
61
66
  end
@@ -1,6 +1,4 @@
1
1
  #
2
- # Author: Nick Karanatsios <nickkaranatsios@gmail.com>
3
- #
4
2
  # Copyright (C) 2008-2012 NEC Corporation
5
3
  #
6
4
  # This program is free software; you can redistribute it and/or modify
@@ -26,7 +24,7 @@ module Trema
26
24
  FIELDS = %w(vendor_id)
27
25
  FIELDS.each { |field| attr_reader field.intern }
28
26
 
29
-
27
+
30
28
  # Vendor statistics reply.
31
29
  # A user would not explicitly instantiate a {VendorStatsReply} object but would
32
30
  # be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_VENDOR)+
@@ -34,7 +32,7 @@ module Trema
34
32
  #
35
33
  # @overload initialize(otions={})
36
34
  #
37
- # @example
35
+ # @example
38
36
  # VendorStatsReply.new(
39
37
  # :vendor_id => 123
40
38
  # )
@@ -45,8 +43,8 @@ module Trema
45
43
  # @option options [Number] :vendor_id
46
44
  # the specific vendor identifier.
47
45
  #
48
- # @return [VendorStatsReply]
49
- # an object that encapsulates the OFPST_STATS_REPLY(OPPST_VENDOR) OpenFlow message.
46
+ # @return [VendorStatsReply]
47
+ # an object that encapsulates the OFPST_STATS_REPLY(OFPST_VENDOR) OpenFlow message.
50
48
  #
51
49
  def initialize options
52
50
  super FIELDS, options
data/ruby/trema/vendor.c CHANGED
@@ -33,7 +33,7 @@ vendor_alloc( VALUE klass ) {
33
33
 
34
34
 
35
35
  /*
36
- * Creates a Vendor Reqeust message. This message can be used
36
+ * Creates a Vendor Request message. This message can be used
37
37
  * to facilitate sending of vendor-defined arbitrary data.
38
38
  *
39
39
  * @overload initialize
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
  module Trema
20
- VERSION = "0.2.5"
20
+ VERSION = "0.2.6"
21
21
  end
22
22
 
23
23
 
@@ -20,56 +20,66 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
20
  require "trema"
21
21
 
22
22
 
23
- describe BarrierRequest, ".new( OPTIONAL OPTION MISSING )" do
24
- it_should_behave_like "any Openflow message with default transaction ID"
23
+ shared_examples_for "barrier request message" do
24
+ class BarrierRequestController < Controller; end
25
+
26
+ it "should be logged to the switch's log", :sudo => true do
27
+ network {
28
+ vswitch( "barrier-request" ) { datapath_id 0xabc }
29
+ }.run( BarrierRequestController ) {
30
+ controller( "BarrierRequestController" ).send_message( 0xabc, subject )
31
+ IO.read( File.join( Trema.log, "openflowd.barrier-request.log" ) ).should include( "OFPT_BARRIER_REQUEST" )
32
+ }
33
+ end
25
34
  end
26
35
 
27
36
 
28
- describe BarrierRequest, ".new( VALID OPTION )" do
29
- subject { BarrierRequest.new :transaction_id => transaction_id }
30
- it_should_behave_like "any OpenFlow message with transaction_id option"
37
+ module Trema
38
+ describe BarrierRequest, ".new" do
39
+ it_should_behave_like "any Openflow message with default transaction ID"
40
+ it_should_behave_like "barrier request message"
41
+ end
42
+
43
+
44
+ describe BarrierRequest, ".new(nil)" do
45
+ subject { BarrierRequest.new( nil ) }
46
+ it_should_behave_like "any Openflow message with default transaction ID"
47
+ it_should_behave_like "barrier request message"
48
+ end
49
+
50
+
51
+ describe BarrierRequest, ".new(transaction_id)" do
52
+ subject { BarrierRequest.new( transaction_id ) }
53
+ it_should_behave_like "any Openflow message with transaction ID"
54
+ context "when sent to a switch" do
55
+ let( :transaction_id ) { 123 }
56
+ it_should_behave_like "barrier request message"
57
+ end
58
+ end
31
59
 
32
60
 
33
- context "when #barrier_request" do
34
- it "should #barrier_reply" do
35
- class BarrierController < Controller; end
36
- network {
37
- vswitch { datapath_id 0xabc }
38
- }.run( BarrierController ) {
39
- controller( "BarrierController" ).should_receive( :barrier_reply )
40
- controller( "BarrierController" ).send_message( 0xabc, BarrierRequest.new )
41
- sleep 2 # FIXME: wait to send_message
42
- }
61
+ describe BarrierRequest, ".new(:transaction_id => value)" do
62
+ subject { BarrierRequest.new( :transaction_id => transaction_id ) }
63
+ it_should_behave_like "any Openflow message with transaction ID"
64
+ context "when sent to a switch" do
65
+ let( :transaction_id ) { 123 }
66
+ it_should_behave_like "barrier request message"
43
67
  end
44
68
  end
45
- end
46
69
 
47
70
 
48
- describe BarrierRequest, ".new( OPTIONAL OPTION ) - transaction_id" do
49
- context "when #barrier_request" do
50
- it "should #barrier_reply with transaction_id == value" do
51
- class BarrierController < Controller; end
52
- network {
53
- vswitch { datapath_id 0xabc }
54
- }.run( BarrierController ) {
55
- controller( "BarrierController" ).should_receive( :barrier_reply ) do | datapath_id, message |
56
- datapath_id.should == 0xabc
57
- message.transaction_id.should == 1234
58
- end
59
- barrier_request = BarrierRequest.new( :transaction_id => 1234 )
60
- controller( "BarrierController" ).send_message( 0xabc, barrier_request )
61
- sleep 2 # FIXME: wait to send_message
62
- }
71
+ describe BarrierRequest, ".new(:xid => value)" do
72
+ subject { BarrierRequest.new( :xid => xid ) }
73
+ it_should_behave_like "any Openflow message with xid"
74
+ context "when sent to a switch" do
75
+ let( :xid ) { 123 }
76
+ it_should_behave_like "barrier request message"
63
77
  end
64
78
  end
65
- end
66
79
 
67
80
 
68
- describe BarrierRequest, ".new( INVALID_OPTION )" do
69
- it "should raise TypeError" do
70
- expect {
71
- BarrierRequest.new "INVALID_OPTION"
72
- }.to raise_error( TypeError )
81
+ describe BarrierRequest, '.new("INVALID OPTION")', :nosudo => true do
82
+ it { expect { BarrierRequest.new "INVALID OPTION" }.to raise_error( TypeError ) }
73
83
  end
74
84
  end
75
85
 
@@ -57,6 +57,7 @@ module Trema
57
57
  vswitch { datapath_id 0xabc }
58
58
  }.run( FlowModAddController ) {
59
59
  controller( "FlowModAddController" ).send_flow_mod_add( 0xabc )
60
+ sleep 6 # FIXME: wait to send_flow_mod_add
60
61
  vswitch( "0xabc" ).should have( 1 ).flows
61
62
  }
62
63
  end
@@ -1,6 +1,4 @@
1
1
  #
2
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
3
- #
4
2
  # Copyright (C) 2008-2012 NEC Corporation
5
3
  #
6
4
  # This program is free software; you can redistribute it and/or modify
@@ -47,7 +45,8 @@ module Trema
47
45
  :links => {},
48
46
  :hosts => {},
49
47
  :switches => {},
50
- :apps => {}
48
+ :apps => {},
49
+ :netnss => {}
51
50
  )
52
51
 
53
52
  Runner.new( context ).run
@@ -67,6 +66,7 @@ module Trema
67
66
  :hosts => {},
68
67
  :switches => {},
69
68
  :apps => {},
69
+ :netnss => {},
70
70
  :port => 6633
71
71
  )
72
72
 
@@ -96,6 +96,7 @@ module Trema
96
96
  :hosts => {},
97
97
  :switches => {},
98
98
  :apps => {},
99
+ :netnss => {},
99
100
  :port => 6633
100
101
  )
101
102
 
@@ -138,6 +139,7 @@ module Trema
138
139
  :hosts => { "host0" => host0, "host1" => host1, "host2" => host2 },
139
140
  :switches => {},
140
141
  :apps => {},
142
+ :netnss => {},
141
143
  :port => 6633
142
144
  )
143
145
 
@@ -164,6 +166,7 @@ module Trema
164
166
  :hosts => {},
165
167
  :switches => { "switch0" => switch0, "switch1" => switch1, "switch 2" => switch2 },
166
168
  :apps => {},
169
+ :netnss => {},
167
170
  :port => 6633
168
171
  )
169
172
 
@@ -194,6 +197,7 @@ module Trema
194
197
  :links => {},
195
198
  :hosts => {},
196
199
  :switches => {},
200
+ :netnss => {},
197
201
  :apps => apps
198
202
  )
199
203
 
@@ -224,6 +228,7 @@ module Trema
224
228
  :links => {},
225
229
  :hosts => {},
226
230
  :switches => {},
231
+ :netnss => {},
227
232
  :apps => apps
228
233
  )
229
234