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
data/ruby/trema/controller.rb
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
3
|
-
#
|
|
4
2
|
# Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
#
|
|
6
4
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -19,6 +17,7 @@
|
|
|
19
17
|
|
|
20
18
|
|
|
21
19
|
require "trema/app"
|
|
20
|
+
require "trema/logger"
|
|
22
21
|
require "trema/monkey-patch/integer"
|
|
23
22
|
require "trema/monkey-patch/string"
|
|
24
23
|
require "trema/timers"
|
|
@@ -29,6 +28,7 @@ module Trema
|
|
|
29
28
|
# The base class of Trema controller.
|
|
30
29
|
#
|
|
31
30
|
class Controller < App
|
|
31
|
+
include Logger
|
|
32
32
|
include Timers
|
|
33
33
|
|
|
34
34
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author: Nick Karanatsios <nickkaranatsios@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 "trema/stats-helper"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
module Trema
|
|
25
|
+
class DescStatsReply < StatsHelper
|
|
26
|
+
FIELDS = %w(mfr_desc hw_desc sw_desc serial_num dp_desc )
|
|
27
|
+
FIELDS.each { |field| attr_reader field.intern }
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Descriptive information about a vswitch.
|
|
31
|
+
# A user would not explicitly instantiate a {DescStatsReply} object but
|
|
32
|
+
# would be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_DESC)+
|
|
33
|
+
# message.
|
|
34
|
+
#
|
|
35
|
+
# @overload initialize(options={})
|
|
36
|
+
#
|
|
37
|
+
# @example
|
|
38
|
+
# DescStatsReply.new(
|
|
39
|
+
# :mfr_desc => "Nicira Networks, Inc.",
|
|
40
|
+
# :hw_desc => "Open vSwitch",
|
|
41
|
+
# :sw_desc => "1.2.2"
|
|
42
|
+
# :serial_num => "None"
|
|
43
|
+
# )
|
|
44
|
+
#
|
|
45
|
+
# @param [Hash] options
|
|
46
|
+
# the options to create this instance with.
|
|
47
|
+
#
|
|
48
|
+
# @option options [String] :mfr_desc
|
|
49
|
+
# the manufacturer description.
|
|
50
|
+
#
|
|
51
|
+
# @option options [String] :hw_desc
|
|
52
|
+
# the hardware description.
|
|
53
|
+
#
|
|
54
|
+
# @option options [String] :sw_desc
|
|
55
|
+
# the software description.
|
|
56
|
+
#
|
|
57
|
+
# @option options [String] :serial_num
|
|
58
|
+
# the serial number.
|
|
59
|
+
#
|
|
60
|
+
# @option options [String] :dp_desc
|
|
61
|
+
# the human readable description of datapath.
|
|
62
|
+
#
|
|
63
|
+
# @return [DescStatsReply]
|
|
64
|
+
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_DESC) OpenFlow message.
|
|
65
|
+
#
|
|
66
|
+
def initialize options
|
|
67
|
+
super FIELDS, options
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
### Local variables:
|
|
74
|
+
### mode: Ruby
|
|
75
|
+
### coding: utf-8-unix
|
|
76
|
+
### indent-tabs-mode: nil
|
|
77
|
+
### End:
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
require "trema/app"
|
|
22
22
|
require "trema/host"
|
|
23
23
|
require "trema/link"
|
|
24
|
+
require "trema/openflow-switch"
|
|
24
25
|
require "trema/packetin-filter"
|
|
25
|
-
require "trema/switch"
|
|
26
26
|
require "trema/switch-manager"
|
|
27
27
|
|
|
28
28
|
|
|
@@ -42,16 +42,6 @@ module Trema
|
|
|
42
42
|
#
|
|
43
43
|
attr_accessor :port
|
|
44
44
|
|
|
45
|
-
#
|
|
46
|
-
# use tremashark?
|
|
47
|
-
#
|
|
48
|
-
# @example
|
|
49
|
-
# config.tremashark = true
|
|
50
|
-
#
|
|
51
|
-
# @return [Boolean]
|
|
52
|
-
#
|
|
53
|
-
attr_accessor :tremashark
|
|
54
|
-
|
|
55
45
|
#
|
|
56
46
|
# the hash of {App}
|
|
57
47
|
#
|
|
@@ -90,7 +80,7 @@ module Trema
|
|
|
90
80
|
#
|
|
91
81
|
# @example
|
|
92
82
|
# p config.switches
|
|
93
|
-
# #=> {"switch #0"=>#<Trema::
|
|
83
|
+
# #=> {"switch #0"=>#<Trema::OpenflowSwitch:0xb73c9328>, ...}
|
|
94
84
|
#
|
|
95
85
|
# @return [Hash]
|
|
96
86
|
#
|
|
@@ -107,13 +97,12 @@ module Trema
|
|
|
107
97
|
#
|
|
108
98
|
def initialize
|
|
109
99
|
@port = 6633
|
|
110
|
-
@tremashark = false
|
|
111
100
|
@apps = Trema::App.clear
|
|
112
101
|
@hosts = Trema::Host.clear
|
|
113
102
|
@links = Trema::Link.clear
|
|
114
103
|
@packetin_filter = Trema::PacketinFilter.clear
|
|
115
104
|
@switch_manager = Trema::SwitchManager.clear
|
|
116
|
-
@switches = Trema::
|
|
105
|
+
@switches = Trema::OpenflowSwitch.clear
|
|
117
106
|
end
|
|
118
107
|
|
|
119
108
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#
|
|
2
|
+
# The syntax definition of rswitch { ... } stanza in Trema DSL.
|
|
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 "trema/dsl/switch"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
module Trema
|
|
25
|
+
module DSL
|
|
26
|
+
class Rswitch < Switch
|
|
27
|
+
attr_reader :path
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def initialize name = nil
|
|
31
|
+
super name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def file path
|
|
36
|
+
@path = path
|
|
37
|
+
end
|
|
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:
|
data/ruby/trema/dsl/runner.rb
CHANGED
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
#
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
require "trema/tremashark"
|
|
24
|
+
|
|
25
|
+
|
|
23
26
|
module Trema
|
|
24
27
|
module DSL
|
|
25
28
|
class Runner
|
|
@@ -89,7 +92,7 @@ module Trema
|
|
|
89
92
|
|
|
90
93
|
|
|
91
94
|
def maybe_run_tremashark
|
|
92
|
-
|
|
95
|
+
Trema::Tremashark.new.run if $use_tremashark
|
|
93
96
|
end
|
|
94
97
|
|
|
95
98
|
|
data/ruby/trema/dsl/syntax.rb
CHANGED
|
@@ -22,18 +22,19 @@
|
|
|
22
22
|
|
|
23
23
|
require "trema/app"
|
|
24
24
|
require "trema/dsl/link"
|
|
25
|
+
require "trema/dsl/rswitch"
|
|
25
26
|
require "trema/dsl/run"
|
|
26
27
|
require "trema/dsl/switch"
|
|
27
28
|
require "trema/dsl/vhost"
|
|
28
29
|
require "trema/dsl/vswitch"
|
|
30
|
+
require "trema/hardware-switch"
|
|
29
31
|
require "trema/host"
|
|
30
32
|
require "trema/link"
|
|
31
33
|
require "trema/monkey-patch/module"
|
|
32
34
|
require "trema/open-vswitch"
|
|
33
|
-
require "trema/openflow-switch"
|
|
34
35
|
require "trema/packetin-filter"
|
|
36
|
+
require "trema/ruby-switch"
|
|
35
37
|
require "trema/switch-manager"
|
|
36
|
-
require "trema/tremashark"
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
module Trema
|
|
@@ -44,11 +45,6 @@ module Trema
|
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
|
|
47
|
-
def use_tremashark
|
|
48
|
-
@config.tremashark = Trema::Tremashark.new
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
|
|
52
48
|
def port number
|
|
53
49
|
@config.port = number
|
|
54
50
|
end
|
|
@@ -63,7 +59,7 @@ module Trema
|
|
|
63
59
|
def switch name = nil, &block
|
|
64
60
|
stanza = Trema::DSL::Switch.new( name )
|
|
65
61
|
stanza.instance_eval( &block )
|
|
66
|
-
Trema::
|
|
62
|
+
Trema::HardwareSwitch.new( stanza )
|
|
67
63
|
end
|
|
68
64
|
|
|
69
65
|
|
|
@@ -74,6 +70,13 @@ module Trema
|
|
|
74
70
|
end
|
|
75
71
|
|
|
76
72
|
|
|
73
|
+
def rswitch name = nil, &block
|
|
74
|
+
stanza = Trema::DSL::Rswitch.new( name )
|
|
75
|
+
stanza.instance_eval( &block )
|
|
76
|
+
Trema::RubySwitch.new( stanza )
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
77
80
|
def vhost name = nil, &block
|
|
78
81
|
stanza = Trema::DSL::Vhost.new( name )
|
|
79
82
|
stanza.instance_eval( &block ) if block
|
data/ruby/trema/echo-reply.c
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
2
|
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
*
|
|
6
4
|
* This program is free software; you can redistribute it and/or modify
|
|
@@ -18,8 +16,10 @@
|
|
|
18
16
|
*/
|
|
19
17
|
|
|
20
18
|
|
|
21
|
-
#include "
|
|
19
|
+
#include "echo.h"
|
|
22
20
|
#include "ruby.h"
|
|
21
|
+
#include "trema.h"
|
|
22
|
+
#include "trema-ruby-utils.h"
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
extern VALUE mTrema;
|
|
@@ -28,74 +28,88 @@ VALUE cEchoReply;
|
|
|
28
28
|
|
|
29
29
|
static VALUE
|
|
30
30
|
echo_reply_alloc( VALUE klass ) {
|
|
31
|
-
buffer *
|
|
31
|
+
buffer *body = alloc_buffer();
|
|
32
|
+
buffer *echo_reply = create_echo_reply( 0, body );
|
|
33
|
+
free_buffer( body );
|
|
32
34
|
return Data_Wrap_Struct( klass, NULL, free_buffer, echo_reply );
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
|
|
38
|
+
#if 0
|
|
36
39
|
/*
|
|
37
|
-
* Creates a
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
+
* Creates a EchoReply OpenFlow message. This message can be used to
|
|
41
|
+
* measure the bandwidth of a controller/switch connection as well as
|
|
42
|
+
* to verify its liveness.
|
|
40
43
|
*
|
|
44
|
+
* @overload initialize()
|
|
41
45
|
* @example
|
|
42
46
|
* EchoReply.new
|
|
43
|
-
* EchoReply.new( :transaction_id => 123 )
|
|
44
47
|
*
|
|
48
|
+
* @overload initialize(transaction_id)
|
|
49
|
+
* @example
|
|
50
|
+
* EchoReply.new( 123 )
|
|
51
|
+
* @param [Integer] transaction_id
|
|
52
|
+
* An unsigned 32bit integer number associated with this message.
|
|
53
|
+
*
|
|
54
|
+
* @overload initialize(options)
|
|
55
|
+
* @example
|
|
56
|
+
* EchoReply.new(
|
|
57
|
+
* :transaction_id => transaction_id,
|
|
58
|
+
* :user_data => "Thu Aug 25 13:09:00 +0900 2011"
|
|
59
|
+
* )
|
|
45
60
|
* @param [Hash] options
|
|
46
61
|
* the options to create a message with.
|
|
47
|
-
*
|
|
62
|
+
* @option options [Number] :xid
|
|
48
63
|
* @option options [Number] :transaction_id
|
|
49
|
-
* An unsigned
|
|
50
|
-
*
|
|
51
|
-
* @
|
|
52
|
-
*
|
|
64
|
+
* An unsigned 32bit integer number associated with this message.
|
|
65
|
+
* If not specified, an auto-generated value is set.
|
|
66
|
+
* @option options [String] :user_data
|
|
67
|
+
* the user data field specified as a String may be a message timestamp to check latency,
|
|
68
|
+
* various lengths to measure bandwidth or zero-size(nil) to verify liveness between
|
|
69
|
+
* the switch and controller.
|
|
53
70
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
71
|
+
* @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
|
|
72
|
+
* @raise [ArgumentError] if user data is not a string.
|
|
73
|
+
* @raise [TypeError] if argument is not a hash.
|
|
74
|
+
* @return [EchoReply]
|
|
56
75
|
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
Data_Get_Struct( self, buffer, echo_reply );
|
|
61
|
-
uint32_t xid = get_transaction_id();
|
|
62
|
-
VALUE options;
|
|
63
|
-
|
|
64
|
-
if ( rb_scan_args( argc, argv, "01", &options ) == 1 ) {
|
|
65
|
-
Check_Type( options, T_HASH );
|
|
66
|
-
VALUE xid_ruby;
|
|
67
|
-
if ( ( xid_ruby = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) ) ) != Qnil ) {
|
|
68
|
-
if ( rb_funcall( xid_ruby, rb_intern( "unsigned_32bit?" ), 0 ) == Qfalse ) {
|
|
69
|
-
rb_raise( rb_eArgError, "Transaction ID must be an unsigned 32-bit integer" );
|
|
70
|
-
}
|
|
71
|
-
xid = ( uint32_t ) NUM2UINT( xid_ruby );
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
( ( struct ofp_header * ) ( echo_reply->data ) )->xid = htonl( xid );
|
|
75
|
-
return self;
|
|
76
|
-
}
|
|
76
|
+
VALUE
|
|
77
|
+
echo_init( int argc, VALUE *argv, VALUE self ) {}
|
|
78
|
+
#endif
|
|
77
79
|
|
|
78
80
|
|
|
81
|
+
#if 0
|
|
79
82
|
/*
|
|
80
|
-
* Transaction ids, message sequence numbers matching requests to
|
|
83
|
+
* Transaction ids, message sequence numbers matching requests to
|
|
84
|
+
* replies.
|
|
81
85
|
*
|
|
82
86
|
* @return [Number] the value of transaction id.
|
|
83
87
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
VALUE
|
|
89
|
+
echo_transaction_id( VALUE self ) {}
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
#if 0
|
|
94
|
+
/*
|
|
95
|
+
* An arbitrary length user data payload.
|
|
96
|
+
*
|
|
97
|
+
* @return [String] a user data payload is set.
|
|
98
|
+
* @return [nil] a user data payload is not set.
|
|
99
|
+
*/
|
|
100
|
+
VALUE
|
|
101
|
+
echo_user_data( VALUE self ) {}
|
|
102
|
+
#endif
|
|
91
103
|
|
|
92
104
|
|
|
93
105
|
void
|
|
94
106
|
Init_echo_reply() {
|
|
95
107
|
cEchoReply = rb_define_class_under( mTrema, "EchoReply", rb_cObject );
|
|
96
108
|
rb_define_alloc_func( cEchoReply, echo_reply_alloc );
|
|
97
|
-
rb_define_method( cEchoReply, "initialize",
|
|
98
|
-
rb_define_method( cEchoReply, "transaction_id",
|
|
109
|
+
rb_define_method( cEchoReply, "initialize", echo_init, -1 );
|
|
110
|
+
rb_define_method( cEchoReply, "transaction_id", echo_transaction_id, 0 );
|
|
111
|
+
rb_alias( cEchoReply, rb_intern( "xid" ), rb_intern( "transaction_id" ) );
|
|
112
|
+
rb_define_method( cEchoReply, "user_data", echo_user_data, 0 );
|
|
99
113
|
}
|
|
100
114
|
|
|
101
115
|
|
data/ruby/trema/echo-reply.h
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
2
|
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
*
|
|
6
4
|
* This program is free software; you can redistribute it and/or modify
|
|
@@ -39,4 +37,4 @@ void Init_echo_reply( void );
|
|
|
39
37
|
* c-basic-offset: 2
|
|
40
38
|
* indent-tabs-mode: nil
|
|
41
39
|
* End:
|
|
42
|
-
*/
|
|
40
|
+
*/
|
data/ruby/trema/echo-request.c
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
2
|
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
*
|
|
6
4
|
* This program is free software; you can redistribute it and/or modify
|
|
@@ -18,117 +16,97 @@
|
|
|
18
16
|
*/
|
|
19
17
|
|
|
20
18
|
|
|
21
|
-
#include "
|
|
19
|
+
#include "echo.h"
|
|
22
20
|
#include "ruby.h"
|
|
21
|
+
#include "trema.h"
|
|
22
|
+
#include "trema-ruby-utils.h"
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
extern VALUE mTrema;
|
|
26
26
|
VALUE cEchoRequest;
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
static VALUE
|
|
30
|
+
echo_request_alloc( VALUE klass ) {
|
|
31
|
+
return Data_Wrap_Struct( klass, NULL, free_buffer, create_echo_request( 0, NULL ) );
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
#if 0
|
|
29
36
|
/*
|
|
30
|
-
*
|
|
31
|
-
* controller/switch connection as well as
|
|
37
|
+
* Creates a EchoRequest OpenFlow message. This message can be used to
|
|
38
|
+
* measure the bandwidth of a controller/switch connection as well as
|
|
39
|
+
* to verify its liveness.
|
|
40
|
+
*
|
|
41
|
+
* @overload initialize()
|
|
42
|
+
* @example
|
|
43
|
+
* EchoRequest.new
|
|
44
|
+
*
|
|
45
|
+
* @overload initialize(transaction_id)
|
|
46
|
+
* @example
|
|
47
|
+
* EchoRequest.new( 123 )
|
|
48
|
+
* @param [Integer] transaction_id
|
|
49
|
+
* An unsigned 32bit integer number associated with this message.
|
|
32
50
|
*
|
|
33
|
-
* @overload initialize(options
|
|
51
|
+
* @overload initialize(options)
|
|
34
52
|
* @example
|
|
35
53
|
* EchoRequest.new(
|
|
36
54
|
* :transaction_id => transaction_id,
|
|
37
55
|
* :user_data => "Thu Aug 25 13:09:00 +0900 2011"
|
|
38
56
|
* )
|
|
39
|
-
*
|
|
40
57
|
* @param [Hash] options
|
|
41
58
|
* the options to create a message with.
|
|
42
|
-
*
|
|
59
|
+
* @option options [Number] :xid
|
|
43
60
|
* @option options [Number] :transaction_id
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
61
|
+
* An unsigned 32bit integer number associated with this message.
|
|
62
|
+
* If not specified, an auto-generated value is set.
|
|
47
63
|
* @option options [String] :user_data
|
|
48
64
|
* the user data field specified as a String may be a message timestamp to check latency,
|
|
49
65
|
* various lengths to measure bandwidth or zero-size(nil) to verify liveness between
|
|
50
66
|
* the switch and controller.
|
|
51
67
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* @return [EchoRequest]
|
|
57
|
-
* an object that encapsulates the +OPFT_ECHO_REQUEST+ OpenFlow message.
|
|
68
|
+
* @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
|
|
69
|
+
* @raise [ArgumentError] if user data is not a string.
|
|
70
|
+
* @raise [TypeError] if argument is not a hash.
|
|
71
|
+
* @return [EchoRequest]
|
|
58
72
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
buffer *body = NULL;
|
|
63
|
-
uint32_t xid = get_transaction_id();
|
|
64
|
-
VALUE options;
|
|
65
|
-
|
|
66
|
-
if ( rb_scan_args( argc, argv, "01", &options ) == 1 ) {
|
|
67
|
-
Check_Type( options, T_HASH );
|
|
68
|
-
VALUE xid_ruby;
|
|
69
|
-
if ( ( xid_ruby = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) ) ) != Qnil ) {
|
|
70
|
-
if ( rb_funcall( xid_ruby, rb_intern( "unsigned_32bit?" ), 0 ) == Qfalse ) {
|
|
71
|
-
rb_raise( rb_eArgError, "Transaction ID must be an unsigned 32-bit integer" );
|
|
72
|
-
}
|
|
73
|
-
xid = ( uint32_t ) NUM2UINT( xid_ruby );
|
|
74
|
-
}
|
|
75
|
-
VALUE user_data;
|
|
76
|
-
if ( ( user_data = rb_hash_aref( options, ID2SYM( rb_intern( "user_data" ) ) ) ) != Qnil ) {
|
|
77
|
-
if ( rb_obj_is_kind_of( user_data, rb_cString ) == Qfalse ) {
|
|
78
|
-
rb_raise( rb_eArgError, "User data must be a string" );
|
|
79
|
-
}
|
|
80
|
-
uint16_t length = ( u_int16_t ) RSTRING_LEN( user_data );
|
|
81
|
-
body = alloc_buffer_with_length( length );
|
|
82
|
-
void *p = append_back_buffer( body, length );
|
|
83
|
-
memcpy( p, RSTRING_PTR( user_data ), length );
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
echo_request = create_echo_request( xid, body );
|
|
87
|
-
if ( body != NULL ) {
|
|
88
|
-
free_buffer( body );
|
|
89
|
-
}
|
|
90
|
-
return Data_Wrap_Struct( klass, NULL, free_buffer, echo_request );
|
|
91
|
-
}
|
|
73
|
+
VALUE
|
|
74
|
+
echo_init( int argc, VALUE *argv, VALUE self ) {}
|
|
75
|
+
#endif
|
|
92
76
|
|
|
93
77
|
|
|
78
|
+
#if 0
|
|
94
79
|
/*
|
|
95
|
-
* Transaction ids, message sequence numbers matching requests to
|
|
80
|
+
* Transaction ids, message sequence numbers matching requests to
|
|
81
|
+
* replies.
|
|
96
82
|
*
|
|
97
83
|
* @return [Number] the value of transaction id.
|
|
98
84
|
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Data_Get_Struct( self, buffer, echo_request );
|
|
103
|
-
uint32_t xid = ntohl( ( ( struct ofp_header * ) ( echo_request->data ) )->xid );
|
|
104
|
-
return UINT2NUM( xid );
|
|
105
|
-
}
|
|
85
|
+
VALUE
|
|
86
|
+
echo_transaction_id( VALUE self ) {}
|
|
87
|
+
#endif
|
|
106
88
|
|
|
107
89
|
|
|
90
|
+
#if 0
|
|
108
91
|
/*
|
|
109
92
|
* An arbitrary length user data payload.
|
|
110
93
|
*
|
|
111
94
|
* @return [String] a user data payload is set.
|
|
112
95
|
* @return [nil] a user data payload is not set.
|
|
113
96
|
*/
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
Data_Get_Struct( self, buffer, echo_request );
|
|
118
|
-
if ( echo_request->length > sizeof( struct ofp_header ) ) {
|
|
119
|
-
return rb_str_new( ( char * ) echo_request->data + sizeof( struct ofp_header ),
|
|
120
|
-
( long ) ( echo_request->length - sizeof( struct ofp_header ) ) );
|
|
121
|
-
}
|
|
122
|
-
return Qnil;
|
|
123
|
-
}
|
|
97
|
+
VALUE
|
|
98
|
+
echo_user_data( VALUE self ) {}
|
|
99
|
+
#endif
|
|
124
100
|
|
|
125
101
|
|
|
126
102
|
void
|
|
127
103
|
Init_echo_request() {
|
|
128
104
|
cEchoRequest = rb_define_class_under( mTrema, "EchoRequest", rb_cObject );
|
|
129
|
-
|
|
130
|
-
rb_define_method( cEchoRequest, "
|
|
131
|
-
rb_define_method( cEchoRequest, "
|
|
105
|
+
rb_define_alloc_func( cEchoRequest, echo_request_alloc );
|
|
106
|
+
rb_define_method( cEchoRequest, "initialize", echo_init, -1 );
|
|
107
|
+
rb_define_method( cEchoRequest, "transaction_id", echo_transaction_id, 0 );
|
|
108
|
+
rb_alias( cEchoRequest, rb_intern( "xid" ), rb_intern( "transaction_id" ) );
|
|
109
|
+
rb_define_method( cEchoRequest, "user_data", echo_user_data, 0 );
|
|
132
110
|
}
|
|
133
111
|
|
|
134
112
|
|