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
|
@@ -0,0 +1,63 @@
|
|
|
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 modify the IP ToS/DSCP field of a packet.
|
|
26
|
+
#
|
|
27
|
+
class SetIpTos < Action
|
|
28
|
+
attr_reader :type_of_service
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# Creates an action to modify the IP ToS/DSCP field of a packet.
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# SetIpTos.new(32)
|
|
36
|
+
#
|
|
37
|
+
# @param [Integer] :type_of_service
|
|
38
|
+
# the ToS/DSCP field to set to.
|
|
39
|
+
#
|
|
40
|
+
# @raise [ArgumentError] if type_of_service argument is not an unsigned 8-bit Integer.
|
|
41
|
+
# @raise [TypeError] if type_of_service argument is not an Integer.
|
|
42
|
+
#
|
|
43
|
+
def initialize type_of_service
|
|
44
|
+
if not type_of_service.is_a?( Integer )
|
|
45
|
+
raise TypeError, "ToS must be an unsigned 8-bit integer"
|
|
46
|
+
end
|
|
47
|
+
if not type_of_service.unsigned_8bit?
|
|
48
|
+
raise ArgumentError, "ToS must be an unsigned 8-bit integer"
|
|
49
|
+
end
|
|
50
|
+
@type_of_service = type_of_service
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
ActionSetNwTos = SetIpTos
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
### Local variables:
|
|
60
|
+
### mode: Ruby
|
|
61
|
+
### coding: utf-8-unix
|
|
62
|
+
### indent-tabs-mode: nil
|
|
63
|
+
### 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-transport-port"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module Trema
|
|
23
|
+
#
|
|
24
|
+
# An action to modify the destination TCP/UDP port of a packet.
|
|
25
|
+
#
|
|
26
|
+
class SetTransportDstPort < SetTransportPort
|
|
27
|
+
#
|
|
28
|
+
# Creates an action to modify the destination TCP/UDP port of a packet.
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
# SetTransportDstPort.new( 5555 )
|
|
32
|
+
#
|
|
33
|
+
# @param [Integer] port_number
|
|
34
|
+
# the destination TCP/UDP port number. Any numeric 16-bit value.
|
|
35
|
+
#
|
|
36
|
+
# @raise [ArgumentError] if port_number is not an unsigned 16-bit Integer.
|
|
37
|
+
# @raise [TypeError] if port_number is not an Integer.
|
|
38
|
+
#
|
|
39
|
+
def initialize port_number
|
|
40
|
+
super port_number
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
ActionSetTpDst = SetTransportDstPort
|
|
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/action"
|
|
20
|
+
require "trema/monkey-patch/integer"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Trema
|
|
24
|
+
#
|
|
25
|
+
# A super-class of {SetTransportSrcPort} and {SetTransportDstPort} action.
|
|
26
|
+
#
|
|
27
|
+
class SetTransportPort < Action
|
|
28
|
+
attr_reader :port_number
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# @private
|
|
33
|
+
#
|
|
34
|
+
def initialize port_number
|
|
35
|
+
error_message = "TCP/UDP port must be an unsigned 16-bit integer"
|
|
36
|
+
if not port_number.is_a?( Integer )
|
|
37
|
+
raise TypeError, error_message
|
|
38
|
+
end
|
|
39
|
+
if not port_number.unsigned_16bit?
|
|
40
|
+
raise ArgumentError, error_message
|
|
41
|
+
end
|
|
42
|
+
@port_number = port_number
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### Local variables:
|
|
49
|
+
### mode: Ruby
|
|
50
|
+
### coding: utf-8-unix
|
|
51
|
+
### indent-tabs-mode: nil
|
|
52
|
+
### 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/monkey-patch/integer"
|
|
20
|
+
require "trema/set-transport-port"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Trema
|
|
24
|
+
#
|
|
25
|
+
# An action to modify the source TCP/UDP port of a packet.
|
|
26
|
+
#
|
|
27
|
+
class SetTransportSrcPort < SetTransportPort
|
|
28
|
+
#
|
|
29
|
+
# Creates an action to modify the source TCP/UDP port of a packet.
|
|
30
|
+
#
|
|
31
|
+
# @example
|
|
32
|
+
# SetTransportSrcPort.new( 5555 )
|
|
33
|
+
#
|
|
34
|
+
# @param [Integer] port_number
|
|
35
|
+
# the source TCP or UDP port number. Any numeric 16-bit value.
|
|
36
|
+
#
|
|
37
|
+
# @raise [ArgumentError] if port_number is not an unsigned 16-bit Integer.
|
|
38
|
+
# @raise [TypeError] if port_number is not an Integer.
|
|
39
|
+
#
|
|
40
|
+
def initialize port_number
|
|
41
|
+
super port_number
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
ActionSetTpSrc = SetTransportSrcPort
|
|
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,65 @@
|
|
|
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
|
+
# An action to modify the VLAN priority of a packet.
|
|
25
|
+
#
|
|
26
|
+
class SetVlanPriority < Action
|
|
27
|
+
attr_reader :vlan_priority
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Creates an action to modify the VLAN priority of a
|
|
32
|
+
# packet. Priority bits can be used to prioritize different
|
|
33
|
+
# classes of traffic. Valid values are between 0 (lowest) and 7
|
|
34
|
+
# (highest).
|
|
35
|
+
#
|
|
36
|
+
# @example
|
|
37
|
+
# SetVlanPriority.new( 7 )
|
|
38
|
+
#
|
|
39
|
+
# @param [Integer] vlan_priority
|
|
40
|
+
# the VLAN priority to set to.
|
|
41
|
+
#
|
|
42
|
+
# @raise [ArgumentError] if vlan_priority is not within 0 and 7 inclusive.
|
|
43
|
+
# @raise [TypeError] if vlan_priority is not an Integer.
|
|
44
|
+
#
|
|
45
|
+
def initialize vlan_priority
|
|
46
|
+
if not vlan_priority.is_a?( Integer )
|
|
47
|
+
raise TypeError, "VLAN priority must be an unsigned 8-bit Integer"
|
|
48
|
+
end
|
|
49
|
+
if not ( vlan_priority >= 0 and vlan_priority <= 7 )
|
|
50
|
+
raise ArgumentError, "Valid VLAN priority values are 0 to 7 inclusive"
|
|
51
|
+
end
|
|
52
|
+
@vlan_priority = vlan_priority
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
ActionSetVlanPcp = SetVlanPriority
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### Local variables:
|
|
62
|
+
### mode: Ruby
|
|
63
|
+
### coding: utf-8-unix
|
|
64
|
+
### indent-tabs-mode: nil
|
|
65
|
+
### End:
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
# An action to modify the VLAN ID of a packet.
|
|
25
|
+
#
|
|
26
|
+
class SetVlanVid < Action
|
|
27
|
+
attr_reader :vlan_id
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Creates an action to modify the VLAN ID of a packet. The VLAN ID
|
|
32
|
+
# is 16-bits long but the actual VID (VLAN Identifier) of the IEEE
|
|
33
|
+
# 802.1Q frame is 12-bits.
|
|
34
|
+
#
|
|
35
|
+
# @example
|
|
36
|
+
# ActionSetVlanVid.new( vlan_id )
|
|
37
|
+
#
|
|
38
|
+
# @param [Integer] vlan_id
|
|
39
|
+
# the VLAN ID to set to. Only the lower 12-bits are used.
|
|
40
|
+
#
|
|
41
|
+
# @raise [ArgumentError] if vlan_id not within 1 and 4096 inclusive.
|
|
42
|
+
# @raise [TypeError] if vlan_id is not an Integer.
|
|
43
|
+
#
|
|
44
|
+
def initialize vlan_id
|
|
45
|
+
if not vlan_id.is_a?( Integer )
|
|
46
|
+
raise TypeError, "VLAN ID argument must be an Integer"
|
|
47
|
+
end
|
|
48
|
+
if not ( vlan_id >= 1 and vlan_id <= 4096 )
|
|
49
|
+
raise ArgumentError, "Valid VLAN ID values between 1 to 4096 inclusive"
|
|
50
|
+
end
|
|
51
|
+
@vlan_id = vlan_id
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
ActionSetVlanVid = SetVlanVid
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Local variables:
|
|
61
|
+
### mode: Ruby
|
|
62
|
+
### coding: utf-8-unix
|
|
63
|
+
### indent-tabs-mode: nil
|
|
64
|
+
### End:
|
data/ruby/trema/shell/down.rb
CHANGED
data/ruby/trema/shell/link.rb
CHANGED
|
@@ -30,11 +30,11 @@ module Trema
|
|
|
30
30
|
link = Link.new( stanza )
|
|
31
31
|
link.enable!
|
|
32
32
|
|
|
33
|
-
if
|
|
34
|
-
|
|
33
|
+
if OpenflowSwitch[ peer0 ]
|
|
34
|
+
OpenflowSwitch[ peer0 ] << link.name
|
|
35
35
|
end
|
|
36
|
-
if
|
|
37
|
-
|
|
36
|
+
if OpenflowSwitch[ peer1 ]
|
|
37
|
+
OpenflowSwitch[ peer1 ] << link.name_peer
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
if Host[ peer0 ]
|
data/ruby/trema/shell/run.rb
CHANGED
|
@@ -29,15 +29,17 @@ module Trema
|
|
|
29
29
|
sanity_check
|
|
30
30
|
|
|
31
31
|
if controller
|
|
32
|
-
if
|
|
33
|
-
stanza = DSL::Run.new
|
|
34
|
-
stanza.path controller
|
|
35
|
-
App.new stanza
|
|
36
|
-
else
|
|
32
|
+
if /\.rb\Z/=~ controller.split.first
|
|
37
33
|
require "trema"
|
|
34
|
+
include Trema
|
|
38
35
|
ARGV.replace controller.split
|
|
39
36
|
$LOAD_PATH << File.dirname( controller )
|
|
40
|
-
|
|
37
|
+
load controller
|
|
38
|
+
else
|
|
39
|
+
# Assume that the controller is written in C
|
|
40
|
+
stanza = Trema::DSL::Run.new
|
|
41
|
+
stanza.path controller
|
|
42
|
+
Trema::App.new( stanza )
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
|
data/ruby/trema/shell/up.rb
CHANGED
|
@@ -26,10 +26,10 @@ require "trema/dsl"
|
|
|
26
26
|
module Trema
|
|
27
27
|
module Shell
|
|
28
28
|
def up name
|
|
29
|
-
if
|
|
30
|
-
|
|
29
|
+
if OpenflowSwitch[ name ].running?
|
|
30
|
+
OpenflowSwitch[ name ].restart!
|
|
31
31
|
else
|
|
32
|
-
|
|
32
|
+
OpenflowSwitch[ name ].run!
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
data/ruby/trema/stats-reply.c
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
#include <arpa/inet.h>
|
|
21
22
|
#include "trema.h"
|
|
22
23
|
#include "ruby.h"
|
|
23
24
|
#include "action-common.h"
|
|
@@ -140,6 +141,7 @@ stats_reply_stats( VALUE self ) {
|
|
|
140
141
|
|
|
141
142
|
void
|
|
142
143
|
Init_stats_reply() {
|
|
144
|
+
rb_require( "trema/desc-stats-reply" );
|
|
143
145
|
rb_require( "trema/flow-stats-reply" );
|
|
144
146
|
rb_require( "trema/aggregate-stats-reply" );
|
|
145
147
|
rb_require( "trema/table-stats-reply" );
|
|
@@ -296,6 +298,28 @@ handle_stats_reply(
|
|
|
296
298
|
|
|
297
299
|
uint16_t body_length = ( uint16_t ) body->length;
|
|
298
300
|
switch ( type ) {
|
|
301
|
+
case OFPST_DESC:
|
|
302
|
+
{
|
|
303
|
+
struct ofp_desc_stats *desc_stats = ( struct ofp_desc_stats * ) body->data;
|
|
304
|
+
VALUE options = rb_hash_new();
|
|
305
|
+
VALUE desc_stats_arr = rb_ary_new();
|
|
306
|
+
VALUE desc_stats_reply;
|
|
307
|
+
|
|
308
|
+
rb_hash_aset( options, ID2SYM( rb_intern( "mfr_desc" ) ),
|
|
309
|
+
rb_str_new( desc_stats->mfr_desc, ( long ) strnlen( desc_stats->mfr_desc, DESC_STR_LEN - 1 ) ) );
|
|
310
|
+
rb_hash_aset( options, ID2SYM( rb_intern( "hw_desc" ) ),
|
|
311
|
+
rb_str_new( desc_stats->hw_desc, ( long ) strnlen( desc_stats->hw_desc, DESC_STR_LEN - 1 ) ) );
|
|
312
|
+
rb_hash_aset( options, ID2SYM( rb_intern( "sw_desc" ) ),
|
|
313
|
+
rb_str_new( desc_stats->sw_desc, ( long ) strnlen( desc_stats->sw_desc, DESC_STR_LEN - 1 ) ) );
|
|
314
|
+
rb_hash_aset( options, ID2SYM( rb_intern( "serial_num" ) ),
|
|
315
|
+
rb_str_new( desc_stats->serial_num, ( long ) strnlen( desc_stats->serial_num, SERIAL_NUM_LEN - 1 ) ) );
|
|
316
|
+
rb_hash_aset( options, ID2SYM( rb_intern( "dp_desc" ) ),
|
|
317
|
+
rb_str_new( desc_stats->dp_desc, ( long ) strnlen( desc_stats->dp_desc, DESC_STR_LEN - 1 ) ) );
|
|
318
|
+
desc_stats_reply = rb_funcall( rb_eval_string( " Trema::DescStatsReply" ), rb_intern( "new" ), 1, options );
|
|
319
|
+
rb_ary_push( desc_stats_arr, desc_stats_reply );
|
|
320
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), desc_stats_arr );
|
|
321
|
+
}
|
|
322
|
+
break;
|
|
299
323
|
case OFPST_FLOW:
|
|
300
324
|
{
|
|
301
325
|
struct ofp_flow_stats *flow_stats;
|
|
@@ -304,11 +328,12 @@ handle_stats_reply(
|
|
|
304
328
|
VALUE flow_stats_reply;
|
|
305
329
|
VALUE match_obj;
|
|
306
330
|
VALUE options = rb_hash_new();
|
|
307
|
-
VALUE actions_arr
|
|
331
|
+
VALUE actions_arr;
|
|
308
332
|
|
|
309
333
|
flow_stats = ( struct ofp_flow_stats * ) body->data;
|
|
310
334
|
|
|
311
335
|
while ( body_length > 0 ) {
|
|
336
|
+
actions_arr = rb_ary_new();
|
|
312
337
|
|
|
313
338
|
match_obj = rb_funcall( rb_eval_string( "Match.new" ), rb_intern( "replace" ), 1, Data_Wrap_Struct( cStatsReply, NULL, NULL, &flow_stats->match ) );
|
|
314
339
|
rb_hash_aset( options, ID2SYM( rb_intern( "length" ) ), UINT2NUM( flow_stats->length ) );
|
|
@@ -471,7 +496,7 @@ handle_stats_reply(
|
|
|
471
496
|
}
|
|
472
497
|
|
|
473
498
|
VALUE r_stats_reply = rb_funcall( cStatsReply, rb_intern( "new" ), 1, attributes );
|
|
474
|
-
rb_funcall( controller, rb_intern( "stats_reply" ),
|
|
499
|
+
rb_funcall( controller, rb_intern( "stats_reply" ), 2, ULL2NUM( datapath_id ), r_stats_reply );
|
|
475
500
|
}
|
|
476
501
|
|
|
477
502
|
|