trema 0.4.6 → 0.4.7
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.travis.yml +24 -7
- data/Gemfile +19 -27
- data/Guardfile +6 -0
- data/README.md +13 -5
- data/Rakefile +418 -415
- data/bin/quality +2 -2
- data/bin/trema +103 -105
- data/bin/trema-config +7 -7
- data/build.rb +2 -2
- data/cruise.rb +109 -83
- data/features/dsl/switch_port_specifier.feature +1 -1
- data/features/examples/dumper.feature +9 -41
- data/features/examples/hello_trema.feature +1 -1
- data/features/examples/learning_switch.feature +7 -7
- data/features/examples/list_switches.feature +5 -5
- data/features/examples/message.set_config.feature +11 -11
- data/features/examples/message.vendor-action.feature +7 -7
- data/features/examples/message.vendor-stats-request.feature +1 -1
- data/features/examples/multi_learning_switch.feature +7 -7
- data/features/examples/openflow_message.echo.feature +15 -15
- data/features/examples/openflow_message.features_request.feature +12 -12
- data/features/examples/openflow_message.hello.feature +13 -13
- data/features/examples/packet_in.feature +8 -8
- data/features/examples/patch_panel.feature +1 -1
- data/features/examples/repeater_hub.feature +7 -7
- data/features/examples/switch_info.feature +16 -16
- data/features/examples/switch_monitor.feature +11 -11
- data/features/examples/transparent_firewall.feature +73 -0
- data/features/handlers/switch_ready.feature +1 -1
- data/features/step_definitions/misc_steps.rb +24 -24
- data/features/step_definitions/send_packets_steps.rb +2 -2
- data/features/step_definitions/stats_steps.rb +6 -6
- data/features/support/env.rb +15 -15
- data/features/support/hooks.rb +9 -9
- data/features/switch_event/add_forward_entry.feature +3 -3
- data/features/switch_event/delete_forward_entry.feature +3 -3
- data/features/switch_event/dump_forward_entries.feature +2 -2
- data/features/switch_event/set_forward_entries.feature +2 -2
- data/features/trema_commands/dump_flows.feature +1 -0
- data/features/trema_commands/help.feature +1 -0
- data/features/trema_commands/help_option.feature +1 -0
- data/features/trema_commands/kill.feature +1 -0
- data/features/trema_commands/killall.feature +1 -0
- data/features/trema_commands/port_down.feature +1 -0
- data/features/trema_commands/port_up.feature +1 -0
- data/features/trema_commands/reset_stats.feature +1 -0
- data/features/trema_commands/run.feature +1 -0
- data/features/trema_commands/send_packets.feature +2 -1
- data/features/trema_commands/show_stats.feature +1 -0
- data/features/trema_commands/up.feature +1 -0
- data/features/trema_commands/version.feature +1 -0
- data/features/trema_commands/version_option.feature +1 -0
- data/rubocop-todo.yml +159 -0
- data/ruby/blocker.rb +15 -17
- data/ruby/extconf.rb +19 -19
- data/ruby/sub-process.rb +29 -29
- data/ruby/trema/aggregate-stats-reply.rb +2 -2
- data/ruby/trema/app.rb +13 -13
- data/ruby/trema/cli.rb +45 -45
- data/ruby/trema/command.rb +14 -14
- data/ruby/trema/command/dump_flows.rb +5 -5
- data/ruby/trema/command/kill.rb +13 -13
- data/ruby/trema/command/killall.rb +1 -1
- data/ruby/trema/command/netns.rb +3 -3
- data/ruby/trema/command/port_down.rb +7 -7
- data/ruby/trema/command/port_up.rb +7 -7
- data/ruby/trema/command/reset_stats.rb +6 -6
- data/ruby/trema/command/ruby.rb +2 -2
- data/ruby/trema/command/run.rb +23 -23
- data/ruby/trema/command/send_packets.rb +9 -9
- data/ruby/trema/command/shell.rb +14 -16
- data/ruby/trema/command/show_stats.rb +9 -9
- data/ruby/trema/command/up.rb +4 -4
- data/ruby/trema/command/version.rb +1 -1
- data/ruby/trema/controller.rb +10 -10
- data/ruby/trema/custom-switch.rb +4 -4
- data/ruby/trema/daemon.rb +21 -21
- data/ruby/trema/desc-stats-reply.rb +2 -2
- data/ruby/trema/dsl.rb +5 -5
- data/ruby/trema/dsl/configuration.rb +7 -7
- data/ruby/trema/dsl/context.rb +10 -10
- data/ruby/trema/dsl/custom-switch.rb +3 -3
- data/ruby/trema/dsl/link.rb +2 -2
- data/ruby/trema/dsl/netns.rb +9 -9
- data/ruby/trema/dsl/parser.rb +14 -14
- data/ruby/trema/dsl/rswitch.rb +3 -3
- data/ruby/trema/dsl/run.rb +4 -4
- data/ruby/trema/dsl/runner.rb +20 -20
- data/ruby/trema/dsl/stanza.rb +5 -5
- data/ruby/trema/dsl/switch.rb +14 -14
- data/ruby/trema/dsl/syntax.rb +54 -54
- data/ruby/trema/dsl/vhost.rb +9 -9
- data/ruby/trema/dsl/vswitch.rb +4 -4
- data/ruby/trema/enqueue.rb +11 -11
- data/ruby/trema/exact-match.rb +1 -1
- data/ruby/trema/executables.rb +19 -19
- data/ruby/trema/flow-stats-reply.rb +2 -2
- data/ruby/trema/flow.rb +8 -8
- data/ruby/trema/hardware-switch.rb +2 -2
- data/ruby/trema/host.rb +18 -18
- data/ruby/trema/link.rb +9 -9
- data/ruby/trema/mac.rb +1 -5
- data/ruby/trema/match.c +0 -1
- data/ruby/trema/monkey-patch/integer.rb +3 -3
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +1 -1
- data/ruby/trema/monkey-patch/integer/ranges.rb +2 -2
- data/ruby/trema/monkey-patch/integer/validators.rb +1 -1
- data/ruby/trema/monkey-patch/module.rb +2 -2
- data/ruby/trema/monkey-patch/module/class-method.rb +2 -2
- data/ruby/trema/monkey-patch/module/deprecation.rb +1 -1
- data/ruby/trema/monkey-patch/string.rb +1 -1
- data/ruby/trema/monkey-patch/string/inflectors.rb +7 -7
- data/ruby/trema/netns.rb +6 -6
- data/ruby/trema/network-component.rb +7 -7
- data/ruby/trema/ofctl.rb +13 -13
- data/ruby/trema/open-vswitch.rb +25 -25
- data/ruby/trema/openflow-switch.rb +1 -1
- data/ruby/trema/ordered-hash.rb +8 -8
- data/ruby/trema/packet-in.c +0 -1
- data/ruby/trema/packet-queue.rb +8 -8
- data/ruby/trema/packetin-filter.rb +9 -9
- data/ruby/trema/path.rb +32 -32
- data/ruby/trema/phost.rb +5 -5
- data/ruby/trema/port-mod.c +0 -1
- data/ruby/trema/port-stats-reply.rb +2 -2
- data/ruby/trema/port-status-add.rb +2 -2
- data/ruby/trema/port-status-delete.rb +2 -2
- data/ruby/trema/port-status-modify.rb +2 -2
- data/ruby/trema/port.c +0 -1
- data/ruby/trema/process.rb +7 -7
- data/ruby/trema/queue-stats-reply.rb +2 -2
- data/ruby/trema/ruby-switch.rb +6 -6
- data/ruby/trema/send-out-port.rb +11 -11
- data/ruby/trema/set-eth-addr.rb +5 -5
- data/ruby/trema/set-eth-dst-addr.rb +1 -1
- data/ruby/trema/set-eth-src-addr.rb +1 -1
- data/ruby/trema/set-ip-addr.rb +6 -6
- data/ruby/trema/set-ip-dst-addr.rb +1 -1
- data/ruby/trema/set-ip-src-addr.rb +1 -1
- data/ruby/trema/set-ip-tos.rb +6 -6
- data/ruby/trema/set-transport-dst-port.rb +2 -2
- data/ruby/trema/set-transport-port.rb +7 -7
- data/ruby/trema/set-transport-src-port.rb +3 -3
- data/ruby/trema/set-vlan-priority.rb +6 -6
- data/ruby/trema/set-vlan-vid.rb +6 -6
- data/ruby/trema/shell.rb +10 -10
- data/ruby/trema/shell/down.rb +3 -3
- data/ruby/trema/shell/killall.rb +1 -1
- data/ruby/trema/shell/link.rb +14 -14
- data/ruby/trema/shell/reset_stats.rb +6 -6
- data/ruby/trema/shell/run.rb +7 -7
- data/ruby/trema/shell/send_packets.rb +3 -3
- data/ruby/trema/shell/show_stats.rb +7 -7
- data/ruby/trema/shell/up.rb +5 -5
- data/ruby/trema/shell/vhost.rb +4 -4
- data/ruby/trema/shell/vswitch.rb +7 -7
- data/ruby/trema/stats-helper.rb +3 -3
- data/ruby/trema/stats-reply.c +0 -1
- data/ruby/trema/strip-vlan-header.rb +1 -1
- data/ruby/trema/switch-daemon.rb +9 -9
- data/ruby/trema/switch-manager.rb +9 -9
- data/ruby/trema/switch.rb +7 -7
- data/ruby/trema/table-stats-reply.rb +2 -2
- data/ruby/trema/timers.rb +12 -12
- data/ruby/trema/trema.c +0 -1
- data/ruby/trema/tremashark.rb +1 -1
- data/ruby/trema/util.rb +25 -27
- data/ruby/trema/vendor-action.rb +10 -10
- data/ruby/trema/vendor-stats-reply.rb +2 -2
- data/ruby/trema/version.rb +1 -1
- data/spec/spec_helper.rb +50 -52
- data/spec/support/action.rb +9 -12
- data/spec/support/mandatory-option.rb +15 -18
- data/spec/support/matchers/constant.rb +7 -7
- data/spec/support/openflow-message.rb +76 -79
- data/spec/support/port-status.rb +7 -10
- data/spec/trema/app_spec.rb +27 -27
- data/spec/trema/barrier-reply_spec.rb +10 -10
- data/spec/trema/barrier-request_spec.rb +35 -35
- data/spec/trema/cli_spec.rb +63 -63
- data/spec/trema/controller_spec.rb +3 -3
- data/spec/trema/default-logger_spec.rb +4 -4
- data/spec/trema/dsl/configuration_spec.rb +47 -47
- data/spec/trema/dsl/link_spec.rb +11 -11
- data/spec/trema/dsl/run_spec.rb +19 -19
- data/spec/trema/dsl/runner_spec.rb +91 -91
- data/spec/trema/dsl/switch_spec.rb +16 -16
- data/spec/trema/dsl/syntax_spec.rb +22 -22
- data/spec/trema/dsl/vhost_spec.rb +37 -37
- data/spec/trema/dsl/vswitch_spec.rb +21 -21
- data/spec/trema/echo-reply_spec.rb +29 -29
- data/spec/trema/echo-request_spec.rb +54 -54
- data/spec/trema/enqueue_spec.rb +25 -25
- data/spec/trema/error_spec.rb +30 -30
- data/spec/trema/executables_spec.rb +20 -20
- data/spec/trema/features-reply_spec.rb +41 -41
- data/spec/trema/features-request_spec.rb +35 -35
- data/spec/trema/flow-mod_spec.rb +32 -32
- data/spec/trema/flow-removed_spec.rb +62 -62
- data/spec/trema/get-config-reply_spec.rb +14 -12
- data/spec/trema/get-config-request_spec.rb +35 -35
- data/spec/trema/hardware-switch_spec.rb +12 -12
- data/spec/trema/hello_spec.rb +17 -17
- data/spec/trema/host_spec.rb +71 -71
- data/spec/trema/link_spec.rb +13 -13
- data/spec/trema/list-switches-reply_spec.rb +10 -10
- data/spec/trema/match_spec.rb +41 -41
- data/spec/trema/open-vswitch_spec.rb +45 -45
- data/spec/trema/openflow-error_spec.rb +67 -65
- data/spec/trema/packet-in_spec.rb +450 -446
- data/spec/trema/packet-out_spec.rb +42 -42
- data/spec/trema/packetin-filter_spec.rb +5 -5
- data/spec/trema/port-mod_spec.rb +32 -32
- data/spec/trema/port-status-add_spec.rb +3 -3
- data/spec/trema/port-status-delete_spec.rb +3 -3
- data/spec/trema/port-status-modify_spec.rb +16 -16
- data/spec/trema/port-status_spec.rb +2 -2
- data/spec/trema/port_spec.rb +21 -21
- data/spec/trema/process_spec.rb +22 -22
- data/spec/trema/queue-get-config-reply_spec.rb +21 -20
- data/spec/trema/queue-get-config-request_spec.rb +24 -24
- data/spec/trema/send-out-port_spec.rb +42 -42
- data/spec/trema/set-config_spec.rb +31 -31
- data/spec/trema/set-eth-addr_spec.rb +21 -21
- data/spec/trema/set-ip-addr_spec.rb +29 -29
- data/spec/trema/set-ip-tos_spec.rb +26 -26
- data/spec/trema/set-transport-dst-port_spec.rb +22 -22
- data/spec/trema/set-transport-src-port_spec.rb +22 -22
- data/spec/trema/set-vlan-priority_spec.rb +23 -23
- data/spec/trema/set-vlan-vid_spec.rb +23 -23
- data/spec/trema/shell/vhost_spec.rb +21 -21
- data/spec/trema/shell/vswitch_spec.rb +30 -30
- data/spec/trema/stats-reply_spec.rb +183 -173
- data/spec/trema/stats-request_spec.rb +66 -66
- data/spec/trema/strip-vlan-header_spec.rb +11 -11
- data/spec/trema/switch-daemon_spec.rb +34 -34
- data/spec/trema/switch-disconnected_spec.rb +17 -17
- data/spec/trema/switch-manager_spec.rb +6 -6
- data/spec/trema/tremashark_spec.rb +4 -4
- data/spec/trema/util_spec.rb +35 -35
- data/spec/trema/vendor-action_spec.rb +26 -26
- data/spec/trema/vendor_spec.rb +27 -27
- data/spec/trema_spec.rb +2 -2
- data/src/examples/cbench_switch/cbench-switch.rb +3 -3
- data/src/examples/dumper/dumper.rb +31 -31
- data/src/examples/hello_trema/hello-trema.rb +2 -2
- data/src/examples/learning_switch/fdb.rb +14 -14
- data/src/examples/learning_switch/learning-switch.rb +12 -10
- data/src/examples/learning_switch/learning_switch.c +22 -39
- data/src/examples/list_switches/list-switches.rb +3 -3
- data/src/examples/match_compare/match-compare.rb +20 -20
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +12 -12
- data/src/examples/openflow_message/echo.rb +4 -4
- data/src/examples/openflow_message/example.rb +7 -7
- data/src/examples/openflow_message/features-request.rb +31 -31
- data/src/examples/openflow_message/hello.rb +2 -2
- data/src/examples/openflow_message/set-config.rb +4 -4
- data/src/examples/openflow_message/vendor-action.rb +3 -3
- data/src/examples/openflow_message/vendor-stats-request.rb +9 -9
- data/src/examples/packet_in/packet-in.rb +2 -2
- data/src/examples/patch_panel/patch-panel.rb +9 -9
- data/src/examples/repeater_hub/repeater-hub.rb +4 -4
- data/src/examples/repeater_hub/repeater-hub_spec.rb +65 -65
- data/src/examples/simple_router/arp-table.rb +7 -7
- data/src/examples/simple_router/interface.rb +10 -10
- data/src/examples/simple_router/routing-table.rb +4 -4
- data/src/examples/simple_router/simple-router.rb +3 -3
- data/src/examples/switch_info/switch-info.rb +9 -9
- data/src/examples/switch_monitor/switch-monitor.rb +4 -4
- data/src/examples/traffic_monitor/counter.rb +6 -6
- data/src/examples/traffic_monitor/fdb.rb +4 -4
- data/src/examples/traffic_monitor/traffic-monitor.rb +12 -12
- data/src/examples/transparent_firewall/README.md +61 -0
- data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +713 -0
- data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +3440 -0
- data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +11342 -0
- data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +1937 -0
- data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +7329 -0
- data/src/examples/transparent_firewall/block-rfc1918.rb +86 -0
- data/src/examples/transparent_firewall/pass-delegated.rb +178 -0
- data/src/examples/transparent_firewall/regen_aggregated.sh +53 -0
- data/src/examples/transparent_firewall/stats-to-cidrs.rb +59 -0
- data/src/lib/messenger.c +14 -5
- data/src/lib/openflow_message.c +0 -5
- data/tasks/rubocop.rake +22 -0
- data/trema +1 -1
- data/trema-config +1 -1
- data/trema.gemspec +22 -22
- metadata +30 -16
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'trema/stats-helper'
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
module Trema
|
|
@@ -93,7 +93,7 @@ module Trema
|
|
|
93
93
|
# @return [FlowStatsReply]
|
|
94
94
|
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_FLOW) OpenFlow message.
|
|
95
95
|
#
|
|
96
|
-
def initialize
|
|
96
|
+
def initialize(options)
|
|
97
97
|
super FIELDS, options
|
|
98
98
|
end
|
|
99
99
|
end
|
data/ruby/trema/flow.rb
CHANGED
|
@@ -31,15 +31,15 @@ module Trema
|
|
|
31
31
|
# @return [self] the object that holds the parsed key=value fields
|
|
32
32
|
# as attributes.
|
|
33
33
|
#
|
|
34
|
-
def self.parse
|
|
35
|
-
flow =
|
|
34
|
+
def self.parse(line)
|
|
35
|
+
flow = new
|
|
36
36
|
# to simplify parsing
|
|
37
|
-
line.sub!(/actions=.*,.*$/) { | match | match.gsub(/,/,'/') }
|
|
38
|
-
line.strip.split(
|
|
39
|
-
next unless /(.+)=(.+)
|
|
37
|
+
line.sub!(/actions=.*,.*$/) { | match | match.gsub(/,/, '/') }
|
|
38
|
+
line.strip.split(/[,\s]\s*/).each do | each |
|
|
39
|
+
next unless /(.+)=(.+)/ =~ each
|
|
40
40
|
name, value = $1, $2
|
|
41
41
|
attr_reader name.to_sym
|
|
42
|
-
if (
|
|
42
|
+
if (/\A\d+\Z/ =~ value) || (/\A0x.+\Z/ =~ value)
|
|
43
43
|
flow.instance_eval "@#{ name }=#{ value }"
|
|
44
44
|
else
|
|
45
45
|
flow.instance_eval "@#{ name }='#{ value }'"
|
|
@@ -51,8 +51,8 @@ module Trema
|
|
|
51
51
|
|
|
52
52
|
# @return [Boolean] whether a flow is a user registered flow or not.
|
|
53
53
|
def users_flow?
|
|
54
|
-
not (
|
|
55
|
-
|
|
54
|
+
not ((@actions == 'drop' && @priority == 0) ||
|
|
55
|
+
@actions == 'CONTROLLER:65535')
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'trema/openflow-switch'
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
module Trema
|
|
@@ -43,7 +43,7 @@ module Trema
|
|
|
43
43
|
#
|
|
44
44
|
# @return [HardwareSwitch]
|
|
45
45
|
#
|
|
46
|
-
def initialize
|
|
46
|
+
def initialize(stanza)
|
|
47
47
|
stanza.validate
|
|
48
48
|
@name = stanza.name
|
|
49
49
|
@stanza = stanza
|
data/ruby/trema/host.rb
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
20
|
-
require
|
|
21
|
-
require
|
|
19
|
+
require 'trema/cli'
|
|
20
|
+
require 'trema/phost'
|
|
21
|
+
require 'trema/network-component'
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
module Trema
|
|
@@ -49,10 +49,10 @@ module Trema
|
|
|
49
49
|
#
|
|
50
50
|
# @api public
|
|
51
51
|
#
|
|
52
|
-
def initialize
|
|
52
|
+
def initialize(stanza)
|
|
53
53
|
@stanza = stanza
|
|
54
|
-
@phost = Phost.new(
|
|
55
|
-
@cli = Cli.new(
|
|
54
|
+
@phost = Phost.new(self)
|
|
55
|
+
@cli = Cli.new(self)
|
|
56
56
|
@index = Host.instances.size
|
|
57
57
|
Host.add self
|
|
58
58
|
end
|
|
@@ -68,7 +68,7 @@ module Trema
|
|
|
68
68
|
#
|
|
69
69
|
# @api public
|
|
70
70
|
#
|
|
71
|
-
def method_missing
|
|
71
|
+
def method_missing(message, *args)
|
|
72
72
|
@stanza.__send__ :[], message
|
|
73
73
|
end
|
|
74
74
|
|
|
@@ -84,7 +84,7 @@ module Trema
|
|
|
84
84
|
# @api public
|
|
85
85
|
#
|
|
86
86
|
def ip
|
|
87
|
-
stanza_ip = @stanza[ :ip
|
|
87
|
+
stanza_ip = @stanza[ :ip]
|
|
88
88
|
if stanza_ip.nil?
|
|
89
89
|
# FIXME: Find unused addresses
|
|
90
90
|
"192.168.0.#{ @index + 1 }"
|
|
@@ -105,7 +105,7 @@ module Trema
|
|
|
105
105
|
# @api public
|
|
106
106
|
#
|
|
107
107
|
def mac
|
|
108
|
-
stanza_mac = @stanza[ :mac
|
|
108
|
+
stanza_mac = @stanza[ :mac]
|
|
109
109
|
if stanza_mac.nil?
|
|
110
110
|
"00:00:00:00:00:#{ format "%02x", @index + 1 }"
|
|
111
111
|
else
|
|
@@ -125,9 +125,9 @@ module Trema
|
|
|
125
125
|
# @api public
|
|
126
126
|
#
|
|
127
127
|
def netmask
|
|
128
|
-
stanza_netmask = @stanza[ :netmask
|
|
128
|
+
stanza_netmask = @stanza[ :netmask]
|
|
129
129
|
if stanza_netmask.nil?
|
|
130
|
-
|
|
130
|
+
'255.255.255.255'
|
|
131
131
|
else
|
|
132
132
|
stanza_netmask
|
|
133
133
|
end
|
|
@@ -147,7 +147,7 @@ module Trema
|
|
|
147
147
|
def run!
|
|
148
148
|
@phost.run!
|
|
149
149
|
@cli.set_ip_and_mac_address
|
|
150
|
-
@cli.enable_promisc if @stanza[ :promisc
|
|
150
|
+
@cli.enable_promisc if @stanza[ :promisc]
|
|
151
151
|
self
|
|
152
152
|
end
|
|
153
153
|
|
|
@@ -177,7 +177,7 @@ module Trema
|
|
|
177
177
|
#
|
|
178
178
|
# @api public
|
|
179
179
|
#
|
|
180
|
-
def add_arp_entry
|
|
180
|
+
def add_arp_entry(hosts)
|
|
181
181
|
hosts.each do | each |
|
|
182
182
|
@cli.add_arp_entry each
|
|
183
183
|
end
|
|
@@ -194,9 +194,9 @@ module Trema
|
|
|
194
194
|
#
|
|
195
195
|
# @api public
|
|
196
196
|
#
|
|
197
|
-
def send_packet
|
|
198
|
-
dest_host = if dest.is_a?(
|
|
199
|
-
vhost(
|
|
197
|
+
def send_packet(dest, options = {})
|
|
198
|
+
dest_host = if dest.is_a?(String)
|
|
199
|
+
vhost(dest)
|
|
200
200
|
else
|
|
201
201
|
dest
|
|
202
202
|
end
|
|
@@ -212,14 +212,14 @@ module Trema
|
|
|
212
212
|
# @return [Stat]
|
|
213
213
|
# the object that represents the results of a particular stats type.
|
|
214
214
|
#
|
|
215
|
-
def stats
|
|
215
|
+
def stats(type)
|
|
216
216
|
case type
|
|
217
217
|
when :tx
|
|
218
218
|
@cli.tx_stats
|
|
219
219
|
when :rx
|
|
220
220
|
@cli.rx_stats
|
|
221
221
|
else
|
|
222
|
-
|
|
222
|
+
fail
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
|
data/ruby/trema/link.rb
CHANGED
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
20
|
-
require
|
|
19
|
+
require 'trema/network-component'
|
|
20
|
+
require 'trema/path'
|
|
21
21
|
|
|
22
|
-
$LOAD_PATH.unshift File.join(
|
|
23
|
-
require
|
|
22
|
+
$LOAD_PATH.unshift File.join(Trema.vendor_ruby_ifconfig, 'lib')
|
|
23
|
+
require 'ifconfig'
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
module Trema
|
|
@@ -69,13 +69,13 @@ module Trema
|
|
|
69
69
|
#
|
|
70
70
|
# @return [Link]
|
|
71
71
|
#
|
|
72
|
-
def initialize
|
|
72
|
+
def initialize(stanza)
|
|
73
73
|
@link_id = Link.instances.size
|
|
74
74
|
@stanza = stanza
|
|
75
75
|
if real_eth?
|
|
76
76
|
@name = real_eth
|
|
77
77
|
@name_peer = nil
|
|
78
|
-
@peers = @stanza.peers - [
|
|
78
|
+
@peers = @stanza.peers - [real_eth]
|
|
79
79
|
else
|
|
80
80
|
@name = "trema#{ @link_id }-0"
|
|
81
81
|
@name_peer = "trema#{ @link_id }-1"
|
|
@@ -153,16 +153,16 @@ module Trema
|
|
|
153
153
|
def real_eth
|
|
154
154
|
interfaces = IfconfigWrapper.new.parse.interfaces
|
|
155
155
|
@stanza.peers.each do | each |
|
|
156
|
-
return each if interfaces.include?(
|
|
156
|
+
return each if interfaces.include?(each)
|
|
157
157
|
end
|
|
158
|
-
|
|
158
|
+
fail
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
|
|
162
162
|
def real_eth?
|
|
163
163
|
interfaces = IfconfigWrapper.new.parse.interfaces
|
|
164
164
|
@stanza.peers.each do | each |
|
|
165
|
-
return true if interfaces.include?(
|
|
165
|
+
return true if interfaces.include?(each)
|
|
166
166
|
end
|
|
167
167
|
false
|
|
168
168
|
end
|
data/ruby/trema/mac.rb
CHANGED
|
@@ -15,16 +15,12 @@
|
|
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
16
|
#
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
require "rubygems"
|
|
20
|
-
require "pio"
|
|
21
|
-
|
|
18
|
+
require 'pio'
|
|
22
19
|
|
|
23
20
|
module Trema
|
|
24
21
|
Mac = Pio::Mac
|
|
25
22
|
end
|
|
26
23
|
|
|
27
|
-
|
|
28
24
|
### Local variables:
|
|
29
25
|
### mode: Ruby
|
|
30
26
|
### coding: utf-8-unix
|
data/ruby/trema/match.c
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
20
|
-
require
|
|
21
|
-
require
|
|
19
|
+
require 'trema/monkey-patch/integer/base-conversions'
|
|
20
|
+
require 'trema/monkey-patch/integer/ranges'
|
|
21
|
+
require 'trema/monkey-patch/integer/validators'
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class Integer
|
|
@@ -22,7 +22,7 @@ module MonkeyPatch
|
|
|
22
22
|
# nw_tos (IP ToS) value consists of 8 bits, of which only the 6 high-order
|
|
23
23
|
# bits belong to DSCP, the 2 low-order bits must be zero.
|
|
24
24
|
def valid_nw_tos?
|
|
25
|
-
unsigned_8bit?
|
|
25
|
+
unsigned_8bit? && self % 4 == 0
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
module MonkeyPatch
|
|
20
20
|
module Module
|
|
21
21
|
module Deprecation
|
|
22
|
-
def deprecate
|
|
22
|
+
def deprecate(method_pairs)
|
|
23
23
|
method_pairs.each do | old_method, new_method |
|
|
24
24
|
define_method old_method do | *args, &block |
|
|
25
25
|
$stderr.puts "Warning: #{ old_method }() is deprecated. Use #{ new_method }()."
|
|
@@ -20,23 +20,23 @@ module MonkeyPatch
|
|
|
20
20
|
module String
|
|
21
21
|
module Inflectors
|
|
22
22
|
def camelize
|
|
23
|
-
|
|
23
|
+
split(/[^a-z0-9]/i).map do | each |
|
|
24
24
|
each.capitalize
|
|
25
25
|
end.join
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
def demodulize
|
|
30
|
-
|
|
30
|
+
gsub(/^.*::/, '')
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def underscore
|
|
35
|
-
word =
|
|
36
|
-
word.gsub!
|
|
37
|
-
word.gsub!
|
|
38
|
-
word.gsub!
|
|
39
|
-
word.tr!
|
|
35
|
+
word = dup
|
|
36
|
+
word.gsub!(/::/, '/')
|
|
37
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
38
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
|
39
|
+
word.tr! '-', '_'
|
|
40
40
|
word.downcase!
|
|
41
41
|
word
|
|
42
42
|
end
|
data/ruby/trema/netns.rb
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'trema/network-component'
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
module Trema
|
|
@@ -47,7 +47,7 @@ module Trema
|
|
|
47
47
|
#
|
|
48
48
|
# @api public
|
|
49
49
|
#
|
|
50
|
-
def initialize
|
|
50
|
+
def initialize(stanza)
|
|
51
51
|
@stanza = stanza
|
|
52
52
|
Netns.add self
|
|
53
53
|
end
|
|
@@ -63,7 +63,7 @@ module Trema
|
|
|
63
63
|
#
|
|
64
64
|
# @api public
|
|
65
65
|
#
|
|
66
|
-
def method_missing
|
|
66
|
+
def method_missing(message, *args)
|
|
67
67
|
@stanza.__send__ :[], message
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -79,7 +79,7 @@ module Trema
|
|
|
79
79
|
# @api public
|
|
80
80
|
#
|
|
81
81
|
def netmask
|
|
82
|
-
@stanza[ :netmask
|
|
82
|
+
@stanza[ :netmask] || '255.255.255.255'
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
|
|
@@ -97,8 +97,8 @@ module Trema
|
|
|
97
97
|
sh "sudo ip netns add #{ name }"
|
|
98
98
|
sh "sudo ip link set dev #{ interface } netns #{ name }"
|
|
99
99
|
sh "sudo ip netns exec #{ name } ifconfig lo 127.0.0.1"
|
|
100
|
-
sh "sudo ip netns exec #{ name } ifconfig #{ interface } #{ @stanza[ :ip
|
|
101
|
-
sh "sudo ip netns exec #{ name } route add -net #{ @stanza[ :net
|
|
100
|
+
sh "sudo ip netns exec #{ name } ifconfig #{ interface } #{ @stanza[ :ip] } netmask #{ netmask }" if @stanza[ :ip]
|
|
101
|
+
sh "sudo ip netns exec #{ name } route add -net #{ @stanza[ :net] } gw #{ @stanza[ :gw] }" if @stanza[ :net] && @stanza[ :gw]
|
|
102
102
|
self
|
|
103
103
|
end
|
|
104
104
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'trema/ordered-hash'
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
module Trema
|
|
@@ -57,7 +57,7 @@ module Trema
|
|
|
57
57
|
#
|
|
58
58
|
# @api public
|
|
59
59
|
#
|
|
60
|
-
def self.inherited
|
|
60
|
+
def self.inherited(subclass)
|
|
61
61
|
subclass.instances ||= OrderedHash.new
|
|
62
62
|
end
|
|
63
63
|
|
|
@@ -80,7 +80,7 @@ module Trema
|
|
|
80
80
|
#
|
|
81
81
|
# @api public
|
|
82
82
|
#
|
|
83
|
-
def self.each
|
|
83
|
+
def self.each(&block)
|
|
84
84
|
instances.values.each do | each |
|
|
85
85
|
block.call each
|
|
86
86
|
end
|
|
@@ -102,8 +102,8 @@ module Trema
|
|
|
102
102
|
#
|
|
103
103
|
# @api public
|
|
104
104
|
#
|
|
105
|
-
def self.[]
|
|
106
|
-
instances[ name
|
|
105
|
+
def self.[](name)
|
|
106
|
+
instances[ name]
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
|
|
@@ -137,8 +137,8 @@ module Trema
|
|
|
137
137
|
#
|
|
138
138
|
# @api public
|
|
139
139
|
#
|
|
140
|
-
def self.add
|
|
141
|
-
instances[ object.name
|
|
140
|
+
def self.add(object)
|
|
141
|
+
instances[ object.name] = object
|
|
142
142
|
end
|
|
143
143
|
end
|
|
144
144
|
end
|