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
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
  #ifndef ECHO_REPLY_H
20
- #define ECHO_REPLY_H
20
+ #define ECHO_REPLY_H
21
21
 
22
22
 
23
23
  #include "ruby.h"
@@ -29,7 +29,7 @@ extern VALUE cEchoReply;
29
29
  void Init_echo_reply( void );
30
30
 
31
31
 
32
- #endif // ECHO_REPLY_H
32
+ #endif // ECHO_REPLY_H
33
33
 
34
34
 
35
35
  /*
@@ -17,8 +17,6 @@
17
17
 
18
18
 
19
19
  #include "echo.h"
20
- #include "ruby.h"
21
- #include "trema.h"
22
20
  #include "trema-ruby-utils.h"
23
21
 
24
22
 
@@ -46,7 +44,7 @@ echo_request_alloc( VALUE klass ) {
46
44
  * @example
47
45
  * EchoRequest.new( 123 )
48
46
  * @param [Integer] transaction_id
49
- * An unsigned 32bit integer number associated with this message.
47
+ * An unsigned 32-bit integer number associated with this message.
50
48
  *
51
49
  * @overload initialize(options)
52
50
  * @example
@@ -56,9 +54,9 @@ echo_request_alloc( VALUE klass ) {
56
54
  * )
57
55
  * @param [Hash] options
58
56
  * the options to create a message with.
59
- * @option options [Number] :xid
57
+ * @option options [Number] :xid an alias to transaction_id.
60
58
  * @option options [Number] :transaction_id
61
- * An unsigned 32bit integer number associated with this message.
59
+ * An unsigned 32-bit integer number associated with this message.
62
60
  * If not specified, an auto-generated value is set.
63
61
  * @option options [String] :user_data
64
62
  * the user data field specified as a String may be a message timestamp to check latency,
@@ -60,13 +60,13 @@ module Trema
60
60
  if @port_number.nil?
61
61
  raise ArgumentError, "Port number is a mandatory option"
62
62
  end
63
- if not @port_number.unsigned_16bit?
63
+ unless @port_number.unsigned_16bit?
64
64
  raise ArgumentError, "Port number must be an unsigned 16-bit integer"
65
65
  end
66
66
  if @queue_id.nil?
67
67
  raise ArgumentError, "Queue ID is a mandatory option"
68
68
  end
69
- if not @queue_id.unsigned_32bit?
69
+ unless @queue_id.unsigned_32bit?
70
70
  raise ArgumentError, "Queue ID must be an unsigned 32-bit integer"
71
71
  end
72
72
  else
data/ruby/trema/error.c CHANGED
@@ -234,9 +234,9 @@ Init_error() {
234
234
  rb_define_const( mTrema, "OFPPMFC_BAD_HW_ADDR", INT2NUM( OFPPMFC_BAD_HW_ADDR ) );
235
235
 
236
236
  rb_define_const( mTrema, "OFPET_QUEUE_OP_FAILED", INT2NUM( OFPET_QUEUE_OP_FAILED ) );
237
- rb_define_const( mTrema, "OFPQOFC_BAD_PORT", INT2NUM(OFPQOFC_BAD_PORT));
238
- rb_define_const( mTrema, "OFPQOFC_BAD_QUEUE", INT2NUM(OFPQOFC_BAD_QUEUE));
239
- rb_define_const( mTrema, "OFPQOFC_EPERM", INT2NUM(OFPQOFC_EPERM));
237
+ rb_define_const( mTrema, "OFPQOFC_BAD_PORT", INT2NUM( OFPQOFC_BAD_PORT ) );
238
+ rb_define_const( mTrema, "OFPQOFC_BAD_QUEUE", INT2NUM( OFPQOFC_BAD_QUEUE ) );
239
+ rb_define_const( mTrema, "OFPQOFC_EPERM", INT2NUM( OFPQOFC_EPERM ) );
240
240
 
241
241
  cError = rb_define_class_under( mTrema, "Error", rb_cObject );
242
242
 
@@ -24,13 +24,21 @@ require "trema/path"
24
24
 
25
25
 
26
26
  #
27
- # Holds the list of executalbes found in {Trema.objects} directory.
27
+ # Holds a list of executables found in Trema.objects directory.
28
28
  #
29
29
  class Trema::Executables
30
30
  class << self
31
+ #
32
+ # Cycles through a list of file names testing if there are executable or
33
+ # not.
34
+ #
35
+ # @return [FalseClass, Array]
36
+ # false if a file name is not an executable program or a list of all
37
+ # file names that are.
38
+ #
31
39
  def compiled?
32
40
  @list.each do | each |
33
- return false if not FileTest.executable?( __send__ each )
41
+ return false unless FileTest.executable?( __send__ each )
34
42
  end
35
43
  end
36
44
 
@@ -40,12 +48,28 @@ class Trema::Executables
40
48
  ############################################################################
41
49
 
42
50
 
51
+ #
52
+ # Adds the name to a list.
53
+ #
43
54
  def add name
44
55
  @list ||= []
45
56
  @list << name
46
57
  end
47
58
 
48
59
 
60
+ #
61
+ # Defines a class method that returns the full path name of an executable
62
+ # program constructed from its relative path. It also adds the
63
+ # class method name to an array.
64
+ #
65
+ # @example
66
+ # path "openvswitch/bin/ovs-ofctl"
67
+ #
68
+ # @param [String] path
69
+ # the relative path to an executable program.
70
+ #
71
+ # @return [Array] a list of a class method to access each executable program.
72
+ #
49
73
  def path path
50
74
  name = File.basename( path ).underscore
51
75
  define_class_method( name ) do
@@ -16,9 +16,7 @@
16
16
  */
17
17
 
18
18
 
19
- #include "ruby.h"
20
19
  #include "trema-ruby-utils.h"
21
- #include "trema.h"
22
20
 
23
21
 
24
22
  extern VALUE mTrema;
@@ -43,7 +41,7 @@ features_request_alloc( VALUE klass ) {
43
41
  * @example
44
42
  * FeaturesRequest.new( 123 )
45
43
  * @param [Integer] transaction_id
46
- * An unsigned 32bit integer number associated with this message.
44
+ * An unsigned 32-bit integer number associated with this message.
47
45
  *
48
46
  * @overload initialize(options)
49
47
  * @example
@@ -51,9 +49,9 @@ features_request_alloc( VALUE klass ) {
51
49
  * FeaturesRequest.new( :transaction_id => 123 )
52
50
  * @param [Hash] options
53
51
  * the options to create a message with.
54
- * @option options [Number] :xid
52
+ * @option options [Number] :xid an alias to transaction_id.
55
53
  * @option options [Number] :transaction_id
56
- * An unsigned 32bit integer number associated with this message.
54
+ * An unsigned 32-bit integer number associated with this message.
57
55
  * If not specified, an auto-generated value is set.
58
56
  *
59
57
  * @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
@@ -34,8 +34,8 @@ VALUE cFlowRemoved;
34
34
  * Returns an object that encapsulates the +OPPT_FLOW_REMOVED+ OpenFlow message.
35
35
  *
36
36
  * @overload initialize(options={})
37
- * @example
38
- * FlowRemoved.new(
37
+ * @example
38
+ * FlowRemoved.new(
39
39
  * :datapath_id => 0xabc,
40
40
  * :transaction_id => 0,
41
41
  * :match => Match,
@@ -59,15 +59,15 @@ VALUE cFlowRemoved;
59
59
  * unsolicited message transaction_id is zero.
60
60
  *
61
61
  * @option options [Symbol] :match
62
- * a {Match} object describing the flow fields copied from the corresponding
62
+ * a {Match} object describing the flow fields copied from the corresponding
63
63
  * flow setup message.
64
64
  *
65
65
  * @option options [Symbol] :cookie
66
- * an opaque handle copied from the corresponding
66
+ * an opaque handle copied from the corresponding
67
67
  * flow setup message.
68
68
  *
69
69
  * @option options [Symbol] :priority
70
- * the priority level of the flow copied from the corresponding
70
+ * the priority level of the flow copied from the corresponding
71
71
  * flow setup message.
72
72
  *
73
73
  * @option options [Symbol] :reason
@@ -80,7 +80,7 @@ VALUE cFlowRemoved;
80
80
  * the number of nanoseconds the flow was active.
81
81
  *
82
82
  * @option options [Symbol] :idle_timeout
83
- * time elapsed in seconds before the flow is removed, copied from the
83
+ * time elapsed in seconds before the flow is removed, copied from the
84
84
  * corresponding flow setup message.
85
85
  *
86
86
  * @option options [Symbol] :packet_count
@@ -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
@@ -27,7 +25,7 @@ module Trema
27
25
  %w(priority idle_timeout hard_timeout cookie packet_count byte_count actions)
28
26
  FIELDS.each { |field| attr_reader field.intern }
29
27
 
30
-
28
+
31
29
  # Flow counters for one or more matched flows.
32
30
  # A user would not explicitly instantiate a {FlowStatsReply} object but
33
31
  # would be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_FLOW)+
@@ -35,10 +33,10 @@ module Trema
35
33
  #
36
34
  # @overload initialize(options={})
37
35
  #
38
- # @example
36
+ # @example
39
37
  # FlowStatsReply.new(
40
38
  # :length => 96,
41
- # :table_id => 0,
39
+ # :table_id => 0,
42
40
  # :match => Match.new
43
41
  # :duration_sec => 10,
44
42
  # :duration_nsec => 106000000,
@@ -77,7 +75,7 @@ module Trema
77
75
  # no deletion.
78
76
  #
79
77
  # @option options [Number] :hard_timeout
80
- # a fixed time interval before the flow is deleted. Zero means no
78
+ # a fixed time interval before the flow is deleted. Zero means no
81
79
  # deletion.
82
80
  #
83
81
  # @option options [Number] :cookie
@@ -93,9 +91,9 @@ module Trema
93
91
  # an array of action objects for the flow.
94
92
  #
95
93
  # @return [FlowStatsReply]
96
- # an object that encapsulates the OFPST_STATS_REPLY(OPPST_FLOW) OpenFlow message.
94
+ # an object that encapsulates the OFPST_STATS_REPLY(OFPST_FLOW) OpenFlow message.
97
95
  #
98
- def initialize options
96
+ def initialize options
99
97
  super FIELDS, options
100
98
  end
101
99
  end
data/ruby/trema/flow.rb CHANGED
@@ -20,9 +20,19 @@
20
20
 
21
21
  module Trema
22
22
  class Flow
23
- attr_reader :dl_type
24
23
 
25
24
 
25
+ #
26
+ # Parses a text line of OpenFlow switch's dump-flows command into a Flow
27
+ # object's dynamic created attributes. A line consists of multiple
28
+ # comma separated key=value fields. A key field may have multiple values
29
+ # specified as key=value#1,value#2,..value#n.
30
+ #
31
+ # @param [String] line the text line to parse.
32
+ #
33
+ # @return [self] the object that holds the parsed key=value fields
34
+ # as attributes.
35
+ #
26
36
  def self.parse line
27
37
  flow = self.new
28
38
  # to simplify parsing
@@ -41,6 +51,7 @@ module Trema
41
51
  end
42
52
 
43
53
 
54
+ # @return [Boolean] whether a flow is a user registered flow or not.
44
55
  def users_flow?
45
56
  not ( ( @actions == "drop" and @priority == 0 ) or
46
57
  @actions == "CONTROLLER:65535" )
@@ -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
@@ -18,8 +16,7 @@
18
16
  */
19
17
 
20
18
 
21
- #include "trema.h"
22
- #include "ruby.h"
19
+ #include "trema-ruby-utils.h"
23
20
 
24
21
 
25
22
  extern VALUE mTrema;
@@ -34,44 +31,77 @@ get_config_request_alloc( VALUE klass ) {
34
31
 
35
32
 
36
33
  /*
37
- * Creates a {GetConfigRequest} instance to query configuration parameters
34
+ * Creates a {GetConfigRequest} instance to query configuration parameters
38
35
  * from the switch.
39
36
  *
40
- * @overload initialize(options={})
37
+ * @overload initialize()
41
38
  * @example
42
39
  * GetConfigRequest.new
43
- * GetConfigRequest.new( :transaction_id => 123 )
44
40
  *
41
+ * @overload initialize(transaction_id)
42
+ * @example
43
+ * GetConfigRequest.new( 123 )
44
+ * @param [Integer] transaction_id
45
+ * An unsigned 32-bit integer number associated with this message.
46
+ *
47
+ * @overload initialize(options)
48
+ * @example
49
+ * GetConfigRequest.new( :xid => 123 )
50
+ * GetConfigRequest.new( :transaction_id => 123 )
45
51
  * @param [Hash] options
46
52
  * the options to create a message with.
47
- *
53
+ * @option options [Number] :xid an alias to transaction_id.
48
54
  * @option options [Number] :transaction_id
49
- * An unsigned 32-bit integer auto-generated if not supplied.
50
- *
51
- * @raise [ArgumentError] if transaction id is not an unsigned 32-bit integer.
52
- * @raise [TypeError] if options is not a hash.
55
+ * An unsigned 32-bit integer number associated with this message.
56
+ * If not specified, an auto-generated value is set.
53
57
  *
54
- * @return [GetConfigRequest]
58
+ * @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
59
+ * @raise [TypeError] if argument is not a Integer or a Hash.
60
+ * @return [GetConfigRequest]
55
61
  * an object that encapsulates the +OFPT_GET_CONFIG+ OpenFlow message.
56
62
  */
57
63
  static VALUE
58
64
  get_config_request_init( int argc, VALUE *argv, VALUE self ) {
59
65
  buffer *get_config_request;
60
66
  Data_Get_Struct( self, buffer, get_config_request );
61
- uint32_t xid = get_transaction_id( );
62
- VALUE options;
63
-
64
- if ( rb_scan_args( argc, argv, "01", &options ) == 1 ) {
65
- Check_Type( options, T_HASH );
66
- VALUE xid_ruby;
67
- if ( ( xid_ruby = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) ) ) != Qnil ) {
68
- if ( rb_funcall( xid_ruby, rb_intern( "unsigned_32bit?" ), 0 ) == Qfalse ) {
69
- rb_raise( rb_eArgError, "Transaction ID must be an unsigned 32-bit integer" );
67
+ VALUE options = Qnil;
68
+
69
+
70
+ if ( rb_scan_args( argc, argv, "01", &options ) == 0 ) {
71
+ set_xid( get_config_request, get_transaction_id() );
72
+ }
73
+ else {
74
+ if ( options == Qnil ) {
75
+ set_xid( get_config_request, get_transaction_id() );
76
+ }
77
+ else if ( rb_obj_is_kind_of( options, rb_cInteger ) == Qtrue ) {
78
+ validate_xid( options );
79
+ set_xid( get_config_request, ( uint32_t ) NUM2UINT( options ) );
80
+ }
81
+ else {
82
+ Check_Type( options, T_HASH );
83
+ VALUE tmp = Qnil;
84
+ VALUE xid = Qnil;
85
+
86
+ tmp = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) );
87
+ if ( tmp != Qnil ) {
88
+ xid = tmp;
89
+ }
90
+ tmp = rb_hash_aref( options, ID2SYM( rb_intern( "xid" ) ) );
91
+ if ( tmp != Qnil ) {
92
+ xid = tmp;
93
+ }
94
+
95
+ if ( xid != Qnil ) {
96
+ validate_xid( xid );
97
+ set_xid( get_config_request, ( uint32_t ) NUM2UINT( xid ) );
98
+ }
99
+ else {
100
+ set_xid( get_config_request, get_transaction_id() );
70
101
  }
71
- xid = ( uint32_t ) NUM2UINT( xid_ruby );
72
102
  }
73
103
  }
74
- ( ( struct ofp_header * ) ( get_config_request->data ) )->xid = htonl( xid );
104
+
75
105
  return self;
76
106
  }
77
107
 
@@ -83,10 +113,7 @@ get_config_request_init( int argc, VALUE *argv, VALUE self ) {
83
113
  */
84
114
  static VALUE
85
115
  get_config_request_transaction_id( VALUE self ) {
86
- buffer *get_config_request;
87
- Data_Get_Struct( self, buffer, get_config_request );
88
- uint32_t xid = ntohl( ( ( struct ofp_header * ) ( get_config_request->data ) )->xid );
89
- return UINT2NUM( xid );
116
+ return get_xid( self );
90
117
  }
91
118
 
92
119
 
data/ruby/trema/hello.c CHANGED
@@ -16,8 +16,6 @@
16
16
  */
17
17
 
18
18
 
19
- #include "ruby.h"
20
- #include "trema.h"
21
19
  #include "trema-ruby-utils.h"
22
20
 
23
21
 
@@ -43,7 +41,7 @@ hello_alloc( VALUE klass ) {
43
41
  * @example
44
42
  * Hello.new( 123 )
45
43
  * @param [Integer] transaction_id
46
- * An unsigned 32bit integer number associated with this message.
44
+ * An unsigned 32-bit integer number associated with this message.
47
45
  *
48
46
  * @overload initialize(options)
49
47
  * @example
@@ -51,9 +49,9 @@ hello_alloc( VALUE klass ) {
51
49
  * Hello.new( :transaction_id => 123 )
52
50
  * @param [Hash] options
53
51
  * the options to create a message with.
54
- * @option options [Number] :xid
52
+ * @option options [Number] :xid an alias to transaction_id.
55
53
  * @option options [Number] :transaction_id
56
- * An unsigned 32bit integer number associated with this message.
54
+ * An unsigned 32-bit integer number associated with this message.
57
55
  * If not specified, an auto-generated value is set.
58
56
  *
59
57
  * @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
data/ruby/trema/host.rb CHANGED
@@ -206,6 +206,14 @@ module Trema
206
206
  end
207
207
 
208
208
 
209
+ #
210
+ # Check stats type and delegate processing.
211
+ #
212
+ # @raise [RuntimeError] if stats type is invalid.
213
+ #
214
+ # @return [Stat]
215
+ # the object that represents the results of a particular stats type.
216
+ #
209
217
  def stats type
210
218
  case type
211
219
  when :tx