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
|
@@ -12,24 +12,24 @@ Feature: "Switch Monitor" sample application
|
|
|
12
12
|
vswitch { datapath_id 0x3 }
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
@slow_process
|
|
16
|
-
Scenario: Run "Switch Monitor"
|
|
17
|
-
Given I run `trema run ../../
|
|
18
|
-
And wait until "
|
|
15
|
+
@slow_process @ruby
|
|
16
|
+
Scenario: Run "Switch Monitor" Ruby example
|
|
17
|
+
Given I run `trema run ../../src/examples/switch_monitor/switch-monitor.rb -c switch_monitor.conf -d`
|
|
18
|
+
And wait until "SwitchMonitor" is up
|
|
19
19
|
When I run `trema kill 0x3`
|
|
20
20
|
And *** sleep 2 ***
|
|
21
|
-
Then the file "../../tmp/log/
|
|
21
|
+
Then the file "../../tmp/log/SwitchMonitor.log" should contain "Switch 0x3 is DOWN"
|
|
22
22
|
When I run `trema up 0x3`
|
|
23
23
|
And *** sleep 10 ***
|
|
24
|
-
Then the file "../../tmp/log/
|
|
24
|
+
Then the file "../../tmp/log/SwitchMonitor.log" should contain "All switches = 0x1, 0x2, 0x3"
|
|
25
25
|
|
|
26
26
|
@slow_process
|
|
27
|
-
Scenario: Run "Switch Monitor"
|
|
28
|
-
Given I run `trema run ../../
|
|
29
|
-
And wait until "
|
|
27
|
+
Scenario: Run "Switch Monitor" C example
|
|
28
|
+
Given I run `trema run ../../objects/examples/switch_monitor/switch_monitor -c switch_monitor.conf -d`
|
|
29
|
+
And wait until "switch_monitor" is up
|
|
30
30
|
When I run `trema kill 0x3`
|
|
31
31
|
And *** sleep 2 ***
|
|
32
|
-
Then the file "../../tmp/log/
|
|
32
|
+
Then the file "../../tmp/log/switch_monitor.log" should contain "Switch 0x3 is DOWN"
|
|
33
33
|
When I run `trema up 0x3`
|
|
34
34
|
And *** sleep 10 ***
|
|
35
|
-
Then the file "../../tmp/log/
|
|
35
|
+
Then the file "../../tmp/log/switch_monitor.log" should contain "All switches = 0x1, 0x2, 0x3"
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Feature: "Transparent Firewall" sample application
|
|
2
|
+
|
|
3
|
+
@slow_process
|
|
4
|
+
Scenario: block-rfc1918.rb blocks packets with private source/destination address
|
|
5
|
+
Given a file named "transparent_firewall.conf" with:
|
|
6
|
+
"""
|
|
7
|
+
vswitch("firewall") { datapath_id "0xabc" }
|
|
8
|
+
|
|
9
|
+
vhost("host1") { ip "192.168.0.1" }
|
|
10
|
+
vhost("host2") { ip "192.168.0.2" }
|
|
11
|
+
|
|
12
|
+
link "firewall", "host1"
|
|
13
|
+
link "firewall", "host2"
|
|
14
|
+
"""
|
|
15
|
+
And I run `trema run ../../src/examples/transparent_firewall/block-rfc1918.rb -c transparent_firewall.conf -d`
|
|
16
|
+
And wait until "BlockRFC1918" is up
|
|
17
|
+
When I send 1 packet from host1 to host2
|
|
18
|
+
And I run `trema show_stats host2 --rx`
|
|
19
|
+
And the output should not contain "192.168.0.2,1,192.168.0.1,1,1,50"
|
|
20
|
+
|
|
21
|
+
@slow_process
|
|
22
|
+
Scenario: block-rfc1918.rb does not block packets with global source/destination address
|
|
23
|
+
Given a file named "transparent_firewall.conf" with:
|
|
24
|
+
"""
|
|
25
|
+
vswitch("firewall") { datapath_id "0xabc" }
|
|
26
|
+
|
|
27
|
+
vhost("host1") { ip "1.1.1.1" }
|
|
28
|
+
vhost("host2") { ip "2.2.2.2" }
|
|
29
|
+
|
|
30
|
+
link "firewall", "host1"
|
|
31
|
+
link "firewall", "host2"
|
|
32
|
+
"""
|
|
33
|
+
And I run `trema run ../../src/examples/transparent_firewall/block-rfc1918.rb -c transparent_firewall.conf -d`
|
|
34
|
+
And wait until "BlockRFC1918" is up
|
|
35
|
+
When I send 1 packet from host1 to host2
|
|
36
|
+
And I run `trema show_stats host2 --rx`
|
|
37
|
+
And the output should contain "2.2.2.2,1,1.1.1.1,1,1,50"
|
|
38
|
+
|
|
39
|
+
@slow_process
|
|
40
|
+
Scenario: pass-delegated.rb blocks packets with source address outside of delegated IP address space.
|
|
41
|
+
Given a file named "transparent_firewall.conf" with:
|
|
42
|
+
"""
|
|
43
|
+
vswitch("firewall") { datapath_id "0xabc" }
|
|
44
|
+
|
|
45
|
+
vhost("host1") { ip "192.168.0.1" }
|
|
46
|
+
vhost("host2") { ip "192.168.0.2" }
|
|
47
|
+
|
|
48
|
+
link "firewall", "host1"
|
|
49
|
+
link "firewall", "host2"
|
|
50
|
+
"""
|
|
51
|
+
And I run `trema run ../../src/examples/transparent_firewall/pass-delegated.rb -c transparent_firewall.conf -d`
|
|
52
|
+
And wait until "PassDelegated" is up
|
|
53
|
+
When I send 1 packet from host2 to host1
|
|
54
|
+
And I run `trema show_stats host1 --rx`
|
|
55
|
+
And the output should not contain "192.168.0.1,1,192.168.0.1,2,1,50"
|
|
56
|
+
|
|
57
|
+
@slow_process
|
|
58
|
+
Scenario: pass-delegated.rb does not block packets with source address of delegated IP address space.
|
|
59
|
+
Given a file named "transparent_firewall.conf" with:
|
|
60
|
+
"""
|
|
61
|
+
vswitch("firewall") { datapath_id "0xabc" }
|
|
62
|
+
|
|
63
|
+
vhost("host1") { ip "14.0.0.1" }
|
|
64
|
+
vhost("host2") { ip "14.0.0.2" }
|
|
65
|
+
|
|
66
|
+
link "firewall", "host1"
|
|
67
|
+
link "firewall", "host2"
|
|
68
|
+
"""
|
|
69
|
+
And I run `trema run ../../src/examples/transparent_firewall/pass-delegated.rb -c transparent_firewall.conf -d`
|
|
70
|
+
And wait until "PassDelegated" is up
|
|
71
|
+
When I send 1 packet from host2 to host1
|
|
72
|
+
And I run `trema show_stats host1 --rx`
|
|
73
|
+
And the output should contain "14.0.0.1,1,14.0.0.2,1,1,50"
|
|
@@ -16,65 +16,65 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
Given
|
|
19
|
+
Given(/^I compile "(.*?)" into "(.*?)"$/) do | c_source, executable |
|
|
20
20
|
run_simple "gcc #{ c_source } #{`trema-config -c -l`} -o #{ executable }", true
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
When
|
|
24
|
+
When(/^\*\*\* sleep (\d+) \*\*\*$/) do | sec |
|
|
25
25
|
sleep sec.to_i
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
When
|
|
29
|
+
When(/^wait until "([^"]*)" is up$/) do | process |
|
|
30
30
|
nloop = 0
|
|
31
|
-
pid_file = File.join(
|
|
31
|
+
pid_file = File.join(Trema.pid, "#{ process }.pid")
|
|
32
32
|
loop do
|
|
33
33
|
nloop += 1
|
|
34
|
-
|
|
35
|
-
break if FileTest.exists?(
|
|
34
|
+
fail 'Timeout' if nloop > 100 # FIXME
|
|
35
|
+
break if FileTest.exists?(pid_file) && ps_entry_of(process)
|
|
36
36
|
sleep 0.1
|
|
37
37
|
end
|
|
38
38
|
sleep 1 # FIXME
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
Then
|
|
43
|
-
step %
|
|
42
|
+
Then(/^the output should contain "(.*?)" within the timeout period$/) do | expected |
|
|
43
|
+
step %(I wait for output to contain "#{ expected }")
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
Then
|
|
48
|
-
ps_entry_of(
|
|
47
|
+
Then(/^([^\s]*) is terminated$/) do | name |
|
|
48
|
+
ps_entry_of(name).should be_empty
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
Then
|
|
53
|
-
pid_file = File.join(
|
|
54
|
-
File.
|
|
52
|
+
Then(/^the vswitch "(.*?)" is running$/) do | dpid |
|
|
53
|
+
pid_file = File.join(Trema.pid, "open_vswitch.#{ dpid }.pid")
|
|
54
|
+
File.exist?(pid_file).should be_true
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
Then
|
|
59
|
-
pid_file = File.join(
|
|
60
|
-
File.
|
|
58
|
+
Then(/^the vswitch "([^"]*)" is terminated$/) do | dpid |
|
|
59
|
+
pid_file = File.join(Trema.pid, "open_vswitch.#{ dpid }.pid")
|
|
60
|
+
File.exist?(pid_file).should be_false
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
Then
|
|
65
|
-
pid_file = File.join(
|
|
66
|
-
File.
|
|
64
|
+
Then(/^the vhost "(.*?)" is terminated$/) do | host |
|
|
65
|
+
pid_file = File.join(Trema.pid, "phost.#{ host }.pid")
|
|
66
|
+
File.exist?(pid_file).should be_false
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
Then
|
|
71
|
-
pid_file = File.join(
|
|
72
|
-
File.
|
|
70
|
+
Then(/^the controller "(.*?)" is terminated$/) do | controller |
|
|
71
|
+
pid_file = File.join(Trema.pid, "#{ controller }.pid")
|
|
72
|
+
File.exist?(pid_file).should be_false
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
Then
|
|
77
|
-
ps_entry_of(
|
|
76
|
+
Then(/^([^\s]*) is started$/) do | name |
|
|
77
|
+
ps_entry_of(name).should_not be_empty
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
When
|
|
19
|
+
When(/^I send (\d+) packets from (.+) to (.+)$/) do | n_packets, host_a, host_b |
|
|
20
20
|
step "I run `trema send_packets --source #{ host_a } --dest #{ host_b } --n_pkts #{ n_packets }`"
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
When
|
|
24
|
+
When(/^I send 1 packet from (.+) to (.+)$/) do | host_a, host_b |
|
|
25
25
|
step "I send 1 packets from #{ host_a } to #{ host_b }"
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
Then
|
|
19
|
+
Then(/^the total number of tx packets should be:$/) do | table |
|
|
20
20
|
sleep 1
|
|
21
|
-
table.hashes[ 0
|
|
22
|
-
count_packets(
|
|
21
|
+
table.hashes[ 0].each_pair do | host, n |
|
|
22
|
+
count_packets(`trema show_stats #{ host } --tx`).should == n.to_i
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
Then
|
|
27
|
+
Then(/^the total number of rx packets should be:$/) do | table |
|
|
28
28
|
sleep 1
|
|
29
|
-
table.hashes[ 0
|
|
30
|
-
count_packets(
|
|
29
|
+
table.hashes[ 0].each_pair do | host, n |
|
|
30
|
+
count_packets(`trema show_stats #{ host } --rx`).should == n.to_i
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
data/features/support/env.rb
CHANGED
|
@@ -16,37 +16,37 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'bundler'
|
|
20
20
|
begin
|
|
21
21
|
Bundler.setup :default, :development
|
|
22
22
|
rescue Bundler::BundlerError => e
|
|
23
23
|
$stderr.puts e.message
|
|
24
|
-
$stderr.puts
|
|
24
|
+
$stderr.puts 'Run `bundle install` to install missing gems'
|
|
25
25
|
exit e.status_code
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
$LOAD_PATH.unshift(
|
|
29
|
+
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../../ruby'))
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
require
|
|
33
|
-
require
|
|
34
|
-
require
|
|
35
|
-
require
|
|
36
|
-
require
|
|
32
|
+
require 'aruba/cucumber'
|
|
33
|
+
require 'rspec'
|
|
34
|
+
require 'tempfile'
|
|
35
|
+
require 'trema/executables'
|
|
36
|
+
require 'trema/monkey-patch/string'
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
def run
|
|
40
|
-
|
|
39
|
+
def run(command)
|
|
40
|
+
fail "Failed to execute #{ command }" unless system(command)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def ps_entry_of
|
|
44
|
+
def ps_entry_of(name)
|
|
45
45
|
`ps -ef | grep -w "#{ name } " | grep -v grep`
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
def cucumber_log
|
|
49
|
+
def cucumber_log(name)
|
|
50
50
|
File.join Trema.log, name
|
|
51
51
|
end
|
|
52
52
|
|
|
@@ -59,10 +59,10 @@ end
|
|
|
59
59
|
|
|
60
60
|
# show_stats output format:
|
|
61
61
|
# ip_dst,tp_dst,ip_src,tp_src,n_pkts,n_octets
|
|
62
|
-
def count_packets
|
|
62
|
+
def count_packets(stats)
|
|
63
63
|
return 0 if stats.split.size <= 1
|
|
64
|
-
stats.split[ 1..-1
|
|
65
|
-
sum += each.split(
|
|
64
|
+
stats.split[ 1..-1].inject(0) do | sum, each |
|
|
65
|
+
sum += each.split(',')[ 4].to_i
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|
data/features/support/hooks.rb
CHANGED
|
@@ -16,16 +16,16 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'trema/path'
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
def wait_until_all_pid_files_are_deleted
|
|
22
|
+
def wait_until_all_pid_files_are_deleted(timeout = 12)
|
|
23
23
|
elapsed = 0
|
|
24
24
|
loop do
|
|
25
|
-
|
|
26
|
-
break if Dir.glob(
|
|
27
|
-
sleep 1
|
|
28
|
-
elapsed += 1
|
|
25
|
+
fail 'Failed to clean up remaining processes.' if elapsed > timeout
|
|
26
|
+
break if Dir.glob(File.join(Trema.pid, '*.pid')).empty?
|
|
27
|
+
sleep 0.1
|
|
28
|
+
elapsed += 0.1
|
|
29
29
|
end
|
|
30
30
|
sleep 1
|
|
31
31
|
end
|
|
@@ -33,18 +33,18 @@ end
|
|
|
33
33
|
|
|
34
34
|
Before do
|
|
35
35
|
@aruba_timeout_seconds = 10
|
|
36
|
-
run
|
|
36
|
+
run 'trema killall'
|
|
37
37
|
wait_until_all_pid_files_are_deleted
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
Before(
|
|
41
|
+
Before('@slow_process') do
|
|
42
42
|
@aruba_io_wait_seconds = 1
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
After do
|
|
47
|
-
run
|
|
47
|
+
run 'trema killall'
|
|
48
48
|
wait_until_all_pid_files_are_deleted
|
|
49
49
|
processes.clear
|
|
50
50
|
end
|
|
@@ -29,7 +29,7 @@ Feature: Ruby methods for adding switch event forwarding entry
|
|
|
29
29
|
All the above methods take a result handler as Ruby block, but
|
|
30
30
|
can be omitted if checking is not necessary.
|
|
31
31
|
|
|
32
|
-
@slow_process
|
|
32
|
+
@slow_process @ruby
|
|
33
33
|
Scenario Outline: add_forward_entry_to_all_switches event_type, trema_name
|
|
34
34
|
Given a file named "network.conf" with:
|
|
35
35
|
"""
|
|
@@ -84,7 +84,7 @@ Feature: Ruby methods for adding switch event forwarding entry
|
|
|
84
84
|
| :port_status | "AddEntryToAllTest", "new_controller" | "AddEntryToAllTest", "new_controller" |
|
|
85
85
|
| :state_notify | "AddEntryToAllTest", "new_controller" | "AddEntryToAllTest", "new_controller" |
|
|
86
86
|
|
|
87
|
-
@slow_process
|
|
87
|
+
@slow_process @ruby
|
|
88
88
|
Scenario Outline: add_forward_entry_to_switch dpid, event_type, trema_name
|
|
89
89
|
Given a file named "network.conf" with:
|
|
90
90
|
"""
|
|
@@ -123,7 +123,7 @@ Feature: Ruby methods for adding switch event forwarding entry
|
|
|
123
123
|
| :port_status | "AddEntryToSwitchDaemonTest", "new_controller" |
|
|
124
124
|
| :state_notify | "AddEntryToSwitchDaemonTest", "new_controller" |
|
|
125
125
|
|
|
126
|
-
@slow_process
|
|
126
|
+
@slow_process @ruby
|
|
127
127
|
Scenario Outline: add_forward_entry_to_switch_manager event_type, trema_name
|
|
128
128
|
Given a file named "AddEntryToSwitchManagerTest.rb" with:
|
|
129
129
|
"""ruby
|
|
@@ -29,7 +29,7 @@ Feature: Ruby methods for deleting switch event forwarding entry
|
|
|
29
29
|
All the above methods take a result handler as Ruby block, but
|
|
30
30
|
they can be omitted if checking is not necessary.
|
|
31
31
|
|
|
32
|
-
@slow_process
|
|
32
|
+
@slow_process @ruby
|
|
33
33
|
Scenario Outline: delete_forward_entry_from_all_switches event_type, trema_name
|
|
34
34
|
Given a file named "network.conf" with:
|
|
35
35
|
"""
|
|
@@ -84,7 +84,7 @@ Feature: Ruby methods for deleting switch event forwarding entry
|
|
|
84
84
|
| :port_status | | |
|
|
85
85
|
| :state_notify | | |
|
|
86
86
|
|
|
87
|
-
@slow_process
|
|
87
|
+
@slow_process @ruby
|
|
88
88
|
Scenario Outline: delete_forward_entry_from_switch dpid, event_type, trema_name
|
|
89
89
|
Given a file named "network.conf" with:
|
|
90
90
|
"""
|
|
@@ -123,7 +123,7 @@ Feature: Ruby methods for deleting switch event forwarding entry
|
|
|
123
123
|
| :port_status | |
|
|
124
124
|
| :state_notify | |
|
|
125
125
|
|
|
126
|
-
@slow_process
|
|
126
|
+
@slow_process @ruby
|
|
127
127
|
Scenario Outline: delete_forward_entry_from_switch_manager event_type, trema_name
|
|
128
128
|
Given a file named "DeleteFromSwitchManagerTest.rb" with:
|
|
129
129
|
"""ruby
|
|
@@ -22,7 +22,7 @@ Feature: Ruby methods for dumping switch event forwarding entry
|
|
|
22
22
|
----
|
|
23
23
|
All the above methods take a result handler as Ruby block.
|
|
24
24
|
|
|
25
|
-
@slow_process
|
|
25
|
+
@slow_process @ruby
|
|
26
26
|
Scenario Outline: dump_forward_entries_from_switch dpid, event_type
|
|
27
27
|
Given a file named "network.conf" with:
|
|
28
28
|
"""
|
|
@@ -62,7 +62,7 @@ Feature: Ruby methods for dumping switch event forwarding entry
|
|
|
62
62
|
| :port_status | "port_status" |
|
|
63
63
|
| :state_notify | "DumpSwitchDaemonTest" |
|
|
64
64
|
|
|
65
|
-
@slow_process
|
|
65
|
+
@slow_process @ruby
|
|
66
66
|
Scenario Outline: dump_forward_entries_from_switch_manager event_type
|
|
67
67
|
Given a file named "network.conf" with:
|
|
68
68
|
"""
|
|
@@ -26,7 +26,7 @@ Feature: Ruby methods for setting switch event forwarding entry
|
|
|
26
26
|
All the above methods take a result handler as Ruby block, but
|
|
27
27
|
they can be omitted if checking is not necessary.
|
|
28
28
|
|
|
29
|
-
@slow_process
|
|
29
|
+
@slow_process @ruby
|
|
30
30
|
Scenario Outline: set_forward_entries_to_switch dpid, event_type, trema_names
|
|
31
31
|
Given a file named "network.conf" with:
|
|
32
32
|
"""
|
|
@@ -65,7 +65,7 @@ Feature: Ruby methods for setting switch event forwarding entry
|
|
|
65
65
|
| :port_status | "SetEntriesToSwitchDaemonTest", "Another" |
|
|
66
66
|
| :state_notify | "SetEntriesToSwitchDaemonTest", "Another" |
|
|
67
67
|
|
|
68
|
-
@slow_process
|
|
68
|
+
@slow_process @ruby
|
|
69
69
|
Scenario Outline: set_forward_entries_to_switch_manager event_type, trema_names
|
|
70
70
|
Given a file named "SetEntriesToSwitchManagerTest.rb" with:
|
|
71
71
|
"""ruby
|