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
data/ruby/trema/switch.rb
CHANGED
|
@@ -19,21 +19,21 @@
|
|
|
19
19
|
module Trema
|
|
20
20
|
class Switch
|
|
21
21
|
attr_reader :dpid
|
|
22
|
-
|
|
22
|
+
alias_method :datapath_id, :dpid
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
def self.inherited
|
|
26
|
-
at_exit { subclass.new(
|
|
25
|
+
def self.inherited(subclass)
|
|
26
|
+
at_exit { subclass.new(eval ARGV[ 0]).run! }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
def initialize
|
|
30
|
+
def initialize(dpid)
|
|
31
31
|
@dpid = dpid
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def name
|
|
36
|
-
self.class.to_s.split(
|
|
36
|
+
self.class.to_s.split('::').last
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
|
|
@@ -42,8 +42,8 @@ module Trema
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def features_request
|
|
46
|
-
send_message FeaturesReply.new(
|
|
45
|
+
def features_request(xid)
|
|
46
|
+
send_message FeaturesReply.new(:datapath_id => @dpid, :transaction_id => xid)
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
end
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
16
|
#
|
|
17
17
|
|
|
18
|
-
require
|
|
18
|
+
require 'trema/stats-helper'
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
module Trema
|
|
@@ -71,7 +71,7 @@ module Trema
|
|
|
71
71
|
# @return [TableStatsReply]
|
|
72
72
|
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_TABLE) OpenFlow message.
|
|
73
73
|
#
|
|
74
|
-
def initialize
|
|
74
|
+
def initialize(options)
|
|
75
75
|
super FIELDS, options
|
|
76
76
|
end
|
|
77
77
|
end
|
data/ruby/trema/timers.rb
CHANGED
|
@@ -17,19 +17,19 @@
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
module Timers
|
|
20
|
-
def self.included
|
|
20
|
+
def self.included(base)
|
|
21
21
|
base.send :include, TimerMethods
|
|
22
22
|
base.send :extend, TimerMethods
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
module TimerMethods
|
|
27
|
-
lambda
|
|
27
|
+
lambda do
|
|
28
28
|
timer_event_handlers = {}
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
Kernel.send :define_method, :add_timer do | handler, interval, event_type |
|
|
32
|
-
timer_event_handlers[ handler
|
|
32
|
+
timer_event_handlers[ handler] = {
|
|
33
33
|
:interval => interval,
|
|
34
34
|
:rest => interval,
|
|
35
35
|
:event_type => event_type
|
|
@@ -39,14 +39,14 @@ module Timers
|
|
|
39
39
|
|
|
40
40
|
Kernel.send :define_method, :fire_event do
|
|
41
41
|
timer_event_handlers.each do | handler, data |
|
|
42
|
-
data[ :rest
|
|
43
|
-
if data[ :rest
|
|
42
|
+
data[ :rest] -= 1
|
|
43
|
+
if data[ :rest] <= 0
|
|
44
44
|
__send__ handler
|
|
45
|
-
data[ :rest
|
|
45
|
+
data[ :rest] = data[ :interval] if data[ :event_type] == :periodic
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
timer_event_handlers.delete_if do | handler, data |
|
|
49
|
-
data[ :rest
|
|
49
|
+
data[ :rest] <= 0 && data[ :event_type] == :oneshot
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
@@ -54,28 +54,28 @@ module Timers
|
|
|
54
54
|
Kernel.send :define_method, :delete_timer do | handler |
|
|
55
55
|
timer_event_handlers.delete
|
|
56
56
|
end
|
|
57
|
-
|
|
57
|
+
end.call
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
def add_timer_event
|
|
60
|
+
def add_timer_event(handler, interval, event_type)
|
|
61
61
|
add_timer handler, interval, event_type
|
|
62
62
|
end
|
|
63
63
|
alias_method :timer_event, :add_timer_event
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
def delete_timer_event
|
|
66
|
+
def delete_timer_event(handler)
|
|
67
67
|
delete_timer handler
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
# shortcut methods
|
|
72
|
-
def add_periodic_timer_event
|
|
72
|
+
def add_periodic_timer_event(handler, interval)
|
|
73
73
|
add_timer_event handler, interval, :periodic
|
|
74
74
|
end
|
|
75
75
|
alias_method :periodic_timer_event, :add_periodic_timer_event
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
def add_oneshot_timer_event
|
|
78
|
+
def add_oneshot_timer_event(handler, interval)
|
|
79
79
|
add_timer_event handler, interval, :oneshot
|
|
80
80
|
end
|
|
81
81
|
alias_method :oneshot_timer_event, :add_oneshot_timer_event
|
data/ruby/trema/trema.c
CHANGED
|
@@ -79,7 +79,6 @@ Init_trema() {
|
|
|
79
79
|
rb_define_const( mTrema, "OFPAT_ENQUEUE", INT2NUM( OFPAT_ENQUEUE ) );
|
|
80
80
|
rb_define_const( mTrema, "OFPAT_VENDOR", INT2NUM( OFPAT_VENDOR ) );
|
|
81
81
|
|
|
82
|
-
rb_require( "rubygems" );
|
|
83
82
|
rb_require( "pio" );
|
|
84
83
|
rb_require( "trema/mac" );
|
|
85
84
|
rb_require( "trema/host" );
|
data/ruby/trema/tremashark.rb
CHANGED
data/ruby/trema/util.rb
CHANGED
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
#
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
require
|
|
22
|
-
require
|
|
23
|
-
require
|
|
24
|
-
require
|
|
21
|
+
require 'trema/dsl'
|
|
22
|
+
require 'trema/executables'
|
|
23
|
+
require 'trema/path'
|
|
24
|
+
require 'trema/process'
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
module Trema::Util
|
|
28
|
-
def sh
|
|
29
|
-
ENV[
|
|
28
|
+
def sh(cmd)
|
|
29
|
+
ENV[ 'TREMA_HOME'] = Trema.home
|
|
30
30
|
puts cmd if $verbose
|
|
31
|
-
unless system(
|
|
32
|
-
|
|
31
|
+
unless system(cmd)
|
|
32
|
+
fail "Command '#{ cmd }' failed!"
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -47,11 +47,11 @@ EOF
|
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
def cleanup
|
|
50
|
+
def cleanup(session)
|
|
51
51
|
# [FIXME] Use session.switch_manager
|
|
52
|
-
sm_pid = File.join(
|
|
53
|
-
if FileTest.exist?(
|
|
54
|
-
Trema::Process.read(
|
|
52
|
+
sm_pid = File.join(Trema.pid, 'switch_manager.pid')
|
|
53
|
+
if FileTest.exist?(sm_pid)
|
|
54
|
+
Trema::Process.read(sm_pid).kill!
|
|
55
55
|
end
|
|
56
56
|
session.apps.each do | name, app |
|
|
57
57
|
app.shutdown!
|
|
@@ -69,8 +69,8 @@ EOF
|
|
|
69
69
|
netns.shutdown!
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
Dir.glob(
|
|
73
|
-
Trema::Process.read(
|
|
72
|
+
Dir.glob(File.join Trema.pid, '*.pid').each do | each |
|
|
73
|
+
Trema::Process.read(each).kill!
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -81,32 +81,30 @@ EOF
|
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
def cleanup_current_session
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
FileUtils.rm_f Trema::DSL::Context::PATH
|
|
88
|
-
end
|
|
84
|
+
cleanup Trema::DSL::Context.load_current
|
|
85
|
+
ensure
|
|
86
|
+
FileUtils.rm_f Trema::DSL::Context::PATH
|
|
89
87
|
end
|
|
90
88
|
|
|
91
89
|
|
|
92
|
-
def find_app_by_name
|
|
90
|
+
def find_app_by_name(name)
|
|
93
91
|
# [FIXME] Trema apps does not appear in context.apps. why?
|
|
94
|
-
pid_file = File.join(
|
|
95
|
-
if FileTest.exist?(
|
|
96
|
-
Trema::Process.read(
|
|
92
|
+
pid_file = File.join(Trema.pid, "#{ name }.pid")
|
|
93
|
+
if FileTest.exist?(pid_file)
|
|
94
|
+
Trema::Process.read(pid_file)
|
|
97
95
|
else
|
|
98
96
|
nil
|
|
99
97
|
end
|
|
100
98
|
end
|
|
101
99
|
|
|
102
100
|
|
|
103
|
-
def find_switch_by_name
|
|
104
|
-
Trema::DSL::Context.load_current.switches[ name
|
|
101
|
+
def find_switch_by_name(name)
|
|
102
|
+
Trema::DSL::Context.load_current.switches[ name]
|
|
105
103
|
end
|
|
106
104
|
|
|
107
105
|
|
|
108
|
-
def find_host_by_name
|
|
109
|
-
Trema::DSL::Context.load_current.hosts[ name
|
|
106
|
+
def find_host_by_name(name)
|
|
107
|
+
Trema::DSL::Context.load_current.hosts[ name]
|
|
110
108
|
end
|
|
111
109
|
end
|
|
112
110
|
|
data/ruby/trema/vendor-action.rb
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
20
|
-
require
|
|
19
|
+
require 'trema/action'
|
|
20
|
+
require 'trema/monkey-patch/integer'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
module Trema
|
|
@@ -51,18 +51,18 @@ module Trema
|
|
|
51
51
|
# @raise [TypeError] if body is not an Array.
|
|
52
52
|
# @raise [ArgumentError] if body length is not a multiple of 8.
|
|
53
53
|
#
|
|
54
|
-
def initialize
|
|
55
|
-
unless vendor_id.is_a?(
|
|
56
|
-
|
|
54
|
+
def initialize(vendor_id, body = nil)
|
|
55
|
+
unless vendor_id.is_a?(Integer)
|
|
56
|
+
fail TypeError, 'Vendor ID must be an unsigned 32-bit integer'
|
|
57
57
|
end
|
|
58
58
|
unless vendor_id.unsigned_32bit?
|
|
59
|
-
|
|
59
|
+
fail ArgumentError, 'Vendor ID must be an unsigned 32-bit integer'
|
|
60
60
|
end
|
|
61
|
-
if (
|
|
62
|
-
|
|
61
|
+
if ( body) && ( not body.is_a?(Array))
|
|
62
|
+
fail TypeError, 'Body must be an Array'
|
|
63
63
|
end
|
|
64
|
-
if (
|
|
65
|
-
|
|
64
|
+
if ( body) && ( body.size % 8 != 0)
|
|
65
|
+
fail ArgumentError, 'Body length must be a multiple of 8'
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
@vendor_id = vendor_id
|
|
@@ -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
|
|
@@ -50,7 +50,7 @@ module Trema
|
|
|
50
50
|
# @return [VendorStatsReply]
|
|
51
51
|
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_VENDOR) OpenFlow message.
|
|
52
52
|
#
|
|
53
|
-
def initialize
|
|
53
|
+
def initialize(options)
|
|
54
54
|
super FIELDS, options
|
|
55
55
|
end
|
|
56
56
|
end
|
data/ruby/trema/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -15,28 +15,28 @@
|
|
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
16
|
#
|
|
17
17
|
|
|
18
|
+
require 'codeclimate-test-reporter'
|
|
19
|
+
CodeClimate::TestReporter.start
|
|
18
20
|
|
|
19
|
-
$LOAD_PATH << File.join(
|
|
20
|
-
$LOAD_PATH.unshift File.expand_path(
|
|
21
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'ruby')
|
|
22
|
+
$LOAD_PATH.unshift File.expand_path(File.join File.dirname(__FILE__), '..', 'vendor', 'ruby-ifconfig-1.2', 'lib')
|
|
21
23
|
|
|
22
24
|
|
|
23
|
-
require
|
|
24
|
-
|
|
25
|
-
require
|
|
26
|
-
require
|
|
27
|
-
require
|
|
28
|
-
require
|
|
29
|
-
require
|
|
30
|
-
require
|
|
31
|
-
require
|
|
32
|
-
require "trema/shell"
|
|
33
|
-
require "trema/util"
|
|
25
|
+
require 'rspec'
|
|
26
|
+
require 'rspec/autorun'
|
|
27
|
+
require 'pio'
|
|
28
|
+
require 'trema'
|
|
29
|
+
require 'trema/dsl/configuration'
|
|
30
|
+
require 'trema/dsl/context'
|
|
31
|
+
require 'trema/ofctl'
|
|
32
|
+
require 'trema/shell'
|
|
33
|
+
require 'trema/util'
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
# Requires supporting files with custom matchers and macros, etc,
|
|
37
37
|
# in ./support/ and its subdirectories.
|
|
38
|
-
Dir[ "#{ File.dirname(
|
|
39
|
-
require File.expand_path(
|
|
38
|
+
Dir[ "#{ File.dirname(__FILE__) }/support/**/*.rb"].each do | each |
|
|
39
|
+
require File.expand_path(each)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
|
|
@@ -51,22 +51,22 @@ end
|
|
|
51
51
|
include Trema
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
def controller
|
|
55
|
-
Trema::App[ name
|
|
54
|
+
def controller(name)
|
|
55
|
+
Trema::App[ name]
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def vswitch
|
|
60
|
-
Trema::OpenflowSwitch[ name
|
|
59
|
+
def vswitch(name)
|
|
60
|
+
Trema::OpenflowSwitch[ name]
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
def vhost
|
|
65
|
-
Trema::Host[ name
|
|
64
|
+
def vhost(name)
|
|
65
|
+
Trema::Host[ name]
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
def send_packets
|
|
69
|
+
def send_packets(source, dest, options = {})
|
|
70
70
|
Trema::Shell.send_packets source, dest, options
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -75,18 +75,16 @@ include Trema::Util
|
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
class Network
|
|
78
|
-
def initialize
|
|
79
|
-
@context = Trema::DSL::Parser.new.eval(
|
|
78
|
+
def initialize(&block)
|
|
79
|
+
@context = Trema::DSL::Parser.new.eval(&block)
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
def run
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
trema_kill
|
|
89
|
-
end
|
|
83
|
+
def run(controller_class, &test)
|
|
84
|
+
trema_run controller_class
|
|
85
|
+
test.call
|
|
86
|
+
ensure
|
|
87
|
+
trema_kill
|
|
90
88
|
end
|
|
91
89
|
|
|
92
90
|
|
|
@@ -95,16 +93,16 @@ class Network
|
|
|
95
93
|
################################################################################
|
|
96
94
|
|
|
97
95
|
|
|
98
|
-
def trema_run
|
|
96
|
+
def trema_run(controller_class)
|
|
99
97
|
controller = controller_class.new
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
unless controller.is_a?(Trema::Controller)
|
|
99
|
+
fail "#{ controller_class } is not a subclass of Trema::Controller"
|
|
102
100
|
end
|
|
103
|
-
Trema::DSL::Context.new(
|
|
101
|
+
Trema::DSL::Context.new(@context).dump
|
|
104
102
|
|
|
105
103
|
app_name = controller.name
|
|
106
104
|
rule = { :port_status => app_name, :packet_in => app_name, :state_notify => app_name }
|
|
107
|
-
sm = SwitchManager.new(
|
|
105
|
+
sm = SwitchManager.new(rule, @context.port)
|
|
108
106
|
sm.no_flow_cleanup = true
|
|
109
107
|
sm.run!
|
|
110
108
|
|
|
@@ -122,7 +120,7 @@ class Network
|
|
|
122
120
|
each.up!
|
|
123
121
|
end
|
|
124
122
|
@context.hosts.each do | name, each |
|
|
125
|
-
each.add_arp_entry @context.hosts.values - [
|
|
123
|
+
each.add_arp_entry @context.hosts.values - [each]
|
|
126
124
|
end
|
|
127
125
|
|
|
128
126
|
@th_controller = Thread.start do
|
|
@@ -139,42 +137,42 @@ class Network
|
|
|
139
137
|
end
|
|
140
138
|
|
|
141
139
|
|
|
142
|
-
def drop_packets_from_unknown_hosts
|
|
140
|
+
def drop_packets_from_unknown_hosts(switch)
|
|
143
141
|
ofctl = Trema::Ofctl.new
|
|
144
|
-
ofctl.add_flow switch, :priority => 0, :actions =>
|
|
142
|
+
ofctl.add_flow switch, :priority => 0, :actions => 'drop'
|
|
145
143
|
@context.hosts.each do | name, each |
|
|
146
|
-
ofctl.add_flow switch, :dl_type =>
|
|
144
|
+
ofctl.add_flow switch, :dl_type => '0x0800', :nw_src => each.ip, :priority => 1, :actions => 'controller'
|
|
147
145
|
end
|
|
148
146
|
end
|
|
149
147
|
|
|
150
148
|
|
|
151
|
-
def wait_until_controller_is_up
|
|
149
|
+
def wait_until_controller_is_up(trema_name, timeout = 10)
|
|
152
150
|
elapsed = 0
|
|
153
151
|
loop do
|
|
154
|
-
|
|
155
|
-
break if FileTest.exists?(
|
|
156
|
-
sleep 1
|
|
157
|
-
elapsed += 1
|
|
152
|
+
fail "Timed out waiting for #{ trema_name }." if elapsed > timeout
|
|
153
|
+
break if FileTest.exists?(File.join(Trema.pid, "#{ trema_name }.pid"))
|
|
154
|
+
sleep 0.1
|
|
155
|
+
elapsed += 0.1
|
|
158
156
|
end
|
|
159
157
|
sleep 1
|
|
160
158
|
end
|
|
161
159
|
|
|
162
160
|
|
|
163
|
-
def wait_until_all_pid_files_are_deleted
|
|
161
|
+
def wait_until_all_pid_files_are_deleted(timeout = 12)
|
|
164
162
|
elapsed = 0
|
|
165
163
|
loop do
|
|
166
|
-
|
|
167
|
-
break if Dir.glob(
|
|
168
|
-
sleep 1
|
|
169
|
-
elapsed += 1
|
|
164
|
+
fail 'Failed to clean up remaining processes.' if elapsed > timeout
|
|
165
|
+
break if Dir.glob(File.join(Trema.pid, '*.pid')).empty?
|
|
166
|
+
sleep 0.1
|
|
167
|
+
elapsed += 0.1
|
|
170
168
|
end
|
|
171
169
|
sleep 1
|
|
172
170
|
end
|
|
173
171
|
end
|
|
174
172
|
|
|
175
173
|
|
|
176
|
-
def network
|
|
177
|
-
Network.new
|
|
174
|
+
def network(&block)
|
|
175
|
+
Network.new(&block)
|
|
178
176
|
end
|
|
179
177
|
|
|
180
178
|
|