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
@@ -1,8 +1,4 @@
1
1
  #
2
- # trema up command.
3
- #
4
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
5
- #
6
2
  # Copyright (C) 2008-2012 NEC Corporation
7
3
  #
8
4
  # This program is free software; you can redistribute it and/or modify
@@ -20,8 +16,6 @@
20
16
  #
21
17
 
22
18
 
23
- require "optparse"
24
- require "trema/dsl"
25
19
  require "trema/util"
26
20
 
27
21
 
@@ -30,29 +24,14 @@ module Trema
30
24
  include Trema::Util
31
25
 
32
26
 
33
- def up
34
- options = OptionParser.new
35
- options.banner = "Usage: trema up NAME [OPTIONS ...]"
36
-
37
- options.on( "-h", "--help" ) do
38
- puts options.to_s
39
- exit 0
40
- end
41
- options.on( "-v", "--verbose" ) do
42
- $verbose = true
43
- end
44
-
45
- options.parse! ARGV
46
-
47
- context = Trema::DSL::Context.load_current
48
-
49
- switch = context.switches[ ARGV[ 0 ] ]
27
+ def trema_up name
28
+ switch = find_switch_by_name( name )
50
29
  if switch
51
30
  switch.run
52
- return
31
+ else
32
+ # TODO: support vlink
33
+ raise "Unknown name: #{ name }"
53
34
  end
54
-
55
- raise "Unknown name: #{ ARGV[ 0 ] }"
56
35
  end
57
36
  end
58
37
  end
@@ -1,8 +1,4 @@
1
1
  #
2
- # trema version command.
3
- #
4
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
5
- #
6
2
  # Copyright (C) 2008-2012 NEC Corporation
7
3
  #
8
4
  # This program is free software; you can redistribute it and/or modify
@@ -25,7 +21,7 @@ require "trema/version"
25
21
 
26
22
  module Trema
27
23
  module Command
28
- def show_version
24
+ def trema_version
29
25
  puts "trema version #{ Trema::VERSION }"
30
26
  end
31
27
  end
@@ -57,11 +57,9 @@ handle_timer_event( void *self ) {
57
57
  * @example
58
58
  * send_message datapath_id, FeaturesRequest.new
59
59
  *
60
- *
61
- * @param [Number] datapath_id
60
+ * @param [Integer] datapath_id
62
61
  * the datapath to which a message is sent.
63
- *
64
- * @param [FeaturesRequest] message
62
+ * @param [Hello, EchoRequest, EchoReply, FeaturesRequest, SetConfig, GetConfigRequest, QueueGetConfigRequest, StatsRequest, BarrierRequest, PortMod, Vendor] message
65
63
  * the message to be sent.
66
64
  */
67
65
  static VALUE
@@ -94,12 +92,12 @@ append_action( openflow_actions *actions, VALUE action ) {
94
92
  }
95
93
  else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthDstAddr" ) ) == Qtrue ) {
96
94
  uint8_t dl_dst[ OFP_ETH_ALEN ];
97
- uint8_t *ptr = ( uint8_t* ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_dst );
95
+ uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_dst );
98
96
  append_action_set_dl_dst( actions, ptr );
99
97
  }
100
98
  else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthSrcAddr" ) ) == Qtrue ) {
101
99
  uint8_t dl_src[ OFP_ETH_ALEN ];
102
- uint8_t *ptr = ( uint8_t* ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_src );
100
+ uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_src );
103
101
  append_action_set_dl_src( actions, ptr );
104
102
  }
105
103
  else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpDstAddr" ) ) == Qtrue ) {
@@ -133,9 +131,9 @@ append_action( openflow_actions *actions, VALUE action ) {
133
131
  Check_Type( rbody, T_ARRAY );
134
132
  uint16_t length = ( uint16_t ) RARRAY_LEN( rbody );
135
133
  buffer *body = alloc_buffer_with_length( length );
136
- int i;
137
- for ( i = 0; i < length; i++ ) {
138
- ( ( uint8_t * ) body->data )[ i ] = ( uint8_t ) FIX2INT( RARRAY_PTR( rbody )[ i ] );
134
+ void *p = append_back_buffer( body, length );
135
+ for ( int i = 0; i < length; i++ ) {
136
+ ( ( uint8_t * ) p )[ i ] = ( uint8_t ) FIX2INT( RARRAY_PTR( rbody )[ i ] );
139
137
  }
140
138
  append_action_vendor( actions, ( uint32_t ) NUM2UINT( vendor_id ), body );
141
139
  free_buffer( body );
@@ -221,17 +219,17 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
221
219
 
222
220
  VALUE opt_idle_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "idle_timeout" ) ) );
223
221
  if ( opt_idle_timeout != Qnil ) {
224
- idle_timeout = ( uint16_t )NUM2UINT( opt_idle_timeout );
222
+ idle_timeout = ( uint16_t ) NUM2UINT( opt_idle_timeout );
225
223
  }
226
224
 
227
225
  VALUE opt_hard_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "hard_timeout" ) ) );
228
226
  if ( opt_hard_timeout != Qnil ) {
229
- hard_timeout = ( uint16_t )NUM2UINT( opt_hard_timeout );
227
+ hard_timeout = ( uint16_t ) NUM2UINT( opt_hard_timeout );
230
228
  }
231
229
 
232
230
  VALUE opt_priority = rb_hash_aref( options, ID2SYM( rb_intern( "priority" ) ) );
233
231
  if ( opt_priority != Qnil ) {
234
- priority = ( uint16_t )NUM2UINT( opt_priority );
232
+ priority = ( uint16_t ) NUM2UINT( opt_priority );
235
233
  }
236
234
 
237
235
  VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
@@ -241,7 +239,7 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
241
239
 
242
240
  VALUE opt_out_port = rb_hash_aref( options, ID2SYM( rb_intern( "out_port" ) ) );
243
241
  if ( opt_out_port != Qnil ) {
244
- out_port = ( uint16_t )NUM2UINT( opt_out_port );
242
+ out_port = ( uint16_t ) NUM2UINT( opt_out_port );
245
243
  }
246
244
 
247
245
  VALUE opt_send_flow_rem = rb_hash_aref( options, ID2SYM( rb_intern( "send_flow_rem" ) ) );
@@ -498,8 +496,8 @@ controller_send_packet_out( int argc, VALUE *argv, VALUE self ) {
498
496
 
499
497
  opt_zero_padding = rb_hash_aref( options, ID2SYM( rb_intern( "zero_padding" ) ) );
500
498
  if ( opt_zero_padding != Qnil ) {
501
- if ( TYPE( opt_zero_padding ) != T_TRUE && TYPE( opt_zero_padding ) != T_FALSE) {
502
- rb_raise(rb_eTypeError, ":zero_padding must be true or false");
499
+ if ( TYPE( opt_zero_padding ) != T_TRUE && TYPE( opt_zero_padding ) != T_FALSE ) {
500
+ rb_raise( rb_eTypeError, ":zero_padding must be true or false" );
503
501
  }
504
502
  }
505
503
  }
@@ -544,7 +542,7 @@ controller_run( VALUE self ) {
544
542
  rb_gv_set( "$PROGRAM_NAME", name );
545
543
 
546
544
  int argc = 3;
547
- char **argv = xmalloc( sizeof ( char * ) * ( uint32_t ) ( argc + 1 ) );
545
+ char **argv = xmalloc( sizeof( char * ) * ( uint32_t ) ( argc + 1 ) );
548
546
  argv[ 0 ] = STR2CSTR( name );
549
547
  argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
550
548
  argv[ 2 ] = STR2CSTR( name );
@@ -0,0 +1,56 @@
1
+ #
2
+ # Copyright (C) 2012 Hiroyasu OHYAMA
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License, version 2, as
6
+ # published by the Free Software Foundation.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+ #
17
+
18
+
19
+ require "trema/hardware-switch"
20
+
21
+
22
+ module Trema
23
+ class CustomSwitch < HardwareSwitch
24
+ include Trema::Daemon
25
+
26
+
27
+ log_file { |vswitch| "customswitch.#{ vswitch.name }.log" }
28
+
29
+
30
+ def initialize stanza
31
+ super stanza
32
+ end
33
+
34
+
35
+ def command
36
+ "CHIBACH_TMP=#{ Trema.tmp } #{ path } -i #{ dpid_short } > #{ log_file } &"
37
+ end
38
+
39
+
40
+ ############################################################################
41
+ private
42
+ ############################################################################
43
+
44
+
45
+ def path
46
+ File.join( Trema.home, @stanza[ :path ] )
47
+ end
48
+ end
49
+ end
50
+
51
+
52
+ ### Local variables:
53
+ ### mode: Ruby
54
+ ### coding: utf-8-unix
55
+ ### indent-tabs-mode: nil
56
+ ### End:
@@ -23,10 +23,10 @@ require "trema/stats-helper"
23
23
 
24
24
  module Trema
25
25
  class DescStatsReply < StatsHelper
26
- FIELDS = %w(mfr_desc hw_desc sw_desc serial_num dp_desc )
26
+ FIELDS = %w(mfr_desc hw_desc sw_desc serial_num dp_desc )
27
27
  FIELDS.each { |field| attr_reader field.intern }
28
28
 
29
-
29
+
30
30
  # Descriptive information about a vswitch.
31
31
  # A user would not explicitly instantiate a {DescStatsReply} object but
32
32
  # would be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_DESC)+
@@ -34,10 +34,10 @@ module Trema
34
34
  #
35
35
  # @overload initialize(options={})
36
36
  #
37
- # @example
37
+ # @example
38
38
  # DescStatsReply.new(
39
39
  # :mfr_desc => "Nicira Networks, Inc.",
40
- # :hw_desc => "Open vSwitch",
40
+ # :hw_desc => "Open vSwitch",
41
41
  # :sw_desc => "1.2.2"
42
42
  # :serial_num => "None"
43
43
  # )
@@ -63,7 +63,7 @@ module Trema
63
63
  # @return [DescStatsReply]
64
64
  # an object that encapsulates the OFPST_STATS_REPLY(OFPST_DESC) OpenFlow message.
65
65
  #
66
- def initialize options
66
+ def initialize options
67
67
  super FIELDS, options
68
68
  end
69
69
  end
@@ -87,6 +87,9 @@ module Trema
87
87
  attr_reader :switches
88
88
 
89
89
 
90
+ attr_reader :netnss
91
+
92
+
90
93
  #
91
94
  # Creates a new Trema configuration
92
95
  #
@@ -103,6 +106,7 @@ module Trema
103
106
  @packetin_filter = Trema::PacketinFilter.clear
104
107
  @switch_manager = Trema::SwitchManager.clear
105
108
  @switches = Trema::OpenflowSwitch.clear
109
+ @netnss = Trema::Netns.clear
106
110
  end
107
111
 
108
112
 
@@ -1,7 +1,7 @@
1
1
  #
2
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
2
+ # The syntax definition of custom_switch { ... } stanza in Trema DSL.
3
3
  #
4
- # Copyright (C) 2008-2012 NEC Corporation
4
+ # Copyright (C) 2012 Hiroyasu OHYAMA
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify
7
7
  # it under the terms of the GNU General Public License, version 2, as
@@ -18,8 +18,22 @@
18
18
  #
19
19
 
20
20
 
21
- When /^I try trema up "([^"]*)"$/ do | component |
22
- run "./trema up #{ component }"
21
+ require "trema/dsl/switch"
22
+
23
+
24
+ module Trema
25
+ module DSL
26
+ class CustomSwitch < Switch
27
+ def initialize name = nil
28
+ super name
29
+ end
30
+
31
+
32
+ def path filepath
33
+ @path = filepath
34
+ end
35
+ end
36
+ end
23
37
  end
24
38
 
25
39
 
@@ -0,0 +1,78 @@
1
+ #
2
+ # Copyright (C) 2008-2012 NEC Corporation
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License, version 2, as
6
+ # published by the Free Software Foundation.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along
14
+ # with this program; if not, write to the Free Software Foundation, Inc.,
15
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+ #
17
+
18
+
19
+ require "trema/dsl/stanza"
20
+ require "trema/dsl/syntax-error"
21
+
22
+
23
+ module Trema
24
+ module DSL
25
+ #
26
+ # The syntax definition of netns { ... } stanza in Trema DSL.
27
+ #
28
+ class Netns < Stanza
29
+ #
30
+ # Set IP address
31
+ #
32
+ # @example
33
+ # stanza.ip "192.168.100.1"
34
+ #
35
+ # @return [undefined]
36
+ #
37
+ # @api public
38
+ #
39
+ def ip str
40
+ @ip = str
41
+ if @name.nil?
42
+ @name = @ip
43
+ end
44
+ end
45
+
46
+
47
+ #
48
+ # Set netmask
49
+ #
50
+ # @example
51
+ # stanza.netmask "255.255.0.0"
52
+ #
53
+ # @return [undefined]
54
+ #
55
+ # @api public
56
+ #
57
+ def netmask str
58
+ @netmask = str
59
+ end
60
+
61
+
62
+ def route options
63
+ if options[ :net ].nil? or options[ :gw ].nil?
64
+ raise ":net and :gw option is a mandatory"
65
+ end
66
+ @net = options[ :net ]
67
+ @gw = options[ :gw ]
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+
74
+ ### Local variables:
75
+ ### mode: Ruby
76
+ ### coding: utf-8-unix
77
+ ### indent-tabs-mode: nil
78
+ ### End:
@@ -53,6 +53,8 @@ module Trema
53
53
  peers = each.peers
54
54
  config.hosts[ peers[ 0 ] ].interface = each.name if config.hosts[ peers[ 0 ] ]
55
55
  config.hosts[ peers[ 1 ] ].interface = each.name_peer if config.hosts[ peers[ 1 ] ]
56
+ config.netnss[ peers[ 0 ] ].interface = each.name if config.netnss[ peers[ 0 ] ]
57
+ config.netnss[ peers[ 1 ] ].interface = each.name_peer if config.netnss[ peers[ 1 ] ]
56
58
  config.switches[ peers[ 0 ] ] << each.name if config.switches[ peers[ 0 ] ]
57
59
  config.switches[ peers[ 1 ] ] << each.name_peer if config.switches[ peers[ 1 ] ]
58
60
  end
@@ -88,6 +88,7 @@ module Trema
88
88
  maybe_create_links
89
89
  maybe_run_hosts
90
90
  maybe_run_switches
91
+ maybe_run_netnss
91
92
  end
92
93
 
93
94
 
@@ -134,6 +135,13 @@ module Trema
134
135
  end
135
136
 
136
137
 
138
+ def maybe_run_netnss
139
+ @context.netnss.each do | name, netns |
140
+ netns.run!
141
+ end
142
+ end
143
+
144
+
137
145
  def maybe_run_apps
138
146
  return if @context.apps.values.empty?
139
147
 
@@ -22,19 +22,23 @@
22
22
 
23
23
  require "trema/app"
24
24
  require "trema/dsl/link"
25
+ require "trema/dsl/netns"
25
26
  require "trema/dsl/rswitch"
26
27
  require "trema/dsl/run"
27
28
  require "trema/dsl/switch"
28
29
  require "trema/dsl/vhost"
29
30
  require "trema/dsl/vswitch"
31
+ require "trema/dsl/custom-switch"
30
32
  require "trema/hardware-switch"
31
33
  require "trema/host"
32
34
  require "trema/link"
33
35
  require "trema/monkey-patch/module"
36
+ require "trema/netns"
34
37
  require "trema/open-vswitch"
35
38
  require "trema/packetin-filter"
36
39
  require "trema/ruby-switch"
37
40
  require "trema/switch-manager"
41
+ require "trema/custom-switch"
38
42
 
39
43
 
40
44
  module Trema
@@ -77,6 +81,13 @@ module Trema
77
81
  end
78
82
 
79
83
 
84
+ def custom_switch name = nil, &block
85
+ stanza = Trema::DSL::CustomSwitch.new( name )
86
+ stanza.instance_eval( &block )
87
+ Trema::CustomSwitch.new stanza
88
+ end
89
+
90
+
80
91
  def vhost name = nil, &block
81
92
  stanza = Trema::DSL::Vhost.new( name )
82
93
  stanza.instance_eval( &block ) if block
@@ -84,6 +95,13 @@ module Trema
84
95
  end
85
96
 
86
97
 
98
+ def netns name, &block
99
+ stanza = Trema::DSL::Netns.new( name )
100
+ stanza.instance_eval( &block ) if block
101
+ Trema::Netns.new( stanza )
102
+ end
103
+
104
+
87
105
  def filter rule
88
106
  Trema::PacketinFilter.new( rule )
89
107
  end