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
@@ -82,8 +82,8 @@ class MatchCompare < Controller
82
82
  next
83
83
  end
84
84
  if each.match.compare( match )
85
- action = each.action
86
- log = each.log
85
+ action = each.action
86
+ log = each.log
87
87
  break
88
88
  end
89
89
  end
@@ -20,7 +20,7 @@
20
20
  #
21
21
 
22
22
 
23
- $LOAD_PATH << "./src/examples/learning_switch/"
23
+ $LOAD_PATH << File.join( File.dirname( __FILE__ ), "../learning_switch/" )
24
24
 
25
25
 
26
26
  require "fdb"
@@ -20,9 +20,9 @@
20
20
  */
21
21
 
22
22
 
23
+ #include <assert.h>
23
24
  #include <inttypes.h>
24
25
  #include <time.h>
25
- #include <assert.h>
26
26
  #include "trema.h"
27
27
 
28
28
 
@@ -253,10 +253,10 @@ handle_packet_in( uint64_t datapath_id, packet_in message ) {
253
253
  warn( "Unknown switch (datapath ID = %#" PRIx64 ")", datapath_id );
254
254
  return;
255
255
  }
256
-
256
+
257
257
  packet_info packet_info = get_packet_info( message.data );
258
258
  learn( sw->forwarding_db, message.in_port, packet_info.eth_macsa );
259
- forwarding_entry *destination = lookup_hash_entry( sw->forwarding_db,
259
+ forwarding_entry *destination = lookup_hash_entry( sw->forwarding_db,
260
260
  packet_info.eth_macda );
261
261
 
262
262
  if ( destination == NULL ) {
@@ -5,7 +5,7 @@ itself, but maybe useful for the reference of Trema API.
5
5
 
6
6
  # How to run
7
7
 
8
- See features/example.message.*.feature
8
+ See features/example.message.*.feature
9
9
 
10
10
 
11
11
  Enjoy!
@@ -39,7 +39,7 @@ class EchoRequestController < Controller
39
39
  exit false
40
40
  end
41
41
  end
42
-
42
+
43
43
 
44
44
  def switch_ready msg_datapath_id
45
45
  may_raise_error msg_datapath_id
@@ -39,8 +39,8 @@ handle_features_reply(
39
39
  UNUSED( user_data );
40
40
 
41
41
  info( "datapath_id: %#" PRIx64, datapath_id );
42
- info( "transaction_id: %#lx", transaction_id );
43
- info( "n_buffers: %lu", n_buffers );
42
+ info( "transaction_id: %#" PRIx32 "", transaction_id );
43
+ info( "n_buffers: %" PRIu32 "", n_buffers );
44
44
  info( "n_tables: %u", n_tables );
45
45
  info( "capabilities:" );
46
46
  if ( capabilities & OFPC_FLOW_STATS ) {
@@ -68,43 +68,43 @@ handle_features_reply(
68
68
  info( " OFPC_ARP_MATCH_IP" );
69
69
  }
70
70
  info( "actions:" );
71
- if( actions & ( 1 << OFPAT_OUTPUT ) ) {
71
+ if ( actions & ( 1 << OFPAT_OUTPUT ) ) {
72
72
  info( " OFPAT_OUTPUT" );
73
73
  }
74
- if( actions & ( 1 << OFPAT_SET_VLAN_VID ) ) {
74
+ if ( actions & ( 1 << OFPAT_SET_VLAN_VID ) ) {
75
75
  info( " OFPAT_SET_VLAN_VID" );
76
76
  }
77
- if( actions & ( 1 << OFPAT_SET_VLAN_PCP ) ) {
77
+ if ( actions & ( 1 << OFPAT_SET_VLAN_PCP ) ) {
78
78
  info( " OFPAT_SET_VLAN_PCP" );
79
79
  }
80
- if( actions & ( 1 << OFPAT_STRIP_VLAN ) ) {
80
+ if ( actions & ( 1 << OFPAT_STRIP_VLAN ) ) {
81
81
  info( " OFPAT_STRIP_VLAN" );
82
82
  }
83
- if( actions & ( 1 << OFPAT_SET_DL_SRC ) ) {
83
+ if ( actions & ( 1 << OFPAT_SET_DL_SRC ) ) {
84
84
  info( " OFPAT_SET_DL_SRC" );
85
85
  }
86
- if( actions & ( 1 << OFPAT_SET_DL_DST ) ) {
86
+ if ( actions & ( 1 << OFPAT_SET_DL_DST ) ) {
87
87
  info( " OFPAT_SET_DL_DST" );
88
88
  }
89
- if( actions & ( 1 << OFPAT_SET_NW_SRC ) ) {
89
+ if ( actions & ( 1 << OFPAT_SET_NW_SRC ) ) {
90
90
  info( " OFPAT_SET_NW_SRC" );
91
91
  }
92
- if( actions & ( 1 << OFPAT_SET_NW_DST ) ) {
92
+ if ( actions & ( 1 << OFPAT_SET_NW_DST ) ) {
93
93
  info( " OFPAT_SET_NW_DST" );
94
94
  }
95
- if( actions & ( 1 << OFPAT_SET_NW_TOS ) ) {
95
+ if ( actions & ( 1 << OFPAT_SET_NW_TOS ) ) {
96
96
  info( " OFPAT_SET_NW_TOS" );
97
97
  }
98
- if( actions & ( 1 << OFPAT_SET_TP_SRC ) ) {
98
+ if ( actions & ( 1 << OFPAT_SET_TP_SRC ) ) {
99
99
  info( " OFPAT_SET_TP_SRC" );
100
100
  }
101
- if( actions & ( 1 << OFPAT_SET_TP_DST ) ) {
101
+ if ( actions & ( 1 << OFPAT_SET_TP_DST ) ) {
102
102
  info( " OFPAT_SET_TP_DST" );
103
103
  }
104
- if( actions & ( 1 << OFPAT_ENQUEUE ) ) {
104
+ if ( actions & ( 1 << OFPAT_ENQUEUE ) ) {
105
105
  info( " OFPAT_ENQUEUE" );
106
106
  }
107
- if( actions & OFPAT_VENDOR ) {
107
+ if ( actions & OFPAT_VENDOR ) {
108
108
  info( " OFPAT_VENDOR" );
109
109
  }
110
110
 
@@ -123,12 +123,12 @@ handle_features_reply(
123
123
  phy_port->hw_addr[ 5 ]
124
124
  );
125
125
  info( " name = %s", phy_port->name );
126
- info( " config = %#lx", phy_port->config );
127
- info( " state = %#lx", phy_port->state );
128
- info( " curr = %#lx", phy_port->curr );
129
- info( " advertised = %#lx", phy_port->advertised );
130
- info( " supported = %#lx", phy_port->supported );
131
- info( " peer = %#lx", phy_port->peer );
126
+ info( " config = %#" PRIx32 "", phy_port->config );
127
+ info( " state = %#" PRIx32 "", phy_port->state );
128
+ info( " curr = %#" PRIx32 "", phy_port->curr );
129
+ info( " advertised = %#" PRIx32 "", phy_port->advertised );
130
+ info( " supported = %#" PRIx32 "", phy_port->supported );
131
+ info( " peer = %#" PRIx32 "", phy_port->peer );
132
132
  }
133
133
  }
134
134
 
@@ -1,7 +1,5 @@
1
1
  /*
2
- * Sends hello message(s).
3
- *
4
- * Author: Shin-ya Zenke, Yasuhito Takamiya <yasuhito@gmail.com>
2
+ * A test example program to send a OFPT_HELLO message.
5
3
  *
6
4
  * Copyright (C) 2008-2012 NEC Corporation
7
5
  *
@@ -1,8 +1,6 @@
1
1
  #
2
2
  # A test example program to send a OFPT_HELLO message.
3
3
  #
4
- # Author: Nick Karanatsios <nickkaranatsios@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
@@ -20,37 +18,24 @@
20
18
  #
21
19
 
22
20
 
23
- require "example"
24
-
25
-
26
21
  class HelloController < Controller
27
- include Example
28
-
29
-
30
- class << self
31
- def run args
32
- usage unless Example.options_parse args
33
- end
34
-
35
-
36
- def usage
37
- puts Example.cmd_usage
38
- puts "Send count number of hello messages to datapath_id."
39
- exit false
22
+ def start
23
+ if ARGV.size < 2
24
+ STDERR.puts "Usage: #{ File.basename ARGV[ 0 ] } COUNT"
25
+ shutdown!
40
26
  end
27
+ @count = ARGV[ 1 ].to_i
41
28
  end
42
29
 
43
30
 
44
- def switch_ready msg_datapath_id
45
- may_raise_error msg_datapath_id
46
- send_nr_msgs Hello
31
+ def switch_ready datapath_id
32
+ @count.times do
33
+ send_message datapath_id, Hello.new
34
+ end
47
35
  end
48
36
  end
49
37
 
50
38
 
51
- HelloController.run ARGV
52
-
53
-
54
39
  ### Local variables:
55
40
  ### mode: Ruby
56
41
  ### coding: utf-8-unix
@@ -1,9 +1,9 @@
1
1
  #
2
- # Hello trema world!
2
+ # "Vendor Action" sample application
3
3
  #
4
- # Author: Yasuhito Takamiya <yasuhito@gmail.com>
4
+ # Author: SUGYO Kazushi
5
5
  #
6
- # Copyright (C) 2008-2012 NEC Corporation
6
+ # Copyright (C) 2012 NEC Corporation
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of the GNU General Public License, version 2, as
@@ -20,16 +20,26 @@
20
20
  #
21
21
 
22
22
 
23
- class HelloController < Controller
23
+ class VendorActionSampleController < Controller
24
+ NX_VENDOR_ID = 0x00002320
25
+ NXAST_NOTE = 8
26
+
24
27
  def switch_ready datapath_id
25
- info "Hello %#x from #{ ARGV[ 0 ] }!" % datapath_id
26
- shutdown!
28
+ body = [ NXAST_NOTE, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 ].pack( "nC6" )
29
+ actions = VendorAction.new( NX_VENDOR_ID, body.unpack( "C*" ) )
30
+ send_flow_mod_modify(
31
+ datapath_id,
32
+ :hard_timeout => 60,
33
+ :match => Match.new,
34
+ :actions => actions,
35
+ :strict => true
36
+ )
27
37
  end
28
38
  end
29
39
 
30
40
 
31
41
  ### Local variables:
32
42
  ### mode: Ruby
33
- ### coding: utf-8
43
+ ### coding: utf-8-unix
34
44
  ### indent-tabs-mode: nil
35
45
  ### End:
@@ -0,0 +1,105 @@
1
+ /*
2
+ * "Vendor Action" sample application
3
+ *
4
+ * Author: SUGYO Kazushi
5
+ *
6
+ * Copyright (C) 2008-2012 NEC Corporation
7
+ *
8
+ * This program is free software; you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License, version 2, as
10
+ * published by the Free Software Foundation.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License along
18
+ * with this program; if not, write to the Free Software Foundation, Inc.,
19
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
+ */
21
+
22
+
23
+ #include <inttypes.h>
24
+ #include <stdio.h>
25
+ #include "trema.h"
26
+
27
+ #define NX_VENDOR_ID 0x00002320
28
+ #define NXAST_NOTE 8
29
+
30
+ struct nx_action_note {
31
+ uint16_t type;
32
+ uint16_t len;
33
+ uint32_t vendor;
34
+ uint16_t subtype;
35
+ uint8_t note[6];
36
+ };
37
+
38
+ void
39
+ usage() {
40
+ printf( "Usage: %s COUNT\n", get_executable_name() );
41
+ }
42
+
43
+
44
+ static void
45
+ send_flow_mod( uint64_t datapath_id, void *user_data ) {
46
+ UNUSED( user_data );
47
+ uint8_t note[] = { 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 };
48
+
49
+ buffer *body = alloc_buffer();
50
+ struct nx_action_note *action = append_back_buffer( body, sizeof( struct nx_action_note ) );
51
+ action->subtype = htons( NXAST_NOTE );
52
+ memcpy( action->note, note, sizeof( action->note ) );
53
+ remove_front_buffer( body, sizeof( struct ofp_action_vendor_header ) );
54
+
55
+ openflow_actions *actions = create_actions();
56
+ append_action_vendor( actions, NX_VENDOR_ID, body );
57
+
58
+ struct ofp_match match;
59
+ memset( &match, 0, sizeof( match ) );
60
+ buffer *flow_mod = create_flow_mod(
61
+ get_transaction_id(),
62
+ match,
63
+ get_cookie(),
64
+ OFPFC_MODIFY_STRICT,
65
+ 0,
66
+ 60,
67
+ UINT16_MAX,
68
+ UINT32_MAX,
69
+ OFPP_NONE,
70
+ OFPFF_SEND_FLOW_REM,
71
+ actions
72
+ );
73
+
74
+ bool ret = send_openflow_message( datapath_id, flow_mod );
75
+ if ( !ret ) {
76
+ error( "Failed to send an flow_mod message to the switch with datapath ID = %#" PRIx64 ".", datapath_id );
77
+ stop_trema();
78
+ }
79
+
80
+ free_buffer( flow_mod );
81
+
82
+ delete_actions( actions );
83
+
84
+ free_buffer( body );
85
+ }
86
+
87
+
88
+ int
89
+ main( int argc, char *argv[] ) {
90
+ init_trema( &argc, &argv );
91
+
92
+ set_switch_ready_handler( send_flow_mod, NULL );
93
+
94
+ start_trema();
95
+
96
+ return 0;
97
+ }
98
+
99
+
100
+ /*
101
+ * Local variables:
102
+ * c-basic-offset: 2
103
+ * indent-tabs-mode: nil
104
+ * End:
105
+ */
@@ -0,0 +1,81 @@
1
+ /*
2
+ * A simple switch that has minimum function to test hello message.
3
+ *
4
+ * Copyright (C) 2012 Hiroyasu OHYAMA
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License, version 2, as
8
+ * published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License along
16
+ * with this program; if not, write to the Free Software Foundation, Inc.,
17
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ */
19
+
20
+
21
+ #include "chibach.h"
22
+
23
+
24
+ static void handle_features_request( uint32_t, void * );
25
+ static void handle_hello( uint32_t, uint8_t, void * );
26
+
27
+
28
+ static void
29
+ handle_features_request( uint32_t tid, void *user_data ) {
30
+ UNUSED( user_data );
31
+
32
+ uint32_t supported = ( ( 1 << OFPAT_OUTPUT ) |
33
+ ( 1 << OFPAT_SET_VLAN_VID ) |
34
+ ( 1 << OFPAT_SET_VLAN_PCP ) |
35
+ ( 1 << OFPAT_STRIP_VLAN ) |
36
+ ( 1 << OFPAT_SET_DL_SRC ) |
37
+ ( 1 << OFPAT_SET_DL_DST ) |
38
+ ( 1 << OFPAT_SET_NW_SRC ) |
39
+ ( 1 << OFPAT_SET_NW_DST ) |
40
+ ( 1 << OFPAT_SET_NW_TOS ) |
41
+ ( 1 << OFPAT_SET_TP_SRC ) |
42
+ ( 1 << OFPAT_SET_TP_DST ) );
43
+
44
+ buffer *msg = create_features_reply( tid, get_datapath_id(), 0, 1, 0, supported, NULL );
45
+
46
+ switch_send_openflow_message( msg );
47
+ }
48
+
49
+
50
+ static void
51
+ handle_hello( uint32_t tid, uint8_t version, void *user_data ) {
52
+ UNUSED( version );
53
+ UNUSED( user_data );
54
+
55
+ info( "received: OFPT_HELLO" );
56
+
57
+ switch_send_openflow_message( create_hello( tid ) );
58
+ }
59
+
60
+
61
+ int
62
+ main( int argc, char **argv ) {
63
+ init_chibach( &argc, &argv );
64
+
65
+ set_hello_handler( handle_hello, NULL );
66
+ set_features_request_handler( handle_features_request, NULL );
67
+
68
+ start_chibach();
69
+
70
+ stop_chibach();
71
+
72
+ return 0;
73
+ }
74
+
75
+
76
+ /*
77
+ * Local variables:
78
+ * c-basic-offset: 2
79
+ * indent-tabs-mode: nil
80
+ * End:
81
+ */