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.
- data/.gitmodules +3 -0
- data/.travis.yml +13 -0
- data/.yardopts +4 -0
- data/Gemfile +2 -3
- data/README.md +43 -97
- data/Rakefile +60 -4
- data/Rantfile +11 -10
- data/cruise.rb +4 -6
- data/features/example.packetin_filter_config.feature +10 -10
- data/features/example.switch_monitor.feature +14 -2
- data/features/step_definitions/kill_steps.rb +2 -2
- data/features/step_definitions/{off_steps.rb → killall_steps.rb} +2 -2
- data/features/step_definitions/misc_steps.rb +1 -1
- data/features/step_definitions/up_steps.rb +30 -0
- data/features/trema.feature +1 -0
- data/features/trema.run.feature +1 -0
- data/locale/README.ja.md +19 -0
- data/locale/ja/yard.po +3762 -0
- data/locale/yard.pot +3740 -0
- data/ruby/extconf.rb +4 -1
- data/ruby/trema/action-common.c +3 -17
- data/ruby/trema/action-common.h +3 -7
- data/ruby/trema/action.rb +33 -0
- data/ruby/trema/app.rb +1 -1
- data/ruby/trema/barrier-request.c +1 -0
- data/ruby/trema/command/run.rb +13 -9
- data/ruby/trema/command/usage.rb +1 -0
- data/ruby/trema/command/version.rb +1 -1
- data/ruby/trema/controller.c +133 -50
- data/ruby/trema/controller.rb +2 -2
- data/ruby/trema/desc-stats-reply.rb +77 -0
- data/ruby/trema/dsl/configuration.rb +3 -14
- data/ruby/trema/dsl/rswitch.rb +47 -0
- data/ruby/trema/dsl/runner.rb +4 -1
- data/ruby/trema/dsl/syntax.rb +11 -8
- data/ruby/trema/echo-reply.c +59 -45
- data/ruby/trema/echo-reply.h +1 -3
- data/ruby/trema/echo-request.c +49 -71
- data/ruby/trema/echo-request.h +0 -2
- data/ruby/trema/echo.c +99 -0
- data/ruby/trema/{action-enqueue.h → echo.h} +6 -7
- data/ruby/trema/enqueue.rb +87 -0
- data/ruby/trema/error.c +109 -104
- data/ruby/trema/error.h +0 -2
- data/ruby/trema/features-reply.c +89 -35
- data/ruby/trema/features-reply.h +0 -6
- data/ruby/trema/features-request.c +63 -37
- data/ruby/trema/features-request.h +0 -2
- data/ruby/trema/flow-mod.c +149 -0
- data/ruby/trema/{action-output.h → flow-mod.h} +6 -6
- data/ruby/trema/get-config-request.c +1 -0
- data/ruby/trema/hardware-switch.rb +88 -0
- data/ruby/trema/hello.c +55 -31
- data/ruby/trema/hello.h +0 -2
- data/ruby/trema/ip.rb +12 -2
- data/ruby/trema/logger.rb +29 -0
- data/ruby/trema/mac.rb +57 -36
- data/ruby/trema/match.c +7 -9
- data/ruby/trema/monkey-patch/integer/ranges.rb +0 -2
- data/ruby/trema/network-component.rb +1 -1
- data/ruby/trema/open-vswitch.rb +2 -2
- data/ruby/trema/openflow-switch.rb +3 -54
- data/ruby/trema/{packet_in.c → packet-in.c} +262 -175
- data/ruby/trema/{packet_in.h → packet-in.h} +0 -2
- data/ruby/trema/packet-queue.rb +4 -3
- data/ruby/trema/port-mod.c +8 -9
- data/ruby/trema/port-status-add.rb +60 -0
- data/ruby/trema/port-status-delete.rb +60 -0
- data/ruby/trema/port-status-modify.rb +60 -0
- data/ruby/trema/port-status.c +48 -15
- data/ruby/trema/port-status.h +6 -8
- data/ruby/trema/port.c +63 -8
- data/ruby/trema/queue-get-config-request.c +1 -0
- data/ruby/trema/ruby-switch.rb +62 -0
- data/ruby/trema/send-out-port.rb +97 -0
- data/ruby/trema/set-config.c +1 -0
- data/ruby/trema/set-eth-addr.rb +45 -0
- data/ruby/trema/set-eth-dst-addr.rb +54 -0
- data/ruby/trema/set-eth-src-addr.rb +54 -0
- data/ruby/trema/set-ip-addr.rb +47 -0
- data/ruby/trema/set-ip-dst-addr.rb +53 -0
- data/ruby/trema/set-ip-src-addr.rb +52 -0
- data/ruby/trema/set-ip-tos.rb +63 -0
- data/ruby/trema/set-transport-dst-port.rb +53 -0
- data/ruby/trema/set-transport-port.rb +52 -0
- data/ruby/trema/set-transport-src-port.rb +54 -0
- data/ruby/trema/set-vlan-priority.rb +65 -0
- data/ruby/trema/set-vlan-vid.rb +64 -0
- data/ruby/trema/shell/down.rb +1 -1
- data/ruby/trema/shell/link.rb +4 -4
- data/ruby/trema/shell/run.rb +8 -6
- data/ruby/trema/shell/up.rb +3 -3
- data/ruby/trema/stats-reply.c +27 -2
- data/ruby/trema/stats-request.c +64 -23
- data/ruby/trema/strip-vlan-header.rb +41 -0
- data/ruby/trema/switch.c +196 -0
- data/ruby/trema/{action-vendor.h → switch.h} +5 -7
- data/ruby/trema/switch.rb +28 -9
- data/ruby/trema/trema-ruby-utils.c +66 -0
- data/ruby/trema/{action-set-dl-src.h → trema-ruby-utils.h} +9 -11
- data/ruby/trema/trema.c +61 -61
- data/ruby/trema/vendor-action.rb +73 -0
- data/ruby/trema/vendor.c +121 -52
- data/ruby/trema/vendor.h +6 -10
- data/ruby/trema/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/action.rb +52 -0
- data/spec/support/mandatory-option.rb +56 -0
- data/spec/support/openflow-message.rb +91 -7
- data/spec/support/port-status.rb +38 -0
- data/spec/trema/controller_spec.rb +0 -26
- data/spec/trema/dsl/configuration_spec.rb +3 -3
- data/spec/trema/dsl/runner_spec.rb +12 -32
- data/spec/trema/dsl/syntax_spec.rb +2 -11
- data/spec/trema/echo-reply_spec.rb +49 -14
- data/spec/trema/echo-request_spec.rb +86 -34
- data/spec/trema/enqueue_spec.rb +76 -0
- data/spec/trema/error_spec.rb +43 -58
- data/spec/trema/features-reply_spec.rb +58 -24
- data/spec/trema/features-request_spec.rb +54 -28
- data/spec/trema/flow-mod_spec.rb +99 -0
- data/spec/trema/{openflow-switch_spec.rb → hardware-switch_spec.rb} +3 -3
- data/spec/trema/hello_spec.rb +28 -14
- data/spec/trema/ip_spec.rb +54 -0
- data/spec/trema/mac_spec.rb +49 -64
- data/spec/trema/match_spec.rb +1 -1
- data/spec/trema/open-vswitch_spec.rb +7 -7
- data/spec/trema/packet-in_spec.rb +73 -16
- data/spec/trema/port-status-add_spec.rb +32 -0
- data/spec/trema/port-status-delete_spec.rb +32 -0
- data/spec/trema/port-status-modify_spec.rb +71 -0
- data/spec/trema/port-status_spec.rb +5 -76
- data/spec/trema/{action-output_spec.rb → send-out-port_spec.rb} +20 -47
- data/spec/trema/set-eth-dst-addr_spec.rb +75 -0
- data/spec/trema/set-eth-src-addr_spec.rb +72 -0
- data/spec/trema/set-ip-dst-addr_spec.rb +58 -0
- data/spec/trema/set-ip-src-addr_spec.rb +58 -0
- data/spec/trema/set-ip-tos_spec.rb +65 -0
- data/spec/trema/set-transport-dst-port_spec.rb +65 -0
- data/spec/trema/set-transport-src-port_spec.rb +65 -0
- data/spec/trema/set-vlan-priority_spec.rb +65 -0
- data/spec/trema/set-vlan-vid_spec.rb +65 -0
- data/spec/trema/shell/vhost_spec.rb +4 -1
- data/spec/trema/shell/vswitch_spec.rb +11 -11
- data/spec/trema/stats-reply_spec.rb +59 -13
- data/spec/trema/stats-request_spec.rb +6 -0
- data/spec/trema/{action-strip-vlan_spec.rb → strip-vlan-header_spec.rb} +3 -17
- data/spec/trema/switch-daemon_spec.rb +39 -0
- data/spec/trema/vendor-action_spec.rb +81 -0
- data/spec/trema/vendor_spec.rb +76 -0
- data/spec/trema_spec.rb +56 -0
- data/src/examples/dumper/dumper.c +0 -8
- data/src/examples/dumper/dumper.rb +52 -52
- data/src/examples/hello_trema/hello_trema.c +0 -2
- data/src/examples/learning_switch/learning-switch.rb +3 -3
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +3 -3
- data/src/examples/openflow_message/features-request.rb +3 -3
- data/src/examples/packetin_filter_config/utils.c +4 -4
- data/src/examples/repeater_hub/repeater-hub.rb +3 -3
- data/src/examples/switch_info/switch_info.rb +2 -2
- data/src/examples/switch_monitor/switch_monitor.c +1 -1
- data/src/examples/traffic_monitor/traffic-monitor.rb +3 -3
- data/src/lib/arp.h +4 -1
- data/src/lib/chibach.c +391 -0
- data/src/lib/chibach.h +71 -0
- data/src/lib/chibach_private.c +170 -0
- data/src/lib/chibach_private.h +52 -0
- data/src/lib/ether.c +2 -1
- data/src/lib/ether.h +0 -1
- data/src/lib/ipv4.h +13 -14
- data/{ruby/trema/action-set-nw-src.h → src/lib/ipv6.h} +13 -9
- data/src/lib/log.c +161 -58
- data/src/lib/log.h +11 -16
- data/src/lib/messenger.c +36 -1
- data/src/lib/messenger.h +1 -0
- data/src/lib/openflow_application_interface.c +128 -28
- data/src/lib/openflow_application_interface.h +31 -6
- data/src/lib/openflow_message.c +2 -1
- data/src/lib/openflow_service_interface.h +1 -0
- data/src/lib/openflow_switch_interface.c +1380 -0
- data/src/lib/openflow_switch_interface.h +264 -0
- data/src/lib/packet_info.c +94 -11
- data/src/lib/packet_info.h +22 -3
- data/src/lib/packet_parser.c +38 -2
- data/src/lib/secure_channel.c +498 -0
- data/{ruby/trema/vendor-request.h → src/lib/secure_channel.h} +11 -10
- data/src/lib/tcp.h +0 -3
- data/src/lib/trema.c +38 -5
- data/{ruby/trema/action-set-nw-dst.h → src/lib/trema.hpp} +17 -8
- data/src/lib/trema_wrapper.c +5 -0
- data/src/lib/trema_wrapper.h +4 -0
- data/src/lib/utility.c +93 -4
- data/src/lib/utility.h +1 -0
- data/src/lib/wrapper.c +30 -7
- data/src/lib/wrapper.h +2 -0
- data/src/switch_manager/ofpmsg_recv.c +44 -30
- data/src/switch_manager/ofpmsg_send.c +40 -1
- data/src/switch_manager/ofpmsg_send.h +2 -0
- data/src/switch_manager/switch.c +153 -8
- data/src/switch_manager/switch.h +1 -0
- data/src/switch_manager/switchinfo.h +5 -0
- data/src/tremashark/README +2 -2
- data/src/tremashark/plugin/packet-trema/packet-trema.c +1 -0
- data/trema +1 -1
- data/unittests/lib/log_test.c +158 -34
- data/unittests/lib/openflow_application_interface_test.c +252 -69
- data/unittests/lib/openflow_message_test.c +3 -1
- data/unittests/lib/packet_parser_test.c +60 -15
- data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
- data/unittests/lib/trema_test.c +2 -0
- data/unittests/lib/utility_test.c +65 -2
- data/unittests/lib/wrapper_test.c +29 -0
- data/vendor/{README → README.md} +2 -12
- data/vendor/packet-openflow.diff +13 -0
- metadata +86 -53
- data/GPL2 +0 -339
- data/ruby/trema/action-enqueue.c +0 -161
- data/ruby/trema/action-output.c +0 -169
- data/ruby/trema/action-set-dl-dst.c +0 -131
- data/ruby/trema/action-set-dl-dst.h +0 -44
- data/ruby/trema/action-set-dl-src.c +0 -131
- data/ruby/trema/action-set-nw-dst.c +0 -135
- data/ruby/trema/action-set-nw-src.c +0 -140
- data/ruby/trema/action-set-nw-tos.c +0 -124
- data/ruby/trema/action-set-nw-tos.h +0 -42
- data/ruby/trema/action-set-tp-dst.c +0 -122
- data/ruby/trema/action-set-tp-dst.h +0 -42
- data/ruby/trema/action-set-tp-src.c +0 -124
- data/ruby/trema/action-set-tp-src.h +0 -42
- data/ruby/trema/action-set-vlan-pcp.c +0 -128
- data/ruby/trema/action-set-vlan-pcp.h +0 -42
- data/ruby/trema/action-set-vlan-vid.c +0 -125
- data/ruby/trema/action-set-vlan-vid.h +0 -42
- data/ruby/trema/action-strip-vlan.c +0 -81
- data/ruby/trema/action-strip-vlan.h +0 -42
- data/ruby/trema/action-vendor.c +0 -121
- data/ruby/trema/vendor-request.c +0 -193
- data/spec/trema/action-enqueue_spec.rb +0 -100
- data/spec/trema/action-set-dl-dst_spec.rb +0 -95
- data/spec/trema/action-set-dl-src_spec.rb +0 -92
- data/spec/trema/action-set-nw-dst_spec.rb +0 -96
- data/spec/trema/action-set-nw-src_spec.rb +0 -97
- data/spec/trema/action-set-nw-tos_spec.rb +0 -88
- data/spec/trema/action-set-tp-dst_spec.rb +0 -88
- data/spec/trema/action-set-tp-src_spec.rb +0 -88
- data/spec/trema/action-set-vlan-pcp_spec.rb +0 -91
- data/spec/trema/action-set-vlan-vid_spec.rb +0 -91
- data/spec/trema/action-vendor_spec.rb +0 -90
- 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:
|
data/ruby/trema/set-config.c
CHANGED
|
@@ -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:
|