trema 0.2.2.1 → 0.2.3

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 (250) hide show
  1. data/.gitmodules +3 -0
  2. data/.travis.yml +13 -0
  3. data/.yardopts +4 -0
  4. data/Gemfile +2 -3
  5. data/README.md +43 -97
  6. data/Rakefile +60 -4
  7. data/Rantfile +11 -10
  8. data/cruise.rb +4 -6
  9. data/features/example.packetin_filter_config.feature +10 -10
  10. data/features/example.switch_monitor.feature +14 -2
  11. data/features/step_definitions/kill_steps.rb +2 -2
  12. data/features/step_definitions/{off_steps.rb → killall_steps.rb} +2 -2
  13. data/features/step_definitions/misc_steps.rb +1 -1
  14. data/features/step_definitions/up_steps.rb +30 -0
  15. data/features/trema.feature +1 -0
  16. data/features/trema.run.feature +1 -0
  17. data/locale/README.ja.md +19 -0
  18. data/locale/ja/yard.po +3762 -0
  19. data/locale/yard.pot +3740 -0
  20. data/ruby/extconf.rb +4 -1
  21. data/ruby/trema/action-common.c +3 -17
  22. data/ruby/trema/action-common.h +3 -7
  23. data/ruby/trema/action.rb +33 -0
  24. data/ruby/trema/app.rb +1 -1
  25. data/ruby/trema/barrier-request.c +1 -0
  26. data/ruby/trema/command/run.rb +13 -9
  27. data/ruby/trema/command/usage.rb +1 -0
  28. data/ruby/trema/command/version.rb +1 -1
  29. data/ruby/trema/controller.c +133 -50
  30. data/ruby/trema/controller.rb +2 -2
  31. data/ruby/trema/desc-stats-reply.rb +77 -0
  32. data/ruby/trema/dsl/configuration.rb +3 -14
  33. data/ruby/trema/dsl/rswitch.rb +47 -0
  34. data/ruby/trema/dsl/runner.rb +4 -1
  35. data/ruby/trema/dsl/syntax.rb +11 -8
  36. data/ruby/trema/echo-reply.c +59 -45
  37. data/ruby/trema/echo-reply.h +1 -3
  38. data/ruby/trema/echo-request.c +49 -71
  39. data/ruby/trema/echo-request.h +0 -2
  40. data/ruby/trema/echo.c +99 -0
  41. data/ruby/trema/{action-enqueue.h → echo.h} +6 -7
  42. data/ruby/trema/enqueue.rb +87 -0
  43. data/ruby/trema/error.c +109 -104
  44. data/ruby/trema/error.h +0 -2
  45. data/ruby/trema/features-reply.c +89 -35
  46. data/ruby/trema/features-reply.h +0 -6
  47. data/ruby/trema/features-request.c +63 -37
  48. data/ruby/trema/features-request.h +0 -2
  49. data/ruby/trema/flow-mod.c +149 -0
  50. data/ruby/trema/{action-output.h → flow-mod.h} +6 -6
  51. data/ruby/trema/get-config-request.c +1 -0
  52. data/ruby/trema/hardware-switch.rb +88 -0
  53. data/ruby/trema/hello.c +55 -31
  54. data/ruby/trema/hello.h +0 -2
  55. data/ruby/trema/ip.rb +12 -2
  56. data/ruby/trema/logger.rb +29 -0
  57. data/ruby/trema/mac.rb +57 -36
  58. data/ruby/trema/match.c +7 -9
  59. data/ruby/trema/monkey-patch/integer/ranges.rb +0 -2
  60. data/ruby/trema/network-component.rb +1 -1
  61. data/ruby/trema/open-vswitch.rb +2 -2
  62. data/ruby/trema/openflow-switch.rb +3 -54
  63. data/ruby/trema/{packet_in.c → packet-in.c} +262 -175
  64. data/ruby/trema/{packet_in.h → packet-in.h} +0 -2
  65. data/ruby/trema/packet-queue.rb +4 -3
  66. data/ruby/trema/port-mod.c +8 -9
  67. data/ruby/trema/port-status-add.rb +60 -0
  68. data/ruby/trema/port-status-delete.rb +60 -0
  69. data/ruby/trema/port-status-modify.rb +60 -0
  70. data/ruby/trema/port-status.c +48 -15
  71. data/ruby/trema/port-status.h +6 -8
  72. data/ruby/trema/port.c +63 -8
  73. data/ruby/trema/queue-get-config-request.c +1 -0
  74. data/ruby/trema/ruby-switch.rb +62 -0
  75. data/ruby/trema/send-out-port.rb +97 -0
  76. data/ruby/trema/set-config.c +1 -0
  77. data/ruby/trema/set-eth-addr.rb +45 -0
  78. data/ruby/trema/set-eth-dst-addr.rb +54 -0
  79. data/ruby/trema/set-eth-src-addr.rb +54 -0
  80. data/ruby/trema/set-ip-addr.rb +47 -0
  81. data/ruby/trema/set-ip-dst-addr.rb +53 -0
  82. data/ruby/trema/set-ip-src-addr.rb +52 -0
  83. data/ruby/trema/set-ip-tos.rb +63 -0
  84. data/ruby/trema/set-transport-dst-port.rb +53 -0
  85. data/ruby/trema/set-transport-port.rb +52 -0
  86. data/ruby/trema/set-transport-src-port.rb +54 -0
  87. data/ruby/trema/set-vlan-priority.rb +65 -0
  88. data/ruby/trema/set-vlan-vid.rb +64 -0
  89. data/ruby/trema/shell/down.rb +1 -1
  90. data/ruby/trema/shell/link.rb +4 -4
  91. data/ruby/trema/shell/run.rb +8 -6
  92. data/ruby/trema/shell/up.rb +3 -3
  93. data/ruby/trema/stats-reply.c +27 -2
  94. data/ruby/trema/stats-request.c +64 -23
  95. data/ruby/trema/strip-vlan-header.rb +41 -0
  96. data/ruby/trema/switch.c +196 -0
  97. data/ruby/trema/{action-vendor.h → switch.h} +5 -7
  98. data/ruby/trema/switch.rb +28 -9
  99. data/ruby/trema/trema-ruby-utils.c +66 -0
  100. data/ruby/trema/{action-set-dl-src.h → trema-ruby-utils.h} +9 -11
  101. data/ruby/trema/trema.c +61 -61
  102. data/ruby/trema/vendor-action.rb +73 -0
  103. data/ruby/trema/vendor.c +121 -52
  104. data/ruby/trema/vendor.h +6 -10
  105. data/ruby/trema/version.rb +1 -1
  106. data/spec/spec_helper.rb +1 -1
  107. data/spec/support/action.rb +52 -0
  108. data/spec/support/mandatory-option.rb +56 -0
  109. data/spec/support/openflow-message.rb +91 -7
  110. data/spec/support/port-status.rb +38 -0
  111. data/spec/trema/controller_spec.rb +0 -26
  112. data/spec/trema/dsl/configuration_spec.rb +3 -3
  113. data/spec/trema/dsl/runner_spec.rb +12 -32
  114. data/spec/trema/dsl/syntax_spec.rb +2 -11
  115. data/spec/trema/echo-reply_spec.rb +49 -14
  116. data/spec/trema/echo-request_spec.rb +86 -34
  117. data/spec/trema/enqueue_spec.rb +76 -0
  118. data/spec/trema/error_spec.rb +43 -58
  119. data/spec/trema/features-reply_spec.rb +58 -24
  120. data/spec/trema/features-request_spec.rb +54 -28
  121. data/spec/trema/flow-mod_spec.rb +99 -0
  122. data/spec/trema/{openflow-switch_spec.rb → hardware-switch_spec.rb} +3 -3
  123. data/spec/trema/hello_spec.rb +28 -14
  124. data/spec/trema/ip_spec.rb +54 -0
  125. data/spec/trema/mac_spec.rb +49 -64
  126. data/spec/trema/match_spec.rb +1 -1
  127. data/spec/trema/open-vswitch_spec.rb +7 -7
  128. data/spec/trema/packet-in_spec.rb +73 -16
  129. data/spec/trema/port-status-add_spec.rb +32 -0
  130. data/spec/trema/port-status-delete_spec.rb +32 -0
  131. data/spec/trema/port-status-modify_spec.rb +71 -0
  132. data/spec/trema/port-status_spec.rb +5 -76
  133. data/spec/trema/{action-output_spec.rb → send-out-port_spec.rb} +20 -47
  134. data/spec/trema/set-eth-dst-addr_spec.rb +75 -0
  135. data/spec/trema/set-eth-src-addr_spec.rb +72 -0
  136. data/spec/trema/set-ip-dst-addr_spec.rb +58 -0
  137. data/spec/trema/set-ip-src-addr_spec.rb +58 -0
  138. data/spec/trema/set-ip-tos_spec.rb +65 -0
  139. data/spec/trema/set-transport-dst-port_spec.rb +65 -0
  140. data/spec/trema/set-transport-src-port_spec.rb +65 -0
  141. data/spec/trema/set-vlan-priority_spec.rb +65 -0
  142. data/spec/trema/set-vlan-vid_spec.rb +65 -0
  143. data/spec/trema/shell/vhost_spec.rb +4 -1
  144. data/spec/trema/shell/vswitch_spec.rb +11 -11
  145. data/spec/trema/stats-reply_spec.rb +59 -13
  146. data/spec/trema/stats-request_spec.rb +6 -0
  147. data/spec/trema/{action-strip-vlan_spec.rb → strip-vlan-header_spec.rb} +3 -17
  148. data/spec/trema/switch-daemon_spec.rb +39 -0
  149. data/spec/trema/vendor-action_spec.rb +81 -0
  150. data/spec/trema/vendor_spec.rb +76 -0
  151. data/spec/trema_spec.rb +56 -0
  152. data/src/examples/dumper/dumper.c +0 -8
  153. data/src/examples/dumper/dumper.rb +52 -52
  154. data/src/examples/hello_trema/hello_trema.c +0 -2
  155. data/src/examples/learning_switch/learning-switch.rb +3 -3
  156. data/src/examples/multi_learning_switch/multi-learning-switch.rb +3 -3
  157. data/src/examples/openflow_message/features-request.rb +3 -3
  158. data/src/examples/packetin_filter_config/utils.c +4 -4
  159. data/src/examples/repeater_hub/repeater-hub.rb +3 -3
  160. data/src/examples/switch_info/switch_info.rb +2 -2
  161. data/src/examples/switch_monitor/switch_monitor.c +1 -1
  162. data/src/examples/traffic_monitor/traffic-monitor.rb +3 -3
  163. data/src/lib/arp.h +4 -1
  164. data/src/lib/chibach.c +391 -0
  165. data/src/lib/chibach.h +71 -0
  166. data/src/lib/chibach_private.c +170 -0
  167. data/src/lib/chibach_private.h +52 -0
  168. data/src/lib/ether.c +2 -1
  169. data/src/lib/ether.h +0 -1
  170. data/src/lib/ipv4.h +13 -14
  171. data/{ruby/trema/action-set-nw-src.h → src/lib/ipv6.h} +13 -9
  172. data/src/lib/log.c +161 -58
  173. data/src/lib/log.h +11 -16
  174. data/src/lib/messenger.c +36 -1
  175. data/src/lib/messenger.h +1 -0
  176. data/src/lib/openflow_application_interface.c +128 -28
  177. data/src/lib/openflow_application_interface.h +31 -6
  178. data/src/lib/openflow_message.c +2 -1
  179. data/src/lib/openflow_service_interface.h +1 -0
  180. data/src/lib/openflow_switch_interface.c +1380 -0
  181. data/src/lib/openflow_switch_interface.h +264 -0
  182. data/src/lib/packet_info.c +94 -11
  183. data/src/lib/packet_info.h +22 -3
  184. data/src/lib/packet_parser.c +38 -2
  185. data/src/lib/secure_channel.c +498 -0
  186. data/{ruby/trema/vendor-request.h → src/lib/secure_channel.h} +11 -10
  187. data/src/lib/tcp.h +0 -3
  188. data/src/lib/trema.c +38 -5
  189. data/{ruby/trema/action-set-nw-dst.h → src/lib/trema.hpp} +17 -8
  190. data/src/lib/trema_wrapper.c +5 -0
  191. data/src/lib/trema_wrapper.h +4 -0
  192. data/src/lib/utility.c +93 -4
  193. data/src/lib/utility.h +1 -0
  194. data/src/lib/wrapper.c +30 -7
  195. data/src/lib/wrapper.h +2 -0
  196. data/src/switch_manager/ofpmsg_recv.c +44 -30
  197. data/src/switch_manager/ofpmsg_send.c +40 -1
  198. data/src/switch_manager/ofpmsg_send.h +2 -0
  199. data/src/switch_manager/switch.c +153 -8
  200. data/src/switch_manager/switch.h +1 -0
  201. data/src/switch_manager/switchinfo.h +5 -0
  202. data/src/tremashark/README +2 -2
  203. data/src/tremashark/plugin/packet-trema/packet-trema.c +1 -0
  204. data/trema +1 -1
  205. data/unittests/lib/log_test.c +158 -34
  206. data/unittests/lib/openflow_application_interface_test.c +252 -69
  207. data/unittests/lib/openflow_message_test.c +3 -1
  208. data/unittests/lib/packet_parser_test.c +60 -15
  209. data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
  210. data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
  211. data/unittests/lib/trema_test.c +2 -0
  212. data/unittests/lib/utility_test.c +65 -2
  213. data/unittests/lib/wrapper_test.c +29 -0
  214. data/vendor/{README → README.md} +2 -12
  215. data/vendor/packet-openflow.diff +13 -0
  216. metadata +86 -53
  217. data/GPL2 +0 -339
  218. data/ruby/trema/action-enqueue.c +0 -161
  219. data/ruby/trema/action-output.c +0 -169
  220. data/ruby/trema/action-set-dl-dst.c +0 -131
  221. data/ruby/trema/action-set-dl-dst.h +0 -44
  222. data/ruby/trema/action-set-dl-src.c +0 -131
  223. data/ruby/trema/action-set-nw-dst.c +0 -135
  224. data/ruby/trema/action-set-nw-src.c +0 -140
  225. data/ruby/trema/action-set-nw-tos.c +0 -124
  226. data/ruby/trema/action-set-nw-tos.h +0 -42
  227. data/ruby/trema/action-set-tp-dst.c +0 -122
  228. data/ruby/trema/action-set-tp-dst.h +0 -42
  229. data/ruby/trema/action-set-tp-src.c +0 -124
  230. data/ruby/trema/action-set-tp-src.h +0 -42
  231. data/ruby/trema/action-set-vlan-pcp.c +0 -128
  232. data/ruby/trema/action-set-vlan-pcp.h +0 -42
  233. data/ruby/trema/action-set-vlan-vid.c +0 -125
  234. data/ruby/trema/action-set-vlan-vid.h +0 -42
  235. data/ruby/trema/action-strip-vlan.c +0 -81
  236. data/ruby/trema/action-strip-vlan.h +0 -42
  237. data/ruby/trema/action-vendor.c +0 -121
  238. data/ruby/trema/vendor-request.c +0 -193
  239. data/spec/trema/action-enqueue_spec.rb +0 -100
  240. data/spec/trema/action-set-dl-dst_spec.rb +0 -95
  241. data/spec/trema/action-set-dl-src_spec.rb +0 -92
  242. data/spec/trema/action-set-nw-dst_spec.rb +0 -96
  243. data/spec/trema/action-set-nw-src_spec.rb +0 -97
  244. data/spec/trema/action-set-nw-tos_spec.rb +0 -88
  245. data/spec/trema/action-set-tp-dst_spec.rb +0 -88
  246. data/spec/trema/action-set-tp-src_spec.rb +0 -88
  247. data/spec/trema/action-set-vlan-pcp_spec.rb +0 -91
  248. data/spec/trema/action-set-vlan-vid_spec.rb +0 -91
  249. data/spec/trema/action-vendor_spec.rb +0 -90
  250. data/spec/trema/vendor-request_spec.rb +0 -79
@@ -0,0 +1,81 @@
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 File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
+ require "trema"
21
+
22
+
23
+ describe VendorAction, "new( vendor_id )" do
24
+ subject { VendorAction.new vendor_id }
25
+
26
+ it_validates "option range", :vendor_id, 0..( 2 ** 32 - 1 )
27
+
28
+ context "when vendor_id == 0x00004cff" do
29
+ let( :vendor_id ) { 0x00004cff }
30
+ its( :vendor_id ) { should == 0x00004cff }
31
+ end
32
+ end
33
+
34
+
35
+ describe VendorAction, ".new( string )" do
36
+ it { expect { VendorAction.new "0x00004cff" }.to raise_error( TypeError ) }
37
+ end
38
+
39
+
40
+ describe VendorAction, ".new( array )" do
41
+ it { expect { VendorAction.new [ 1, 2, 3 ] }.to raise_error( TypeError ) }
42
+ end
43
+
44
+
45
+ describe VendorAction, ".new( vendor_id, body )" do
46
+ subject { VendorAction.new vendor_id, body }
47
+ let( :vendor_id ) { 0x00004cff }
48
+
49
+ context %{when body == "deadbeef".unpack( "C*" )} do
50
+ let( :body ) { "deadbeef".unpack( "C*" ) }
51
+
52
+ its( :vendor_id ) { should == 0x00004cff }
53
+ its( :body ) { should == [ 100, 101, 97, 100, 98, 101, 101, 102 ] }
54
+
55
+ context "when sending Flow Mod Add with action set to VendorAction" do
56
+ it "should have a flow with action set to VendorAction" do
57
+ class FlowModAddController < Controller; end
58
+ pending "Use Nicira's vendor ID and body"
59
+ network {
60
+ vswitch { datapath_id 0xabc }
61
+ }.run( FlowModAddController ) {
62
+ controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => VendorAction.new( 0x00004cff, "deadbeef".unpack( "C*" ) ) )
63
+ vswitch( "0xabc" ).should have( 1 ).flows
64
+ vswitch( "0xabc" ).flows[ 0 ].actions.should match( /mod_vendor/ )
65
+ }
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+
72
+ describe VendorAction, "new( vendor_id, string )" do
73
+ it { expect { VendorAction.new 0x00004cff, "deadbeef" }.to raise_error( TypeError ) }
74
+ end
75
+
76
+
77
+ ### Local variables:
78
+ ### mode: Ruby
79
+ ### coding: utf-8-unix
80
+ ### indent-tabs-mode: nil
81
+ ### End:
@@ -0,0 +1,76 @@
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 File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
+ require "trema"
21
+
22
+
23
+ module Trema
24
+ describe Vendor, ".new" do
25
+ it_should_behave_like "any Openflow message with default transaction ID"
26
+ its ( :vendor ) { should == 0 }
27
+ its ( :data ) { should be_nil }
28
+ end
29
+
30
+
31
+ describe Vendor, ".new(nil)" do
32
+ it_should_behave_like "any Openflow message with default transaction ID"
33
+ its ( :vendor ) { should == 0 }
34
+ its ( :data ) { should be_nil }
35
+ end
36
+
37
+
38
+ describe Vendor, ".new(:transaction_id => value)" do
39
+ subject { Vendor.new( :transaction_id => transaction_id ) }
40
+ it_should_behave_like "any Openflow message with transaction ID"
41
+ end
42
+
43
+
44
+ describe Vendor, ".new(:xid => value)" do
45
+ subject { Vendor.new( :xid => xid ) }
46
+ it_should_behave_like "any Openflow message with xid"
47
+ end
48
+
49
+
50
+ describe Vendor, ".new(:vendor_id => value)", :nosudo => true do
51
+ subject { Vendor.new( :vendor => vendor ) }
52
+ let( :vendor ) { 0xdeadbeef }
53
+ its( :vendor ) { should == 0xdeadbeef }
54
+ its ( :data ) { should be_nil }
55
+ end
56
+
57
+
58
+ describe Vendor, ".new(:data => value)", :nosudo => true do
59
+ subject { Vendor.new( :data => data ) }
60
+ let( :data ) { "VENDOR DATA".unpack( "C*" ) }
61
+ its( :data ) { should == [86, 69, 78, 68, 79, 82, 32, 68, 65, 84, 65] }
62
+ its ( :vendor ) { should == 0 }
63
+ end
64
+
65
+
66
+ describe Vendor, '.new("INVALID OPTION")', :nosudo => true do
67
+ it { expect { Vendor.new "INVALID OPTION" }.to raise_error( TypeError ) }
68
+ end
69
+ end
70
+
71
+
72
+ ### Local variables:
73
+ ### mode: Ruby
74
+ ### coding: utf-8-unix
75
+ ### indent-tabs-mode: nil
76
+ ### End:
@@ -0,0 +1,56 @@
1
+ #
2
+ # Author: Yasuhito Takamiya <yasuhito@gmail.com>
3
+ #
4
+ # Copyright (C) 2008-2012 NEC Corporation
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
+ require File.join( File.dirname( __FILE__ ), "spec_helper" )
22
+ require "trema"
23
+
24
+
25
+ describe Trema, ".constants" do
26
+ subject { Trema.constants }
27
+
28
+ it { should include "OFPC_FLOW_STATS" }
29
+ it { should include "OFPC_TABLE_STATS" }
30
+ it { should include "OFPC_PORT_STATS" }
31
+ it { should include "OFPC_STP" }
32
+ it { should include "OFPC_RESERVED" }
33
+ it { should include "OFPC_IP_REASM" }
34
+ it { should include "OFPC_QUEUE_STATS" }
35
+ it { should include "OFPC_ARP_MATCH_IP" }
36
+
37
+ it { should include "OFPAT_OUTPUT" }
38
+ it { should include "OFPAT_SET_VLAN_VID" }
39
+ it { should include "OFPAT_SET_VLAN_PCP" }
40
+ it { should include "OFPAT_STRIP_VLAN" }
41
+ it { should include "OFPAT_SET_DL_SRC" }
42
+ it { should include "OFPAT_SET_DL_DST" }
43
+ it { should include "OFPAT_SET_NW_SRC" }
44
+ it { should include "OFPAT_SET_NW_DST" }
45
+ it { should include "OFPAT_SET_NW_TOS" }
46
+ it { should include "OFPAT_SET_TP_DST" }
47
+ it { should include "OFPAT_ENQUEUE" }
48
+ it { should include "OFPAT_VENDOR" }
49
+ end
50
+
51
+
52
+ ### Local variables:
53
+ ### mode: Ruby
54
+ ### coding: utf-8-unix
55
+ ### indent-tabs-mode: nil
56
+ ### End:
@@ -102,16 +102,8 @@ static void
102
102
  handle_switch_ready( uint64_t datapath_id, void *user_data ) {
103
103
  UNUSED( user_data );
104
104
 
105
- buffer *buffer;
106
-
107
105
  dump( "[switch_ready]" );
108
106
  dump( "datapath_id: %#" PRIx64, datapath_id );
109
-
110
- buffer = create_features_request( get_transaction_id() );
111
-
112
- send_openflow_message( datapath_id, buffer );
113
-
114
- free_buffer( buffer );
115
107
  }
116
108
 
117
109
 
@@ -21,12 +21,60 @@
21
21
 
22
22
 
23
23
  class Dumper < Controller
24
+ def switch_ready datapath_id
25
+ info "[switch_ready]"
26
+ info " datapath_id: #{ datapath_id.to_hex }"
27
+ end
28
+
29
+
24
30
  def switch_disconnected datapath_id
25
31
  info "[switch_disconnected]"
26
32
  info " datapath_id: #{ datapath_id.to_hex }"
27
33
  end
28
34
 
29
35
 
36
+ def openflow_error message
37
+ info "[error]"
38
+ info "datapath_id: #{ message.datapath_id.to_hex }"
39
+ info "transaction_id: #{ message.transaction_id.to_hex }"
40
+ info "type: #{ message.type.to_hex }"
41
+ info "code: #{ message.code.to_hex }"
42
+ info "data: #{ message.data.unpack "H*" }"
43
+ end
44
+
45
+
46
+ def vendor message
47
+ info "[vendor]"
48
+ info "datapath_id: #{ message.datapath_id.to_hex }"
49
+ info "transaction_id: #{ message.transaction_id.to_hex }"
50
+ info "data:"
51
+ info "#{ message.buffer.unpack "H*" }"
52
+ end
53
+
54
+
55
+ def features_reply datapath_id, message
56
+ info "[features_reply]"
57
+ info "datapath_id: #{ datapath_id.to_hex }"
58
+ info "transaction_id: #{ message.transaction_id.to_hex }"
59
+ info "n_buffers: #{ message.n_buffers }"
60
+ info "n_tables: #{ message.n_tables }"
61
+ info "capabilities: #{ message.capabilities.to_hex }"
62
+ info "actions: #{ message.actions.to_hex }"
63
+ message.ports.each do | each |
64
+ dump_phy_port each
65
+ end
66
+ end
67
+
68
+
69
+ def get_config_reply message
70
+ info "[get_config_reply]"
71
+ info "datapath_id: #{ message.datapath_id.to_hex }"
72
+ info "transaction_id: #{ message.transaction_id.to_hex }"
73
+ info "flags: #{ message.flags.to_hex }"
74
+ info "miss_send_len: #{ message.miss_send_len }"
75
+ end
76
+
77
+
30
78
  def packet_in datapath_id, message
31
79
  info "[packet_in]"
32
80
  info " datapath_id: #{ datapath_id.to_hex }"
@@ -70,18 +118,9 @@ class Dumper < Controller
70
118
  end
71
119
 
72
120
 
73
- def get_config_reply message
74
- info "[get_config_reply]"
75
- info "datapath_id: #{ message.datapath_id.to_hex }"
76
- info "transaction_id: #{ message.transaction_id.to_hex }"
77
- info "flags: #{ message.flags.to_hex }"
78
- info "miss_send_len: #{ message.miss_send_len }"
79
- end
80
-
81
-
82
- def port_status message
121
+ def port_status datapath_id, message
83
122
  info "[port_status]"
84
- info "datapath_id: #{ message.datapath_id.to_hex }"
123
+ info "datapath_id: #{ datapath_id.to_hex }"
85
124
  info "transaction_id: #{ message.transaction_id.to_hex }"
86
125
  info "reason: #{ message.reason.to_hex }"
87
126
  dump_phy_port message.phy_port
@@ -98,13 +137,10 @@ class Dumper < Controller
98
137
  end
99
138
 
100
139
 
101
- def openflow_error message
102
- info "[error]"
140
+ def barrier_reply message
141
+ info "[barrier_reply]"
103
142
  info "datapath_id: #{ message.datapath_id.to_hex }"
104
143
  info "transaction_id: #{ message.transaction_id.to_hex }"
105
- info "type: #{ message.type.to_hex }"
106
- info "code: #{ message.code.to_hex }"
107
- info "data: #{ message.data.unpack "H*" }"
108
144
  end
109
145
 
110
146
 
@@ -118,42 +154,6 @@ class Dumper < Controller
118
154
  end
119
155
 
120
156
 
121
- def barrier_reply message
122
- info "[barrier_reply]"
123
- info "datapath_id: #{ message.datapath_id.to_hex }"
124
- info "transaction_id: #{ message.transaction_id.to_hex }"
125
- end
126
-
127
-
128
- def features_reply message
129
- info "[features_reply]"
130
- info "datapath_id: #{ message.datapath_id.to_hex }"
131
- info "transaction_id: #{ message.transaction_id.to_hex }"
132
- info "n_buffers: #{ message.n_buffers }"
133
- info "n_tables: #{ message.n_tables }"
134
- info "capabilities: #{ message.capabilities.to_hex }"
135
- info "actions: #{ message.actions.to_hex }"
136
- message.ports.each do | each |
137
- dump_phy_port each
138
- end
139
- end
140
-
141
-
142
- def vendor message
143
- info "[vendor]"
144
- info "datapath_id: #{ message.datapath_id.to_hex }"
145
- info "transaction_id: #{ message.transaction_id.to_hex }"
146
- info "data:"
147
- info message.buffer.unpack( "H*" )
148
- end
149
-
150
-
151
- def list_switches_reply dpids
152
- info "[list_switches_reply]"
153
- info "switches = %s" % dpids.collect { | each | each.to_hex }.join( ", " )
154
- end
155
-
156
-
157
157
  ##############################################################################
158
158
  private
159
159
  ##############################################################################
@@ -1,8 +1,6 @@
1
1
  /*
2
2
  * Hello trema world!
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
@@ -26,7 +26,7 @@ require "fdb"
26
26
  #
27
27
  # A OpenFlow controller class that emulates a layer-2 switch.
28
28
  #
29
- class LearningSwitch < Trema::Controller
29
+ class LearningSwitch < Controller
30
30
  add_timer_event :age_fdb, 5, :periodic
31
31
 
32
32
 
@@ -61,7 +61,7 @@ class LearningSwitch < Trema::Controller
61
61
  send_flow_mod_add(
62
62
  datapath_id,
63
63
  :match => ExactMatch.from( message ),
64
- :actions => Trema::ActionOutput.new( :port => port_no )
64
+ :actions => ActionOutput.new( :port => port_no )
65
65
  )
66
66
  end
67
67
 
@@ -70,7 +70,7 @@ class LearningSwitch < Trema::Controller
70
70
  send_packet_out(
71
71
  datapath_id,
72
72
  :packet_in => message,
73
- :actions => Trema::ActionOutput.new( :port => port_no )
73
+ :actions => ActionOutput.new( :port => port_no )
74
74
  )
75
75
  end
76
76
 
@@ -29,7 +29,7 @@ require "fdb"
29
29
  #
30
30
  # A OpenFlow controller class that emulates multiple layer-2 switches.
31
31
  #
32
- class MultiLearningSwitch < Trema::Controller
32
+ class MultiLearningSwitch < Controller
33
33
  add_timer_event :age_fdbs, 5, :periodic
34
34
 
35
35
 
@@ -69,7 +69,7 @@ class MultiLearningSwitch < Trema::Controller
69
69
  send_flow_mod_add(
70
70
  datapath_id,
71
71
  :match => ExactMatch.from( message ),
72
- :actions => Trema::ActionOutput.new( :port => port_no )
72
+ :actions => ActionOutput.new( :port => port_no )
73
73
  )
74
74
  end
75
75
 
@@ -78,7 +78,7 @@ class MultiLearningSwitch < Trema::Controller
78
78
  send_packet_out(
79
79
  datapath_id,
80
80
  :packet_in => message,
81
- :actions => Trema::ActionOutput.new( :port => port_no )
81
+ :actions => ActionOutput.new( :port => port_no )
82
82
  )
83
83
  end
84
84
 
@@ -27,12 +27,12 @@ class FeaturesRequestController < Controller
27
27
  end
28
28
 
29
29
 
30
- def features_reply message
31
- info "datapath_id: #{ message.datapath_id.to_hex }"
30
+ def features_reply datapath_id, message
31
+ info "datapath_id: #{ datapath_id.to_hex }"
32
32
  info "transaction_id: #{ message.transaction_id.to_hex }"
33
33
  info "n_buffers: #{ message.n_buffers }"
34
34
  info "n_tables: #{ message.n_tables }"
35
- print_capabilities message.capabilities
35
+ print_capabilities message.capabilities
36
36
  print_actions message.actions
37
37
  print_ports message.ports
38
38
  end