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
@@ -129,6 +129,7 @@ Init_queue_get_config_request() {
129
129
  rb_define_alloc_func( cQueueGetConfigRequest, queue_get_config_request_alloc );
130
130
  rb_define_method( cQueueGetConfigRequest, "initialize", queue_get_config_request_init, -1 );
131
131
  rb_define_method( cQueueGetConfigRequest, "transaction_id", queue_get_config_request_transaction_id, 0 );
132
+ rb_alias( cQueueGetConfigRequest, rb_intern( "xid" ), rb_intern( "transaction_id" ) );
132
133
  rb_define_method( cQueueGetConfigRequest, "port", queue_get_config_request_port, 0 );
133
134
  }
134
135
 
@@ -0,0 +1,62 @@
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 "rbconfig"
20
+ require "trema/hardware-switch"
21
+
22
+
23
+ module Trema
24
+ class RubySwitch < HardwareSwitch
25
+ include Trema::Daemon
26
+
27
+
28
+ def initialize stanza
29
+ super stanza
30
+ end
31
+
32
+
33
+ def command
34
+ "#{ ruby } -I#{ libruby } -rtrema -e \"Trema.module_eval IO.read( '#{ @stanza.path }' )\" #{ dpid_short }"
35
+ end
36
+
37
+
38
+ ############################################################################
39
+ private
40
+ ############################################################################
41
+
42
+
43
+ def libruby
44
+ File.join Trema.home, "ruby"
45
+ end
46
+
47
+
48
+ def ruby
49
+ File.join(
50
+ RbConfig::CONFIG[ "bindir" ],
51
+ RbConfig::CONFIG[ "ruby_install_name" ] + RbConfig::CONFIG[ "EXEEXT" ]
52
+ )
53
+ end
54
+ end
55
+ end
56
+
57
+
58
+ ### Local variables:
59
+ ### mode: Ruby
60
+ ### coding: utf-8-unix
61
+ ### indent-tabs-mode: nil
62
+ ### End:
@@ -0,0 +1,97 @@
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/action"
20
+ require "trema/monkey-patch/integer"
21
+
22
+
23
+ module Trema
24
+ #
25
+ # An action to output a packet to a port.
26
+ #
27
+ class SendOutPort < Action
28
+ attr_reader :max_len
29
+ attr_reader :port_number
30
+
31
+
32
+ #
33
+ # Creates an action to output a packet to a port.
34
+ #
35
+ # @example
36
+ # SendOutPort.new( 1 )
37
+ # SendOutPort.new( :port_number => 1, :max_len => 256 )
38
+ # SendOutPort.new( :port_number => 1 )
39
+ # SendOutPort.new( :port_number => 1, :max_len => 256 )
40
+ #
41
+ # @param [Hash] options
42
+ # the options hash to create this action class instance with.
43
+ #
44
+ # @option options [Number] :port_number
45
+ # port number an index into switch's physical port list. There are also
46
+ # fake output ports. For example a port number set to +OFPP_FLOOD+ would
47
+ # output packets to all physical ports except input port and ports
48
+ # disabled by STP.
49
+ #
50
+ # @option options [Number] :max_len
51
+ # the maximum number of bytes from a packet to send to controller when port
52
+ # is set to +OFPP_CONTROLLER+. A zero length means no bytes of the packet
53
+ # should be sent. It defaults to 64K.
54
+ #
55
+ # @raise [ArgumentError] if port_number is not an unsigned 16-bit integer.
56
+ # @raise [ArgumentError] if max_len is not an unsigned 16-bit integer.
57
+ #
58
+ def initialize options
59
+ case options
60
+ when Hash
61
+ @port_number = options[ :port_number ] || options[ :port ]
62
+ @max_len = options[ :max_len ]
63
+ if @port_number.nil?
64
+ raise ArgumentError, ":port_number is a mandatory option"
65
+ end
66
+ if not @port_number.unsigned_16bit?
67
+ raise ArgumentError, "Port number must be an unsigned 16-bit integer"
68
+ end
69
+ if @max_len
70
+ if not @max_len.unsigned_16bit?
71
+ raise ArgumentError, ":max_len must be an unsigned 16-bit integer"
72
+ end
73
+ else
74
+ @max_len = 2 ** 16 - 1
75
+ end
76
+ when Integer
77
+ if not options.unsigned_16bit?
78
+ raise ArgumentError, "Port number must be an unsigned 16-bit integer"
79
+ end
80
+ @port_number = options
81
+ @max_len = 2 ** 16 - 1
82
+ else
83
+ raise "Invalid option"
84
+ end
85
+ end
86
+ end
87
+
88
+
89
+ ActionOutput = SendOutPort
90
+ end
91
+
92
+
93
+ ### Local variables:
94
+ ### mode: Ruby
95
+ ### coding: utf-8-unix
96
+ ### indent-tabs-mode: nil
97
+ ### End:
@@ -158,6 +158,7 @@ Init_set_config() {
158
158
 
159
159
  rb_define_method( cSetConfig, "initialize", set_config_init, -1 );
160
160
  rb_define_method( cSetConfig, "transaction_id", set_config_transaction_id, 0 );
161
+ rb_alias( cSetConfig, rb_intern( "xid" ), rb_intern( "transaction_id" ) );
161
162
  rb_define_method( cSetConfig, "flags", set_config_flags, 0 );
162
163
  rb_define_method( cSetConfig, "miss_send_len", set_config_miss_send_len, 0 );
163
164
  }
@@ -0,0 +1,45 @@
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/action"
20
+ require "trema/mac"
21
+
22
+
23
+ module Trema
24
+ #
25
+ # A super-class of {SetEthSrcAddr} and {SetEthDstAddr} action.
26
+ #
27
+ class SetEthAddr < Action
28
+ attr_reader :mac_address
29
+
30
+
31
+ #
32
+ # @private
33
+ #
34
+ def initialize mac_address
35
+ @mac_address = Mac.new( mac_address )
36
+ end
37
+ end
38
+ end
39
+
40
+
41
+ ### Local variables:
42
+ ### mode: Ruby
43
+ ### coding: utf-8-unix
44
+ ### indent-tabs-mode: nil
45
+ ### End:
@@ -0,0 +1,54 @@
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/set-eth-addr"
20
+
21
+
22
+ module Trema
23
+ #
24
+ # An action to modify the destination Ethernet address of a packet.
25
+ #
26
+ class SetEthDstAddr < SetEthAddr
27
+ #
28
+ # Creates an action to modify the destination Ethernet address of a packet.
29
+ #
30
+ # @example
31
+ # SetEthDstAddr.new("11:22:33:44:55:66")
32
+ # SetEthDstAddr.new(0x112233445566)
33
+ #
34
+ # @param [String,Integer] mac_address
35
+ # the Ethernet address to create this action with.
36
+ #
37
+ # @raise [ArgumentError] if invalid format is detected.
38
+ # @raise [TypeError] if supplied argument is not a String or Integer.
39
+ #
40
+ def initialize mac_address
41
+ super mac_address
42
+ end
43
+ end
44
+
45
+
46
+ ActionSetDlDst = SetEthDstAddr
47
+ end
48
+
49
+
50
+ ### Local variables:
51
+ ### mode: Ruby
52
+ ### coding: utf-8-unix
53
+ ### indent-tabs-mode: nil
54
+ ### End:
@@ -0,0 +1,54 @@
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/set-eth-addr"
20
+
21
+
22
+ module Trema
23
+ #
24
+ # An action to modify the source Ethernet address of a packet.
25
+ #
26
+ class SetEthSrcAddr < SetEthAddr
27
+ #
28
+ # Creates an action to modify the source Ethernet address of a packet.
29
+ #
30
+ # @example
31
+ # SetEthSrcAddr.new("11:22:33:44:55:66")
32
+ # SetEthSrcAddr.new(0x112233445566)
33
+ #
34
+ # @param [String,Integer] mac_address
35
+ # the Ethernet address to create this action with.
36
+ #
37
+ # @raise [ArgumentError] if invalid format is detected.
38
+ # @raise [TypeError] if supplied argument is not a String or Integer.
39
+ #
40
+ def initialize mac_address
41
+ super mac_address
42
+ end
43
+ end
44
+
45
+
46
+ ActionSetDlSrc = SetEthSrcAddr
47
+ end
48
+
49
+
50
+ ### Local variables:
51
+ ### mode: Ruby
52
+ ### coding: utf-8-unix
53
+ ### indent-tabs-mode: nil
54
+ ### End:
@@ -0,0 +1,47 @@
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/action"
20
+
21
+
22
+ module Trema
23
+ #
24
+ # A super-class of {SetIpSrcAddr} and {SetIpDstAddr} action.
25
+ #
26
+ class SetIpAddr < Action
27
+ attr_reader :ip_address
28
+
29
+
30
+ #
31
+ # @private
32
+ #
33
+ def initialize ip_address
34
+ if not ip_address.is_a?( String )
35
+ raise TypeError, "Source IP address must be an String"
36
+ end
37
+ @ip_address = IPAddr.new( ip_address )
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+ ### Local variables:
44
+ ### mode: Ruby
45
+ ### coding: utf-8-unix
46
+ ### indent-tabs-mode: nil
47
+ ### End:
@@ -0,0 +1,53 @@
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/set-ip-addr"
20
+
21
+
22
+ module Trema
23
+ #
24
+ # An action to modify the IPv4 destination address of a packet.
25
+ #
26
+ class SetIpDstAddr < SetIpAddr
27
+ #
28
+ # Creates an action to modify the IPv4 destination address of a
29
+ # packet.
30
+ #
31
+ # @example
32
+ # SetIpDstAddr.new("192.168.1.1")
33
+ #
34
+ # @param [String] ip_address
35
+ # the IPv4 address to create this action with.
36
+ #
37
+ # @raise [TypeError] if ip_address is not an String.
38
+ #
39
+ def initialize ip_address
40
+ super ip_address
41
+ end
42
+ end
43
+
44
+
45
+ ActionSetNwDst = SetIpDstAddr
46
+ end
47
+
48
+
49
+ ### Local variables:
50
+ ### mode: Ruby
51
+ ### coding: utf-8-unix
52
+ ### indent-tabs-mode: nil
53
+ ### End:
@@ -0,0 +1,52 @@
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/set-ip-addr"
20
+
21
+
22
+ module Trema
23
+ #
24
+ # An action to modify the IPv4 source address of a packet.
25
+ #
26
+ class SetIpSrcAddr < SetIpAddr
27
+ #
28
+ # Creates an action to modify the IPv4 source address of a packet.
29
+ #
30
+ # @example
31
+ # SetIpSrcAddr.new("192.168.1.1")
32
+ #
33
+ # @param [String] ip_address
34
+ # the IPv4 address to create this action with.
35
+ #
36
+ # @raise [TypeError] if ip_address is not an String.
37
+ #
38
+ def initialize ip_address
39
+ super ip_address
40
+ end
41
+ end
42
+
43
+
44
+ ActionSetNwSrc = SetIpSrcAddr
45
+ end
46
+
47
+
48
+ ### Local variables:
49
+ ### mode: Ruby
50
+ ### coding: utf-8-unix
51
+ ### indent-tabs-mode: nil
52
+ ### End: