trema 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/features/trema.feature +1 -0
- data/features/trema.kill.feature +1 -1
- data/features/trema.killall.feature +1 -1
- data/features/trema.reset_stats.feature +1 -1
- data/features/tutorial.packet_in.feature +1 -1
- data/ruby/trema/command.rb +1 -0
- data/ruby/trema/command/dump_flows.rb +1 -1
- data/ruby/trema/command/kill.rb +12 -3
- data/ruby/trema/command/killall.rb +1 -1
- data/ruby/trema/command/reset_stats.rb +1 -1
- data/ruby/trema/command/ruby.rb +1 -1
- data/ruby/trema/command/up.rb +65 -0
- data/ruby/trema/command/usage.rb +4 -4
- data/ruby/trema/daemon.rb +20 -1
- data/src/examples/packet_in/{packet_in.rb → packet-in.rb} +7 -0
- data/trema +25 -10
- data/trema.gemspec +4 -3
- metadata +6 -5
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/features/trema.feature
CHANGED
@@ -16,6 +16,7 @@ Feature: trema help
|
|
16
16
|
Available commands:
|
17
17
|
run - runs a trema application.
|
18
18
|
kill - terminates a trema process.
|
19
|
+
up - starts a killed trema process again.
|
19
20
|
killall - terminates all trema processes.
|
20
21
|
send_packets - sends UDP packets to destination host.
|
21
22
|
show_stats - shows stats of packets.
|
data/features/trema.kill.feature
CHANGED
@@ -8,7 +8,7 @@ Feature: reset network stats with `trema reset_stats' command
|
|
8
8
|
When I try to run "./trema help reset_stats"
|
9
9
|
Then the output should be:
|
10
10
|
"""
|
11
|
-
Usage:
|
11
|
+
Usage: trema reset_stats [OPTIONS ...]
|
12
12
|
-h, --help
|
13
13
|
-v, --verbose
|
14
14
|
"""
|
@@ -27,7 +27,7 @@ Feature: Tutorial: Handling packet_in events example
|
|
27
27
|
|
28
28
|
|
29
29
|
Scenario: Handle packet_in in Ruby
|
30
|
-
When I try trema run "./src/examples/packet_in/
|
30
|
+
When I try trema run "./src/examples/packet_in/packet-in.rb" with following configuration (backgrounded):
|
31
31
|
"""
|
32
32
|
vswitch("packet_in") { dpid "0xabc" }
|
33
33
|
|
data/ruby/trema/command.rb
CHANGED
@@ -37,7 +37,7 @@ module Trema
|
|
37
37
|
switch = Trema::DSL::Context.load_current.switches[ ARGV[ 0 ] ]
|
38
38
|
|
39
39
|
options = OptionParser.new
|
40
|
-
options.banner = "Usage:
|
40
|
+
options.banner = "Usage: trema dump_flows SWITCH [OPTIONS ...]"
|
41
41
|
|
42
42
|
options.on( "-h", "--help" ) do
|
43
43
|
puts options.to_s
|
data/ruby/trema/command/kill.rb
CHANGED
@@ -32,7 +32,7 @@ module Trema
|
|
32
32
|
|
33
33
|
def kill
|
34
34
|
options = OptionParser.new
|
35
|
-
options.banner = "Usage:
|
35
|
+
options.banner = "Usage: trema kill NAME [OPTIONS ...]"
|
36
36
|
|
37
37
|
options.on( "-h", "--help" ) do
|
38
38
|
puts options.to_s
|
@@ -50,13 +50,22 @@ module Trema
|
|
50
50
|
pid_file = File.join( Trema.pid, "#{ ARGV[ 0 ] }.pid" )
|
51
51
|
if FileTest.exist?( pid_file )
|
52
52
|
Trema::Process.read( pid_file ).kill!
|
53
|
+
return
|
53
54
|
end
|
54
55
|
|
55
56
|
host = context.hosts[ ARGV[ 0 ] ]
|
56
|
-
|
57
|
+
if host
|
58
|
+
host.shutdown
|
59
|
+
return
|
60
|
+
end
|
57
61
|
|
58
62
|
switch = context.switches[ ARGV[ 0 ] ]
|
59
|
-
|
63
|
+
if switch
|
64
|
+
switch.shutdown
|
65
|
+
return
|
66
|
+
end
|
67
|
+
|
68
|
+
raise "Unknown name: #{ ARGV[ 0 ] }"
|
60
69
|
|
61
70
|
# [TODO] kill a link by its name. Needs a good naming convension for link.
|
62
71
|
end
|
data/ruby/trema/command/ruby.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
#
|
2
|
+
# trema up command.
|
3
|
+
#
|
4
|
+
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
5
|
+
#
|
6
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License, version 2, as
|
10
|
+
# published by the Free Software Foundation.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License along
|
18
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
19
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
20
|
+
#
|
21
|
+
|
22
|
+
|
23
|
+
require "optparse"
|
24
|
+
require "trema/dsl"
|
25
|
+
require "trema/util"
|
26
|
+
|
27
|
+
|
28
|
+
module Trema
|
29
|
+
module Command
|
30
|
+
include Trema::Util
|
31
|
+
|
32
|
+
|
33
|
+
def up
|
34
|
+
options = OptionParser.new
|
35
|
+
options.banner = "Usage: trema up NAME [OPTIONS ...]"
|
36
|
+
|
37
|
+
options.on( "-h", "--help" ) do
|
38
|
+
puts options.to_s
|
39
|
+
exit 0
|
40
|
+
end
|
41
|
+
options.on( "-v", "--verbose" ) do
|
42
|
+
$verbose = true
|
43
|
+
end
|
44
|
+
|
45
|
+
options.parse! ARGV
|
46
|
+
|
47
|
+
context = Trema::DSL::Context.load_current
|
48
|
+
|
49
|
+
switch = context.switches[ ARGV[ 0 ] ]
|
50
|
+
if switch
|
51
|
+
switch.run
|
52
|
+
return
|
53
|
+
end
|
54
|
+
|
55
|
+
raise "Unknown name: #{ ARGV[ 0 ] }"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
### Local variables:
|
62
|
+
### mode: Ruby
|
63
|
+
### coding: utf-8
|
64
|
+
### indent-tabs-mode: nil
|
65
|
+
### End:
|
data/ruby/trema/command/usage.rb
CHANGED
@@ -27,16 +27,16 @@ module Trema
|
|
27
27
|
|
28
28
|
ARGV.clear << "--help"
|
29
29
|
if command.nil?
|
30
|
-
trema = File.basename( $PROGRAM_NAME )
|
31
30
|
puts <<-EOL
|
32
|
-
usage:
|
31
|
+
usage: trema <COMMAND> [OPTIONS ...]
|
33
32
|
|
34
33
|
Trema command-line tool
|
35
|
-
Type '
|
34
|
+
Type 'trema help <COMMAND>' for help on a specific command.
|
36
35
|
|
37
36
|
Available commands:
|
38
37
|
run - runs a trema application.
|
39
38
|
kill - terminates a trema process.
|
39
|
+
up - starts a killed trema process again.
|
40
40
|
killall - terminates all trema processes.
|
41
41
|
send_packets - sends UDP packets to destination host.
|
42
42
|
show_stats - shows stats of packets.
|
@@ -47,7 +47,7 @@ EOL
|
|
47
47
|
elsif method_for( command )
|
48
48
|
__send__ method_for( command )
|
49
49
|
else
|
50
|
-
STDERR.puts "Type '
|
50
|
+
STDERR.puts "Type 'trema help' for usage."
|
51
51
|
exit false
|
52
52
|
end
|
53
53
|
end
|
data/ruby/trema/daemon.rb
CHANGED
@@ -64,8 +64,13 @@ module Trema
|
|
64
64
|
end
|
65
65
|
|
66
66
|
|
67
|
-
def run
|
67
|
+
def run
|
68
68
|
raise "'#{ name }' is already running!" if running?
|
69
|
+
run!
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def run!
|
69
74
|
FileUtils.rm_f log_file if log_file
|
70
75
|
command_block = self.class.class_eval do
|
71
76
|
class_variable_get( :@@command )
|
@@ -87,6 +92,20 @@ module Trema
|
|
87
92
|
#
|
88
93
|
# @return [undefined]
|
89
94
|
#
|
95
|
+
def shutdown
|
96
|
+
raise "'#{ name }' is not running!" if not running?
|
97
|
+
shutdown!
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
#
|
102
|
+
# Kills running daemon process. Errors are ignored.
|
103
|
+
#
|
104
|
+
# @example
|
105
|
+
# daemon.shutdown!
|
106
|
+
#
|
107
|
+
# @return [undefined]
|
108
|
+
#
|
90
109
|
def shutdown!
|
91
110
|
Trema::Process.read( pid_file, name ).kill!
|
92
111
|
end
|
@@ -23,6 +23,13 @@
|
|
23
23
|
class PacketinDumper < Controller
|
24
24
|
def packet_in datapath_id, event
|
25
25
|
puts "received a packet_in"
|
26
|
+
info "datapath_id: #{ datapath_id.to_hex }"
|
27
|
+
info "transaction_id: #{ event.transaction_id.to_hex }"
|
28
|
+
info "buffer_id: #{ event.buffer_id.to_hex }"
|
29
|
+
info "total_len: #{ event.total_len }"
|
30
|
+
info "in_port: #{ event.in_port }"
|
31
|
+
info "reason: #{ event.reason.to_hex }"
|
32
|
+
info "data: #{ event.data.unpack "H*" }"
|
26
33
|
end
|
27
34
|
end
|
28
35
|
|
data/trema
CHANGED
@@ -30,10 +30,35 @@ require "trema/command"
|
|
30
30
|
require "trema/path"
|
31
31
|
|
32
32
|
|
33
|
+
def setup_tmp
|
34
|
+
if not FileTest.writable?( Trema.tmp )
|
35
|
+
# Trema is system widely installed with gem command
|
36
|
+
sh "sudo chmod o+w -R #{ Trema.tmp }"
|
37
|
+
end
|
38
|
+
|
39
|
+
FileUtils.mkdir_p Trema.log
|
40
|
+
FileUtils.mkdir_p Trema.pid
|
41
|
+
FileUtils.mkdir_p Trema.sock
|
42
|
+
end
|
43
|
+
|
44
|
+
|
33
45
|
def method_for command
|
46
|
+
case command
|
47
|
+
when "version", "-V", "--version"
|
48
|
+
return :version
|
49
|
+
when "ruby"
|
50
|
+
return :ruby
|
51
|
+
when "help", "-h", "--help", "/?", "-?"
|
52
|
+
return :usage
|
53
|
+
end
|
54
|
+
|
55
|
+
setup_tmp
|
56
|
+
|
34
57
|
case command
|
35
58
|
when "run", "start"
|
36
59
|
return :run
|
60
|
+
when "up"
|
61
|
+
return :up
|
37
62
|
when "kill", "stop", "off", "down"
|
38
63
|
return :kill
|
39
64
|
when "killall"
|
@@ -44,26 +69,16 @@ def method_for command
|
|
44
69
|
return :show_stats
|
45
70
|
when "reset_stats"
|
46
71
|
return :reset_stats
|
47
|
-
when "ruby"
|
48
|
-
return :ruby
|
49
72
|
when "dump_flows", "dump_flow"
|
50
73
|
return :dump_flows
|
51
|
-
when "version", "-V", "--version"
|
52
|
-
return :version
|
53
74
|
when "shell", NilClass
|
54
75
|
return :shell
|
55
|
-
when "help", "-h", "--help", "/?", "-?"
|
56
|
-
return :usage
|
57
76
|
else
|
58
77
|
return nil
|
59
78
|
end
|
60
79
|
end
|
61
80
|
|
62
81
|
|
63
|
-
FileUtils.mkdir_p Trema.log
|
64
|
-
FileUtils.mkdir_p Trema.pid
|
65
|
-
FileUtils.mkdir_p Trema.sock
|
66
|
-
|
67
82
|
command = ARGV.shift
|
68
83
|
if method_for( command )
|
69
84
|
begin
|
data/trema.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "trema"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Yasuhito Takamiya"]
|
12
12
|
s.bindir = ["."]
|
13
|
-
s.date = "2012-
|
13
|
+
s.date = "2012-03-05"
|
14
14
|
s.description = "Trema is a full-stack, easy-to-use framework for developing OpenFlow controllers in Ruby/C"
|
15
15
|
s.email = "yasuhito@gmail.com"
|
16
16
|
s.executables = ["trema", "trema-config"]
|
@@ -117,6 +117,7 @@ Gem::Specification.new do |s|
|
|
117
117
|
"ruby/trema/command/send_packets.rb",
|
118
118
|
"ruby/trema/command/shell.rb",
|
119
119
|
"ruby/trema/command/show_stats.rb",
|
120
|
+
"ruby/trema/command/up.rb",
|
120
121
|
"ruby/trema/command/usage.rb",
|
121
122
|
"ruby/trema/command/version.rb",
|
122
123
|
"ruby/trema/controller.c",
|
@@ -340,9 +341,9 @@ Gem::Specification.new do |s|
|
|
340
341
|
"src/examples/openflow_message/set-config.rb",
|
341
342
|
"src/examples/openflow_message/set_config.c",
|
342
343
|
"src/examples/packet_in/README",
|
344
|
+
"src/examples/packet_in/packet-in.rb",
|
343
345
|
"src/examples/packet_in/packet_in.c",
|
344
346
|
"src/examples/packet_in/packet_in.conf",
|
345
|
-
"src/examples/packet_in/packet_in.rb",
|
346
347
|
"src/examples/packetin_filter_config/README",
|
347
348
|
"src/examples/packetin_filter_config/add_filter.c",
|
348
349
|
"src/examples/packetin_filter_config/delete_filter.c",
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yasuhito Takamiya
|
@@ -16,7 +16,7 @@ bindir:
|
|
16
16
|
- .
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-03-05 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: bundler
|
@@ -333,6 +333,7 @@ files:
|
|
333
333
|
- ruby/trema/command/send_packets.rb
|
334
334
|
- ruby/trema/command/shell.rb
|
335
335
|
- ruby/trema/command/show_stats.rb
|
336
|
+
- ruby/trema/command/up.rb
|
336
337
|
- ruby/trema/command/usage.rb
|
337
338
|
- ruby/trema/command/version.rb
|
338
339
|
- ruby/trema/controller.c
|
@@ -556,9 +557,9 @@ files:
|
|
556
557
|
- src/examples/openflow_message/set-config.rb
|
557
558
|
- src/examples/openflow_message/set_config.c
|
558
559
|
- src/examples/packet_in/README
|
560
|
+
- src/examples/packet_in/packet-in.rb
|
559
561
|
- src/examples/packet_in/packet_in.c
|
560
562
|
- src/examples/packet_in/packet_in.conf
|
561
|
-
- src/examples/packet_in/packet_in.rb
|
562
563
|
- src/examples/packetin_filter_config/README
|
563
564
|
- src/examples/packetin_filter_config/add_filter.c
|
564
565
|
- src/examples/packetin_filter_config/delete_filter.c
|