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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@ruby
|
|
1
2
|
Feature: send_packets command
|
|
2
3
|
|
|
3
4
|
In order to send/receive packets between virtual hosts
|
|
@@ -17,7 +18,7 @@ Feature: send_packets command
|
|
|
17
18
|
"""
|
|
18
19
|
And I run `trema run ../../src/examples/learning_switch/learning-switch.rb -c learning_switch.conf -d`
|
|
19
20
|
|
|
20
|
-
@slow_process
|
|
21
|
+
@slow_process @critical
|
|
21
22
|
Scenario: Sending packets
|
|
22
23
|
When I run `trema send_packets --source host1 --dest host2 --n_pkts=2`
|
|
23
24
|
And I run `trema send_packets --source host2 --dest host1 --n_pkts=1`
|
data/rubocop-todo.yml
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# This configuration was generated by `rubocop --auto-gen-config`.
|
|
2
|
+
# The point is for the user to remove these configuration records
|
|
3
|
+
# one by one as the offences are removed from the code base.
|
|
4
|
+
|
|
5
|
+
Encoding:
|
|
6
|
+
Enabled: false
|
|
7
|
+
|
|
8
|
+
AssignmentInCondition:
|
|
9
|
+
Enabled: false
|
|
10
|
+
|
|
11
|
+
BlockAlignment:
|
|
12
|
+
Enabled: false
|
|
13
|
+
|
|
14
|
+
BlockNesting:
|
|
15
|
+
Enabled: false
|
|
16
|
+
|
|
17
|
+
BracesAroundHashParameters:
|
|
18
|
+
Enabled: false
|
|
19
|
+
|
|
20
|
+
CaseIndentation:
|
|
21
|
+
Enabled: false
|
|
22
|
+
|
|
23
|
+
ClassAndModuleCamelCase:
|
|
24
|
+
Enabled: false
|
|
25
|
+
|
|
26
|
+
ClassAndModuleChildren:
|
|
27
|
+
Enabled: false
|
|
28
|
+
|
|
29
|
+
ClassLength:
|
|
30
|
+
Enabled: false
|
|
31
|
+
|
|
32
|
+
ClassMethods:
|
|
33
|
+
Enabled: false
|
|
34
|
+
|
|
35
|
+
ClassVars:
|
|
36
|
+
Enabled: false
|
|
37
|
+
|
|
38
|
+
CollectionMethods:
|
|
39
|
+
Enabled: false
|
|
40
|
+
|
|
41
|
+
ColonMethodCall:
|
|
42
|
+
Enabled: false
|
|
43
|
+
|
|
44
|
+
ConstantName:
|
|
45
|
+
Enabled: false
|
|
46
|
+
|
|
47
|
+
CyclomaticComplexity:
|
|
48
|
+
Enabled: false
|
|
49
|
+
|
|
50
|
+
Documentation:
|
|
51
|
+
Enabled: false
|
|
52
|
+
|
|
53
|
+
EmptyLineBetweenDefs:
|
|
54
|
+
Enabled: false
|
|
55
|
+
|
|
56
|
+
EmptyLines:
|
|
57
|
+
Enabled: false
|
|
58
|
+
|
|
59
|
+
EmptyLinesAroundAccessModifier:
|
|
60
|
+
Enabled: false
|
|
61
|
+
|
|
62
|
+
EmptyLinesAroundBody:
|
|
63
|
+
Enabled: false
|
|
64
|
+
|
|
65
|
+
EmptyLiteral:
|
|
66
|
+
Enabled: false
|
|
67
|
+
|
|
68
|
+
EndAlignment:
|
|
69
|
+
Enabled: false
|
|
70
|
+
|
|
71
|
+
Eval:
|
|
72
|
+
Enabled: false
|
|
73
|
+
|
|
74
|
+
FileName:
|
|
75
|
+
Enabled: false
|
|
76
|
+
|
|
77
|
+
FormatString:
|
|
78
|
+
Enabled: false
|
|
79
|
+
|
|
80
|
+
For:
|
|
81
|
+
Enabled: false
|
|
82
|
+
|
|
83
|
+
GlobalVars:
|
|
84
|
+
Enabled: false
|
|
85
|
+
|
|
86
|
+
HandleExceptions:
|
|
87
|
+
Enabled: false
|
|
88
|
+
|
|
89
|
+
HashSyntax:
|
|
90
|
+
Enabled: false
|
|
91
|
+
|
|
92
|
+
IfUnlessModifier:
|
|
93
|
+
Enabled: false
|
|
94
|
+
|
|
95
|
+
IndentationWidth:
|
|
96
|
+
Enabled: false
|
|
97
|
+
|
|
98
|
+
LineLength:
|
|
99
|
+
Enabled: false
|
|
100
|
+
|
|
101
|
+
MethodLength:
|
|
102
|
+
Enabled: false
|
|
103
|
+
|
|
104
|
+
MultilineBlockChain:
|
|
105
|
+
Enabled: false
|
|
106
|
+
|
|
107
|
+
Not:
|
|
108
|
+
Enabled: false
|
|
109
|
+
|
|
110
|
+
NumericLiterals:
|
|
111
|
+
Enabled: false
|
|
112
|
+
|
|
113
|
+
ParameterLists:
|
|
114
|
+
Enabled: false
|
|
115
|
+
|
|
116
|
+
ParenthesesAroundCondition:
|
|
117
|
+
Enabled: false
|
|
118
|
+
|
|
119
|
+
ParenthesesAsGroupedExpression:
|
|
120
|
+
Enabled: false
|
|
121
|
+
|
|
122
|
+
PerlBackrefs:
|
|
123
|
+
Enabled: false
|
|
124
|
+
|
|
125
|
+
RedundantException:
|
|
126
|
+
Enabled: false
|
|
127
|
+
|
|
128
|
+
RegexpLiteral:
|
|
129
|
+
Enabled: false
|
|
130
|
+
|
|
131
|
+
RescueModifier:
|
|
132
|
+
Enabled: false
|
|
133
|
+
|
|
134
|
+
Semicolon:
|
|
135
|
+
Enabled: false
|
|
136
|
+
|
|
137
|
+
SpaceAroundEqualsInParameterDefault:
|
|
138
|
+
Enabled: false
|
|
139
|
+
|
|
140
|
+
SpecialGlobalVars:
|
|
141
|
+
Enabled: false
|
|
142
|
+
|
|
143
|
+
TrailingBlankLines:
|
|
144
|
+
Enabled: false
|
|
145
|
+
|
|
146
|
+
TrivialAccessors:
|
|
147
|
+
Enabled: false
|
|
148
|
+
|
|
149
|
+
UselessAssignment:
|
|
150
|
+
Enabled: false
|
|
151
|
+
|
|
152
|
+
WhileUntilDo:
|
|
153
|
+
Enabled: false
|
|
154
|
+
|
|
155
|
+
WhileUntilModifier:
|
|
156
|
+
Enabled: false
|
|
157
|
+
|
|
158
|
+
WordArray:
|
|
159
|
+
Enabled: false
|
data/ruby/blocker.rb
CHANGED
|
@@ -32,36 +32,34 @@ class Blocker
|
|
|
32
32
|
class BlockerError < RuntimeError; end
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
PATH =
|
|
35
|
+
PATH = '/tmp/cruise.lock'
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def self.start
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
release
|
|
48
|
-
end
|
|
38
|
+
def self.start(&code_block)
|
|
39
|
+
block
|
|
40
|
+
code_block.call
|
|
41
|
+
rescue BlockerError, Errno::EACCES
|
|
42
|
+
$stderr.puts 'Another process is already running. Please wait for a while.'
|
|
43
|
+
sleep 10
|
|
44
|
+
retry
|
|
45
|
+
ensure
|
|
46
|
+
release
|
|
49
47
|
end
|
|
50
48
|
|
|
51
49
|
|
|
52
50
|
def self.block
|
|
53
|
-
lock = File.open(
|
|
54
|
-
locked = lock.flock(
|
|
51
|
+
lock = File.open(PATH, 'a+')
|
|
52
|
+
locked = lock.flock(File::LOCK_EX | File::LOCK_NB)
|
|
55
53
|
unless locked
|
|
56
54
|
lock.close
|
|
57
|
-
|
|
55
|
+
fail BlockerError
|
|
58
56
|
end
|
|
59
57
|
end
|
|
60
58
|
|
|
61
59
|
|
|
62
60
|
def self.release
|
|
63
|
-
File.open(
|
|
64
|
-
lock.flock(
|
|
61
|
+
File.open(PATH, 'w') do | lock |
|
|
62
|
+
lock.flock(File::LOCK_UN | File::LOCK_NB)
|
|
65
63
|
lock.close
|
|
66
64
|
File.delete lock.path
|
|
67
65
|
end
|
data/ruby/extconf.rb
CHANGED
|
@@ -16,25 +16,25 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require
|
|
19
|
+
require 'mkmf'
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
$CFLAGS =
|
|
23
|
-
$LDFLAGS =
|
|
22
|
+
$CFLAGS = '-g -std=gnu99 -D_GNU_SOURCE -fno-strict-aliasing -Wall -Wextra -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith'
|
|
23
|
+
$LDFLAGS = '-Wl,-Bsymbolic'
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
dir_config
|
|
27
|
-
dir_config
|
|
26
|
+
dir_config 'trema'
|
|
27
|
+
dir_config 'openflow'
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
def error_exit
|
|
30
|
+
def error_exit(message)
|
|
31
31
|
$stderr.puts message
|
|
32
32
|
exit false
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
def error_lib_missing
|
|
37
|
-
|
|
36
|
+
def error_lib_missing(lib, package)
|
|
37
|
+
<<-EOF
|
|
38
38
|
ERROR: #{ lib } not found!
|
|
39
39
|
|
|
40
40
|
Please install #{ package } with following command:
|
|
@@ -43,23 +43,23 @@ EOF
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
unless find_library(
|
|
47
|
-
error_exit error_lib_missing(
|
|
46
|
+
unless find_library('pthread', 'pthread_create')
|
|
47
|
+
error_exit error_lib_missing('libpthread', 'libc6-dev')
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
unless find_library(
|
|
51
|
-
error_exit error_lib_missing(
|
|
50
|
+
unless find_library('rt', 'clock_gettime')
|
|
51
|
+
error_exit error_lib_missing('librt', 'libc6-dev')
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
unless find_library(
|
|
55
|
-
error_exit error_lib_missing(
|
|
54
|
+
unless find_library('dl', 'dlopen')
|
|
55
|
+
error_exit error_lib_missing('libdl', 'libc6-dev')
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
unless find_library(
|
|
59
|
-
error_exit error_lib_missing(
|
|
58
|
+
unless find_library('sqlite3', 'sqlite3_open')
|
|
59
|
+
error_exit error_lib_missing('libsqlite3', 'libsqlite3-dev')
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
unless find_library(
|
|
62
|
+
unless find_library('trema', 'create_hello')
|
|
63
63
|
error_exit <<-EOF
|
|
64
64
|
ERROR: Trema is not compiled yet!
|
|
65
65
|
|
|
@@ -69,8 +69,8 @@ EOF
|
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
$CFLAGS <<
|
|
73
|
-
create_makefile
|
|
72
|
+
$CFLAGS << ' -Werror' # must be added after find_library
|
|
73
|
+
create_makefile 'trema', 'trema'
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
### Local variables:
|
data/ruby/sub-process.rb
CHANGED
|
@@ -58,7 +58,7 @@ module SubProcess
|
|
|
58
58
|
attr_reader :env
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
def initialize
|
|
61
|
+
def initialize(command, env = {})
|
|
62
62
|
@command = command
|
|
63
63
|
@env = env
|
|
64
64
|
end
|
|
@@ -66,7 +66,7 @@ module SubProcess
|
|
|
66
66
|
|
|
67
67
|
def start
|
|
68
68
|
@env.each_pair do | key, value |
|
|
69
|
-
ENV[
|
|
69
|
+
ENV[key] = value
|
|
70
70
|
end
|
|
71
71
|
Kernel.exec @command
|
|
72
72
|
end
|
|
@@ -79,7 +79,7 @@ module SubProcess
|
|
|
79
79
|
attr_reader :stderr
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
def initialize
|
|
82
|
+
def initialize(stdin, stdout, stderr)
|
|
83
83
|
@stdin = stdin
|
|
84
84
|
@stdout = stdout
|
|
85
85
|
@stderr = stderr
|
|
@@ -87,7 +87,7 @@ module SubProcess
|
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
def close
|
|
90
|
-
[
|
|
90
|
+
[@stdin, @stdout, @stderr].each do | each |
|
|
91
91
|
unless each.closed?
|
|
92
92
|
each.close
|
|
93
93
|
end
|
|
@@ -98,9 +98,9 @@ module SubProcess
|
|
|
98
98
|
|
|
99
99
|
class Process
|
|
100
100
|
def initialize
|
|
101
|
-
stdin, stdout, stderr = Array.new(
|
|
102
|
-
@child = SubProcess::PipeSet.new(
|
|
103
|
-
@parent = SubProcess::PipeSet.new(
|
|
101
|
+
stdin, stdout, stderr = Array.new(3) { IO.pipe }
|
|
102
|
+
@child = SubProcess::PipeSet.new(stdin[ 1], stdout[ 0], stderr[ 0])
|
|
103
|
+
@parent = SubProcess::PipeSet.new(stdin[ 0], stdout[ 1], stderr[ 1])
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
|
|
@@ -109,8 +109,8 @@ module SubProcess
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
def popen
|
|
113
|
-
@pid = fork_child(
|
|
112
|
+
def popen(command, &block)
|
|
113
|
+
@pid = fork_child(command)
|
|
114
114
|
# Parent process
|
|
115
115
|
@parent.close
|
|
116
116
|
begin
|
|
@@ -127,7 +127,7 @@ module SubProcess
|
|
|
127
127
|
############################################################################
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
def fork_child
|
|
130
|
+
def fork_child(command)
|
|
131
131
|
Kernel.fork do
|
|
132
132
|
@child.close
|
|
133
133
|
redirect_child_io
|
|
@@ -146,14 +146,14 @@ module SubProcess
|
|
|
146
146
|
|
|
147
147
|
|
|
148
148
|
class IoHandlerThread
|
|
149
|
-
def initialize
|
|
149
|
+
def initialize(io, method)
|
|
150
150
|
@io = io
|
|
151
151
|
@method = method
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
|
|
155
155
|
def start
|
|
156
|
-
Thread.new(
|
|
156
|
+
Thread.new(@io, @method) do | io, method |
|
|
157
157
|
while io.gets do
|
|
158
158
|
method.call $LAST_READ_LINE
|
|
159
159
|
end
|
|
@@ -163,12 +163,12 @@ module SubProcess
|
|
|
163
163
|
|
|
164
164
|
|
|
165
165
|
class Shell
|
|
166
|
-
def self.open
|
|
167
|
-
block.call
|
|
166
|
+
def self.open(debug_options = {}, &block)
|
|
167
|
+
block.call new(debug_options)
|
|
168
168
|
end
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
def initialize
|
|
171
|
+
def initialize(debug_options)
|
|
172
172
|
@debug_options = debug_options
|
|
173
173
|
end
|
|
174
174
|
|
|
@@ -178,34 +178,34 @@ module SubProcess
|
|
|
178
178
|
end
|
|
179
179
|
|
|
180
180
|
|
|
181
|
-
def on_stdout
|
|
181
|
+
def on_stdout(&block)
|
|
182
182
|
@on_stdout = block
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
|
|
186
|
-
def on_stderr
|
|
186
|
+
def on_stderr(&block)
|
|
187
187
|
@on_stderr = block
|
|
188
188
|
end
|
|
189
189
|
|
|
190
190
|
|
|
191
|
-
def on_exit
|
|
191
|
+
def on_exit(&block)
|
|
192
192
|
@on_exit = block
|
|
193
193
|
end
|
|
194
194
|
|
|
195
195
|
|
|
196
|
-
def on_success
|
|
196
|
+
def on_success(&block)
|
|
197
197
|
@on_success = block
|
|
198
198
|
end
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
def on_failure
|
|
201
|
+
def on_failure(&block)
|
|
202
202
|
@on_failure = block
|
|
203
203
|
end
|
|
204
204
|
|
|
205
205
|
|
|
206
|
-
def exec
|
|
207
|
-
on_failure {
|
|
208
|
-
SubProcess::Process.new.popen SubProcess::Command.new(
|
|
206
|
+
def exec(command, env = { 'LC_ALL' => 'C' })
|
|
207
|
+
on_failure { fail "command #{ command } failed" } unless @on_failure
|
|
208
|
+
SubProcess::Process.new.popen SubProcess::Command.new(command, env) do | stdout, stderr |
|
|
209
209
|
handle_child_output stdout, stderr
|
|
210
210
|
end.wait
|
|
211
211
|
handle_exitstatus
|
|
@@ -218,9 +218,9 @@ module SubProcess
|
|
|
218
218
|
############################################################################
|
|
219
219
|
|
|
220
220
|
|
|
221
|
-
def handle_child_output
|
|
222
|
-
tout = SubProcess::IoHandlerThread.new(
|
|
223
|
-
terr = SubProcess::IoHandlerThread.new(
|
|
221
|
+
def handle_child_output(stdout, stderr)
|
|
222
|
+
tout = SubProcess::IoHandlerThread.new(stdout, method(:do_stdout)).start
|
|
223
|
+
terr = SubProcess::IoHandlerThread.new(stderr, method(:do_stderr)).start
|
|
224
224
|
tout.join
|
|
225
225
|
terr.join
|
|
226
226
|
end
|
|
@@ -239,14 +239,14 @@ module SubProcess
|
|
|
239
239
|
end
|
|
240
240
|
|
|
241
241
|
|
|
242
|
-
def do_stdout
|
|
242
|
+
def do_stdout(line)
|
|
243
243
|
if @on_stdout
|
|
244
244
|
@on_stdout.call line
|
|
245
245
|
end
|
|
246
246
|
end
|
|
247
247
|
|
|
248
248
|
|
|
249
|
-
def do_stderr
|
|
249
|
+
def do_stderr(line)
|
|
250
250
|
if @on_stderr
|
|
251
251
|
@on_stderr.call line
|
|
252
252
|
end
|
|
@@ -275,7 +275,7 @@ module SubProcess
|
|
|
275
275
|
end
|
|
276
276
|
|
|
277
277
|
|
|
278
|
-
def create
|
|
278
|
+
def create(debug_options = {}, &block)
|
|
279
279
|
Shell.open debug_options, &block
|
|
280
280
|
end
|
|
281
281
|
module_function :create
|