trema 0.3.16 → 0.3.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.rvmrc +52 -0
- data/.travis.yml +3 -0
- data/Gemfile +1 -1
- data/Rakefile +259 -1
- data/Rantfile +79 -216
- data/features/.nav +12 -0
- data/features/dsl/switch_port_specifier.feature +15 -0
- data/features/examples/switch-event/C-add_forward_entry.feature +130 -0
- data/features/examples/switch-event/C-delete_forward_entry.feature +97 -0
- data/features/examples/switch-event/C-dump_forward_entries.feature +80 -0
- data/features/examples/switch-event/C-set_forward_entries.feature +85 -0
- data/features/examples/switch-event/README.md +40 -0
- data/features/examples/switch-event/add_forward_entry.feature +142 -0
- data/features/examples/switch-event/delete_forward_entry.feature +142 -0
- data/features/examples/switch-event/dump_forward_entries.feature +91 -0
- data/features/examples/switch-event/set_forward_entries.feature +90 -0
- data/features/support/hooks.rb +1 -0
- data/ruby/rake/c/dependency.rb +42 -0
- data/ruby/rake/c/library-task.rb +142 -0
- data/ruby/rake/c/shared-library-task.rb +38 -0
- data/ruby/rake/c/static-library-task.rb +32 -0
- data/ruby/trema/path.rb +1 -0
- data/ruby/trema/switch-event.c +647 -0
- data/{src/switch_manager/management_interface.h → ruby/trema/switch-event.h} +7 -21
- data/ruby/trema/trema.c +2 -0
- data/ruby/trema/version.rb +1 -1
- data/spec/spec_helper.rb +26 -2
- data/src/examples/switch_event_config/.gitignore +7 -0
- data/src/examples/switch_event_config/add_forward_entry.c +227 -0
- data/src/examples/switch_event_config/delete_forward_entry.c +226 -0
- data/src/examples/switch_event_config/dump_forward_entries.c +190 -0
- data/src/examples/switch_event_config/set_forward_entries.c +210 -0
- data/src/lib/event_forward_interface.c +783 -0
- data/src/lib/event_forward_interface.h +138 -0
- data/src/lib/trema.h +1 -0
- data/src/lib/utility.c +13 -1
- data/src/lib/utility.h +3 -0
- data/src/switch_manager/event_forward_entry_manipulation.c +120 -0
- data/src/switch_manager/event_forward_entry_manipulation.h +31 -0
- data/src/switch_manager/secure_channel_listener.c +23 -3
- data/src/switch_manager/switch.c +99 -29
- data/src/switch_manager/switch_manager.c +176 -3
- data/src/switch_manager/switch_manager.h +4 -0
- data/src/switch_manager/switch_option.c +30 -0
- data/src/switch_manager/switch_option.h +41 -0
- data/trema.gemspec +2 -1
- data/unittests/lib/event_forward_interface_test.c +1646 -0
- data/unittests/lib/utility_test.c +23 -1
- metadata +48 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA512:
|
3
|
-
data.tar.gz: d3850c53230afbfcb3d7a8782c86f462ed944e9ab7be2147b8ba4eafb0d5156a6ec1bca29d82b05bd14031cc10efb08eedbb0f04ac4263203d0d275101fbec78
|
4
|
-
metadata.gz: 13dfcef0ae4245fc63c35cb32379431e8d71f92a455d349ed63d3307ab8ee7c34734a54537a9e9749ca7bd3b6b2bdf4b186257c3d4f8198552e31e5961c04ab1
|
5
2
|
SHA1:
|
6
|
-
|
7
|
-
|
3
|
+
metadata.gz: 7fd5b47d45e7a0338002ebdb7c4a773cb38adad6
|
4
|
+
data.tar.gz: 6394df3370fdea2695913e11c1ff935ca32c049e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b8f264d3ce3d2b393f07ec9f53df77dad75532813b25901e3c74c452d6d7c9c0995bfb3773b59e851f16a192a1a5373d6dbdd0a6525d745e824dac06fe02634c
|
7
|
+
data.tar.gz: 1df9b3476330bad7da63ddc19f0a787f8cf94106be78bc57b7ade172d93f6908adf2cc2561aacb88a6a28045f82f19b0789ce8c83bbca007823eb90ccdda3608
|
data/.gitignore
CHANGED
data/.rvmrc
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
+
# development environment upon cd'ing into the directory
|
5
|
+
|
6
|
+
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
7
|
+
# Only full ruby name is supported here, for short names use:
|
8
|
+
# echo "rvm use 1.8.7" > .rvmrc
|
9
|
+
environment_id="ruby-1.8.7-p371"
|
10
|
+
|
11
|
+
# Uncomment the following lines if you want to verify rvm version per project
|
12
|
+
# rvmrc_rvm_version="1.18.6 (stable)" # 1.10.1 seams as a safe start
|
13
|
+
# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
|
14
|
+
# echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
|
15
|
+
# return 1
|
16
|
+
# }
|
17
|
+
|
18
|
+
# First we attempt to load the desired environment directly from the environment
|
19
|
+
# file. This is very fast and efficient compared to running through the entire
|
20
|
+
# CLI and selector. If you want feedback on which environment was used then
|
21
|
+
# insert the word 'use' after --create as this triggers verbose mode.
|
22
|
+
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
|
23
|
+
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
24
|
+
then
|
25
|
+
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
26
|
+
[[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
|
27
|
+
\. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
|
28
|
+
if [[ $- == *i* ]] # check for interactive shells
|
29
|
+
then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
|
30
|
+
else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
|
31
|
+
fi
|
32
|
+
else
|
33
|
+
# If the environment file has not yet been created, use the RVM CLI to select.
|
34
|
+
rvm --create use "$environment_id" || {
|
35
|
+
echo "Failed to create RVM environment '${environment_id}'."
|
36
|
+
return 1
|
37
|
+
}
|
38
|
+
fi
|
39
|
+
|
40
|
+
# If you use bundler, this might be useful to you:
|
41
|
+
# if [[ -s Gemfile ]] && {
|
42
|
+
# ! builtin command -v bundle >/dev/null ||
|
43
|
+
# builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
|
44
|
+
# }
|
45
|
+
# then
|
46
|
+
# printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
|
47
|
+
# gem install bundler
|
48
|
+
# fi
|
49
|
+
# if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
|
50
|
+
# then
|
51
|
+
# bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
|
52
|
+
# fi
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -14,7 +14,7 @@ gemspec
|
|
14
14
|
# Include everything needed to run rake, tests, features, etc.
|
15
15
|
group :development do
|
16
16
|
gem "aruba", "~> 0.5.1"
|
17
|
-
gem "cucumber", "~> 1.2.
|
17
|
+
gem "cucumber", "~> 1.2.3"
|
18
18
|
gem "flay", "~> 2.1.0"
|
19
19
|
gem "flog", "~> 3.2.2"
|
20
20
|
gem "rcov", "~> 1.0.0"
|
data/Rakefile
CHANGED
@@ -21,8 +21,10 @@ $LOAD_PATH.unshift( File.expand_path( File.dirname( __FILE__ ) + "/ruby" ) )
|
|
21
21
|
|
22
22
|
require "rubygems"
|
23
23
|
require "rake"
|
24
|
+
require "trema/executables"
|
24
25
|
require "trema/path"
|
25
26
|
|
27
|
+
|
26
28
|
task :default => :build_trema
|
27
29
|
|
28
30
|
directory Trema.log
|
@@ -35,6 +37,262 @@ task :build_trema => [ Trema.log, Trema.pid, Trema.sock ] do
|
|
35
37
|
end
|
36
38
|
|
37
39
|
|
40
|
+
################################################################################
|
41
|
+
# Build libtrema.{a,so}
|
42
|
+
################################################################################
|
43
|
+
|
44
|
+
require "rake/c/library-task"
|
45
|
+
require "trema/version"
|
46
|
+
|
47
|
+
|
48
|
+
CFLAGS = [
|
49
|
+
"-g",
|
50
|
+
"-std=gnu99",
|
51
|
+
"-D_GNU_SOURCE",
|
52
|
+
"-fno-strict-aliasing",
|
53
|
+
"-Werror",
|
54
|
+
"-Wall",
|
55
|
+
"-Wextra",
|
56
|
+
"-Wformat=2",
|
57
|
+
"-Wcast-qual",
|
58
|
+
"-Wcast-align",
|
59
|
+
"-Wwrite-strings",
|
60
|
+
"-Wconversion",
|
61
|
+
"-Wfloat-equal",
|
62
|
+
"-Wpointer-arith",
|
63
|
+
]
|
64
|
+
|
65
|
+
|
66
|
+
desc "Build trema library (static library)."
|
67
|
+
task "libtrema:static" => "vendor:openflow"
|
68
|
+
Rake::C::StaticLibraryTask.new "libtrema:static" do | task |
|
69
|
+
task.library_name = "libtrema"
|
70
|
+
task.target_directory = Trema.lib
|
71
|
+
task.sources = "#{ Trema.include }/*.c"
|
72
|
+
task.includes = [ Trema.openflow ]
|
73
|
+
task.cflags = CFLAGS
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
desc "Build trema library (coverage)."
|
78
|
+
task "libtrema:gcov" => "vendor:openflow"
|
79
|
+
Rake::C::StaticLibraryTask.new "libtrema:gcov" do | task |
|
80
|
+
task.library_name = "libtrema"
|
81
|
+
task.target_directory = File.join( Trema.objects, "unittests" )
|
82
|
+
task.sources = "#{ Trema.include }/*.c"
|
83
|
+
task.includes = [ Trema.openflow ]
|
84
|
+
task.cflags = [ "--coverage" ] + CFLAGS
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
desc "Build trema library (shared library)."
|
89
|
+
task "libtrema:shared" => "vendor:openflow"
|
90
|
+
Rake::C::SharedLibraryTask.new "libtrema:shared" do | task |
|
91
|
+
task.library_name = "libtrema"
|
92
|
+
task.target_directory = Trema.lib
|
93
|
+
task.version = Trema::VERSION
|
94
|
+
task.sources = "#{ Trema.include }/*.c"
|
95
|
+
task.includes = [ Trema.openflow ]
|
96
|
+
task.cflags = CFLAGS
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
################################################################################
|
101
|
+
# Extract OpenFlow reference implementation
|
102
|
+
################################################################################
|
103
|
+
|
104
|
+
task "vendor:openflow" => Trema.openflow_h
|
105
|
+
file Trema.openflow_h => Trema.objects do
|
106
|
+
sh "tar xzf #{ Trema.vendor_openflow }.tar.gz -C #{ Trema.vendor }"
|
107
|
+
cp_r "#{ Trema.vendor_openflow }/include/openflow", Trema.objects
|
108
|
+
end
|
109
|
+
directory Trema.objects
|
110
|
+
|
111
|
+
CLOBBER.include File.join( Trema.objects, "openflow" )
|
112
|
+
CLOBBER.include File.join( Trema.vendor_openflow )
|
113
|
+
|
114
|
+
|
115
|
+
################################################################################
|
116
|
+
# Build phost
|
117
|
+
################################################################################
|
118
|
+
|
119
|
+
task "vendor:phost" => [ Trema::Executables.phost, Trema::Executables.cli ]
|
120
|
+
|
121
|
+
def phost_src
|
122
|
+
File.join Trema.vendor_phost, "src"
|
123
|
+
end
|
124
|
+
|
125
|
+
file Trema::Executables.phost do
|
126
|
+
cd phost_src do
|
127
|
+
sh "make"
|
128
|
+
end
|
129
|
+
mkdir_p File.dirname( Trema::Executables.phost )
|
130
|
+
install File.join( phost_src, "phost" ), Trema::Executables.phost, :mode => 0755
|
131
|
+
end
|
132
|
+
|
133
|
+
file Trema::Executables.cli do
|
134
|
+
cd phost_src do
|
135
|
+
sh "make"
|
136
|
+
end
|
137
|
+
mkdir_p File.dirname( Trema::Executables.cli )
|
138
|
+
install File.join( phost_src, "cli" ), Trema::Executables.cli, :mode => 0755
|
139
|
+
end
|
140
|
+
|
141
|
+
CLEAN.include FileList[ File.join( phost_src, "*.o" ) ]
|
142
|
+
CLEAN.include File.join( phost_src, "phost" )
|
143
|
+
CLEAN.include File.join( phost_src, "cli" )
|
144
|
+
CLOBBER.include Trema.phost
|
145
|
+
|
146
|
+
|
147
|
+
################################################################################
|
148
|
+
# Build vendor/*
|
149
|
+
################################################################################
|
150
|
+
|
151
|
+
task :vendor => [
|
152
|
+
"vendor:oflops",
|
153
|
+
"vendor:openflow",
|
154
|
+
"vendor:openvswitch",
|
155
|
+
"vendor:phost",
|
156
|
+
]
|
157
|
+
|
158
|
+
|
159
|
+
################################################################################
|
160
|
+
# Build Open vSwitch
|
161
|
+
################################################################################
|
162
|
+
|
163
|
+
task "vendor:openvswitch" => Trema::Executables.ovs_openflowd
|
164
|
+
file Trema::Executables.ovs_openflowd do
|
165
|
+
sh "tar xzf #{ Trema.vendor_openvswitch }.tar.gz -C #{ Trema.vendor }"
|
166
|
+
cd Trema.vendor_openvswitch do
|
167
|
+
sh "./configure --prefix=#{ Trema.openvswitch } --with-rundir=#{ Trema.sock }"
|
168
|
+
sh "make install"
|
169
|
+
cp "./tests/test-openflowd", Trema::Executables.ovs_openflowd
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
CLEAN.include Trema.vendor_openvswitch
|
174
|
+
CLOBBER.include Trema.openvswitch
|
175
|
+
|
176
|
+
|
177
|
+
################################################################################
|
178
|
+
# Build oflops
|
179
|
+
################################################################################
|
180
|
+
|
181
|
+
def cbench_command
|
182
|
+
File.join Trema.objects, "oflops/bin/cbench"
|
183
|
+
end
|
184
|
+
|
185
|
+
task "vendor:oflops" => cbench_command
|
186
|
+
file cbench_command => Trema.openflow_h do
|
187
|
+
sh "tar xzf #{ Trema.vendor_oflops }.tar.gz -C #{ Trema.vendor }"
|
188
|
+
cd Trema.vendor_oflops do
|
189
|
+
sh "./configure --prefix=#{ Trema.oflops } --with-openflow-src-dir=#{ Trema.vendor_openflow }"
|
190
|
+
sh "make install"
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
CLEAN.include Trema.oflops
|
195
|
+
CLOBBER.include Trema.vendor_oflops
|
196
|
+
|
197
|
+
|
198
|
+
################################################################################
|
199
|
+
# cmockery
|
200
|
+
################################################################################
|
201
|
+
|
202
|
+
task "vendor:cmockery" => Trema.libcmockery_a
|
203
|
+
file Trema.libcmockery_a do
|
204
|
+
sh "tar xzf #{ Trema.vendor_cmockery }.tar.gz -C #{ Trema.vendor }"
|
205
|
+
cd Trema.vendor_cmockery do
|
206
|
+
sh "./configure --prefix=#{ Trema.cmockery }"
|
207
|
+
sh "make install"
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
CLEAN.include Trema.vendor_cmockery
|
212
|
+
CLOBBER.include Trema.cmockery
|
213
|
+
|
214
|
+
|
215
|
+
################################################################################
|
216
|
+
# Run cbench benchmarks
|
217
|
+
################################################################################
|
218
|
+
|
219
|
+
def cbench_command
|
220
|
+
File.join Trema.objects, "oflops/bin/cbench"
|
221
|
+
end
|
222
|
+
|
223
|
+
|
224
|
+
def cbench_latency_mode_options
|
225
|
+
"--switches 1 --loops 10 --delay 1000"
|
226
|
+
end
|
227
|
+
|
228
|
+
|
229
|
+
def cbench_throughput_mode_options
|
230
|
+
cbench_latency_mode_options + " --throughput"
|
231
|
+
end
|
232
|
+
|
233
|
+
|
234
|
+
def cbench controller, options
|
235
|
+
begin
|
236
|
+
sh "#{ controller }"
|
237
|
+
sh "#{ cbench_command } #{ options }"
|
238
|
+
ensure
|
239
|
+
sh "./trema killall"
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
|
244
|
+
def cbench_c_controller
|
245
|
+
"./trema run ./objects/examples/cbench_switch/cbench_switch -d"
|
246
|
+
end
|
247
|
+
|
248
|
+
|
249
|
+
def cbench_ruby_controller
|
250
|
+
"./trema run src/examples/cbench_switch/cbench-switch.rb -d"
|
251
|
+
end
|
252
|
+
|
253
|
+
|
254
|
+
def run_cbench controller
|
255
|
+
cbench controller, cbench_latency_mode_options
|
256
|
+
cbench controller, cbench_throughput_mode_options
|
257
|
+
end
|
258
|
+
|
259
|
+
|
260
|
+
def cbench_profile options
|
261
|
+
valgrind = "valgrind --tool=callgrind --trace-children=yes"
|
262
|
+
begin
|
263
|
+
sh "#{ valgrind } #{ cbench_c_controller }"
|
264
|
+
sh "#{ cbench_command } #{ options }"
|
265
|
+
ensure
|
266
|
+
sh "./trema killall"
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
CLEAN.include FileList[ "callgrind.out.*" ]
|
271
|
+
|
272
|
+
|
273
|
+
desc "Run the c cbench switch controller to benchmark"
|
274
|
+
task "cbench" => "cbench:ruby"
|
275
|
+
|
276
|
+
|
277
|
+
desc "Run the c cbench switch controller to benchmark"
|
278
|
+
task "cbench:c" => :default do
|
279
|
+
run_cbench cbench_c_controller
|
280
|
+
end
|
281
|
+
|
282
|
+
|
283
|
+
desc "Run the ruby cbench switch controller to benchmark"
|
284
|
+
task "cbench:ruby" => :default do
|
285
|
+
run_cbench cbench_ruby_controller
|
286
|
+
end
|
287
|
+
|
288
|
+
|
289
|
+
desc "Run cbench with profiling enabled."
|
290
|
+
task "cbench:profile" => :default do
|
291
|
+
cbench_profile cbench_latency_mode_options
|
292
|
+
cbench_profile cbench_throughput_mode_options
|
293
|
+
end
|
294
|
+
|
295
|
+
|
38
296
|
################################################################################
|
39
297
|
# Maintenance Tasks
|
40
298
|
################################################################################
|
@@ -77,7 +335,7 @@ end
|
|
77
335
|
# Tests
|
78
336
|
################################################################################
|
79
337
|
|
80
|
-
task :travis => [ :setup, :
|
338
|
+
task :travis => [ :setup, :build_trema ]
|
81
339
|
|
82
340
|
|
83
341
|
begin
|
data/Rantfile
CHANGED
@@ -35,7 +35,7 @@ import "directedrule"
|
|
35
35
|
|
36
36
|
desc "Build trema."
|
37
37
|
task :default => [
|
38
|
-
:
|
38
|
+
"libtrema:static",
|
39
39
|
:management_commands,
|
40
40
|
:rubylib,
|
41
41
|
:switch_manager,
|
@@ -60,6 +60,7 @@ task :examples => [
|
|
60
60
|
"examples:openflow_message",
|
61
61
|
"examples:packet_in",
|
62
62
|
"examples:repeater_hub",
|
63
|
+
"examples:switch_event_config",
|
63
64
|
"examples:packetin_filter_config",
|
64
65
|
"examples:switch_info",
|
65
66
|
"examples:switch_monitor",
|
@@ -124,82 +125,25 @@ var :CFLAGS => "-g -std=gnu99 -D_GNU_SOURCE -fno-strict-aliasing -Werror -Wall -
|
|
124
125
|
# Run cbench benchmarks.
|
125
126
|
################################################################################
|
126
127
|
|
127
|
-
|
128
|
-
def cbench_command
|
129
|
-
File.join Trema.objects, "oflops/bin/cbench"
|
130
|
-
end
|
131
|
-
|
132
|
-
|
133
|
-
def cbench_latency_mode_options
|
134
|
-
"--switches 1 --loops 10 --delay 1000"
|
135
|
-
end
|
136
|
-
|
137
|
-
|
138
|
-
def cbench_throughput_mode_options
|
139
|
-
cbench_latency_mode_options + " --throughput"
|
140
|
-
end
|
141
|
-
|
142
|
-
|
143
|
-
def cbench controller, options
|
144
|
-
begin
|
145
|
-
sys "#{ controller }"
|
146
|
-
sys "#{ cbench_command } #{ options }"
|
147
|
-
ensure
|
148
|
-
sys "./trema killall"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
|
153
|
-
def cbench_c_controller
|
154
|
-
"./trema run ./objects/examples/cbench_switch/cbench_switch -d"
|
155
|
-
end
|
156
|
-
|
157
|
-
|
158
|
-
def cbench_ruby_controller
|
159
|
-
"./trema run src/examples/cbench_switch/cbench-switch.rb -d"
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
def run_cbench controller
|
164
|
-
cbench controller, cbench_latency_mode_options
|
165
|
-
cbench controller, cbench_throughput_mode_options
|
166
|
-
end
|
167
|
-
|
168
|
-
|
169
|
-
var[ :clean ].include sys[ "callgrind.out.*" ]
|
170
|
-
|
171
|
-
|
172
|
-
def cbench_profile options
|
173
|
-
valgrind = "valgrind --tool=callgrind --trace-children=yes"
|
174
|
-
begin
|
175
|
-
sys "#{ valgrind } #{ cbench_c_controller }"
|
176
|
-
sys "#{ cbench_command } #{ options }"
|
177
|
-
ensure
|
178
|
-
sys "./trema killall"
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
|
183
128
|
desc "Run the c cbench switch controller to benchmark"
|
184
|
-
task
|
129
|
+
task :cbench => "cbench:ruby"
|
185
130
|
|
186
131
|
|
187
|
-
desc "Run the
|
188
|
-
task "cbench:
|
189
|
-
|
132
|
+
desc "Run the ruby cbench switch controller to benchmark"
|
133
|
+
task "cbench:ruby" do
|
134
|
+
sys "rake cbench:ruby"
|
190
135
|
end
|
191
136
|
|
192
137
|
|
193
|
-
desc "Run the
|
194
|
-
task "cbench:
|
195
|
-
|
138
|
+
desc "Run the c cbench switch controller to benchmark"
|
139
|
+
task "cbench:c" do
|
140
|
+
sys "rake cbench:c"
|
196
141
|
end
|
197
142
|
|
198
143
|
|
199
144
|
desc "Run cbench with profiling enabled."
|
200
|
-
task "cbench:profile"
|
201
|
-
|
202
|
-
cbench_profile cbench_throughput_mode_options
|
145
|
+
task "cbench:profile" do
|
146
|
+
sys "rake cbench:profile"
|
203
147
|
end
|
204
148
|
|
205
149
|
|
@@ -210,20 +154,15 @@ end
|
|
210
154
|
import "sys/tgz"
|
211
155
|
|
212
156
|
|
213
|
-
task :vendor
|
214
|
-
"vendor
|
215
|
-
|
216
|
-
"vendor:openvswitch",
|
217
|
-
"vendor:phost",
|
218
|
-
]
|
157
|
+
task :vendor do
|
158
|
+
sys "rake vendor"
|
159
|
+
end
|
219
160
|
|
220
|
-
task :distclean =>
|
221
|
-
|
222
|
-
|
223
|
-
"
|
224
|
-
|
225
|
-
"vendor:phost:distclean",
|
226
|
-
]
|
161
|
+
task :distclean => :clobber
|
162
|
+
|
163
|
+
task :clobber do
|
164
|
+
sys "rake clobber"
|
165
|
+
end
|
227
166
|
|
228
167
|
|
229
168
|
#
|
@@ -234,14 +173,7 @@ gen Directory, Trema.objects
|
|
234
173
|
|
235
174
|
task "vendor:openflow" => Trema.openflow_h
|
236
175
|
file Trema.openflow_h do
|
237
|
-
sys
|
238
|
-
sys.mkdir_p Trema.objects
|
239
|
-
sys.cp_r "#{ Trema.vendor_openflow }/include/openflow", Trema.objects
|
240
|
-
sys "chmod -R +r #{ File.join Trema.objects, "openflow" }"
|
241
|
-
end
|
242
|
-
|
243
|
-
task "vendor:openflow:distclean" do
|
244
|
-
sys.rm_rf Trema.vendor_openflow
|
176
|
+
sys "rake vendor:openflow"
|
245
177
|
end
|
246
178
|
|
247
179
|
|
@@ -271,96 +203,13 @@ task "openflow_wireshark_plugin:distclean" do
|
|
271
203
|
end
|
272
204
|
|
273
205
|
|
274
|
-
#
|
275
|
-
# Open vSwitch
|
276
|
-
#
|
277
|
-
|
278
|
-
task "vendor:openvswitch" => Trema::Executables.ovs_openflowd
|
279
|
-
file Trema::Executables.ovs_openflowd do
|
280
|
-
sys.unpack_tgz "#{ Trema.vendor_openvswitch }.tar.gz", :in => Trema.vendor
|
281
|
-
sys.cd Trema.vendor_openvswitch do
|
282
|
-
sys "./configure --prefix=#{ Trema.openvswitch } --with-rundir=#{ Trema.sock }"
|
283
|
-
sys "make install"
|
284
|
-
sys "cp ./tests/test-openflowd #{ Trema::Executables.ovs_openflowd }"
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
task "vendor:openvswitch:distclean" do
|
289
|
-
sys.rm_rf Trema.vendor_openvswitch
|
290
|
-
end
|
291
|
-
|
292
|
-
|
293
|
-
#
|
294
|
-
# oflops
|
295
|
-
#
|
296
|
-
|
297
|
-
task "vendor:oflops" => cbench_command
|
298
|
-
file cbench_command => Trema.openflow_h do
|
299
|
-
sys.unpack_tgz "#{ Trema.vendor_oflops }.tar.gz", :in => Trema.vendor
|
300
|
-
sys.cd Trema.vendor_oflops do
|
301
|
-
sys "./configure --prefix=#{ Trema.oflops } --with-openflow-src-dir=#{ Trema.vendor_openflow }"
|
302
|
-
sys "make install"
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
task "vendor:oflops:distclean" do
|
307
|
-
sys.rm_rf Trema.vendor_oflops
|
308
|
-
end
|
309
|
-
|
310
|
-
|
311
|
-
#
|
312
|
-
# phost
|
313
|
-
#
|
314
|
-
|
315
|
-
def phost_src
|
316
|
-
File.join Trema.vendor_phost, "src"
|
317
|
-
end
|
318
|
-
|
319
|
-
|
320
|
-
task "vendor:phost" => [ Trema::Executables.phost, Trema::Executables.cli ]
|
321
|
-
|
322
|
-
file Trema::Executables.phost do
|
323
|
-
sys.cd phost_src do
|
324
|
-
sys "make"
|
325
|
-
end
|
326
|
-
sys.mkdir_p File.dirname( Trema::Executables.phost )
|
327
|
-
sys.install File.join( phost_src, "phost" ), Trema::Executables.phost, :mode => 0755
|
328
|
-
end
|
329
|
-
|
330
|
-
file Trema::Executables.cli do
|
331
|
-
sys.cd phost_src do
|
332
|
-
sys "make"
|
333
|
-
end
|
334
|
-
sys.mkdir_p File.dirname( Trema::Executables.cli )
|
335
|
-
sys.install File.join( phost_src, "cli" ), Trema::Executables.cli, :mode => 0755
|
336
|
-
end
|
337
|
-
|
338
|
-
task "vendor:phost:distclean" do
|
339
|
-
begin
|
340
|
-
sys.cd phost_src do
|
341
|
-
sys "make clean"
|
342
|
-
end
|
343
|
-
rescue
|
344
|
-
# ignore.
|
345
|
-
end
|
346
|
-
end
|
347
|
-
|
348
|
-
|
349
206
|
#
|
350
207
|
# cmockery
|
351
208
|
#
|
352
209
|
|
353
210
|
task "vendor:cmockery" => Trema.libcmockery_a
|
354
211
|
file Trema.libcmockery_a do
|
355
|
-
sys
|
356
|
-
sys.cd Trema::vendor_cmockery do
|
357
|
-
sys "./configure --prefix=#{ Trema.cmockery }"
|
358
|
-
sys "make install"
|
359
|
-
end
|
360
|
-
end
|
361
|
-
|
362
|
-
task "vendor:cmockery:distclean" do
|
363
|
-
sys.rm_rf Trema.vendor_cmockery
|
212
|
+
sys "rake vendor:cmockery"
|
364
213
|
end
|
365
214
|
|
366
215
|
|
@@ -368,58 +217,26 @@ end
|
|
368
217
|
# Build libtrema.{a,so}
|
369
218
|
################################################################################
|
370
219
|
|
371
|
-
build_libtrema_a = Proc.new do | t |
|
372
|
-
sys "rm -f #{ t.name }"
|
373
|
-
sys "ar -cq #{ t.name } #{ sys.sp t.prerequisites }"
|
374
|
-
sys "ranlib #{ t.name }"
|
375
|
-
end
|
376
|
-
|
377
|
-
build_libtrema_so = Proc.new do | t |
|
378
|
-
soname = File.basename( t.name ).sub( /\.\d+\.\d+\Z/, "" )
|
379
|
-
sys "gcc -shared -Wl,-soname=#{ soname } -o #{ t.name } #{ sys.sp t.prerequisites }"
|
380
|
-
end
|
381
|
-
|
382
|
-
|
383
|
-
task dependency( "libtrema" ) => "vendor:openflow"
|
384
|
-
gen C::Dependencies, dependency( "libtrema" ),
|
385
|
-
:search => [ Trema.include, objects( "openflow" ) ],
|
386
|
-
:sources => sys[ "#{ Trema.include }/*.{c,h}" ]
|
387
|
-
|
388
|
-
gen Action do
|
389
|
-
source dependency( "libtrema" )
|
390
|
-
end
|
391
|
-
|
392
|
-
|
393
|
-
gen Directory, Trema.lib
|
394
|
-
gen Directory, "#{ Trema.home }/objects/unittests"
|
395
|
-
|
396
220
|
libtrema = File.join( Trema.lib, "libtrema.a" )
|
397
221
|
libtrema_so = File.join( Trema.lib, "libtrema.so." ) + Trema::VERSION
|
398
222
|
libtrema_gcov = File.join( "#{ Trema.home }/objects/unittests", "libtrema.a" )
|
399
223
|
|
400
|
-
libtrema_o = gen DirectedRule, Trema.lib => [ Trema.include ], :o => :c do | t |
|
401
|
-
sys "gcc -I#{ objects "openflow" } #{ var :CFLAGS } -fPIC -c -o #{ t.name } #{ t.source }"
|
402
|
-
end
|
403
|
-
libtrema_gcov_o = gen DirectedRule, "#{ Trema.home }/objects/unittests" => [ Trema.include ], :o => :c do | t |
|
404
|
-
sys "gcc --coverage -I#{ objects "openflow" } #{ var :CFLAGS } -fPIC -c -o #{ t.name } #{ t.source }"
|
405
|
-
end
|
406
|
-
|
407
224
|
desc "Build trema library (static library)."
|
408
|
-
task :
|
409
|
-
file libtrema
|
410
|
-
|
225
|
+
task "libtrema:static" => libtrema
|
226
|
+
file libtrema do | t |
|
227
|
+
sys "rake libtrema:static"
|
411
228
|
end
|
412
229
|
|
413
230
|
desc "Build trema library (shared library)."
|
414
|
-
task :
|
415
|
-
file libtrema_so
|
416
|
-
|
231
|
+
task "libtrema:shared" => libtrema_so
|
232
|
+
file libtrema_so do | t |
|
233
|
+
sys "rake libtrema:shared"
|
417
234
|
end
|
418
235
|
|
419
236
|
desc "Build trema library (coverage)."
|
420
|
-
task "
|
421
|
-
file libtrema_gcov
|
422
|
-
|
237
|
+
task "libtrema:gcov" => libtrema_gcov
|
238
|
+
file libtrema_gcov do | t |
|
239
|
+
sys "rake libtrema:gcov"
|
423
240
|
end
|
424
241
|
|
425
242
|
|
@@ -482,7 +299,9 @@ end
|
|
482
299
|
|
483
300
|
switch_manager_objects = [
|
484
301
|
"dpid_table.o",
|
302
|
+
"event_forward_entry_manipulation.o",
|
485
303
|
"switch_manager.o",
|
304
|
+
"switch_option.o",
|
486
305
|
"secure_channel_listener.o"
|
487
306
|
].collect do | each |
|
488
307
|
File.join switch_manager_objects_dir, each
|
@@ -497,12 +316,14 @@ end
|
|
497
316
|
|
498
317
|
switch_objects = [
|
499
318
|
"cookie_table.o",
|
319
|
+
"event_forward_entry_manipulation.o",
|
500
320
|
"ofpmsg_recv.o",
|
501
321
|
"ofpmsg_send.o",
|
502
322
|
"secure_channel_receiver.o",
|
503
323
|
"secure_channel_sender.o",
|
504
324
|
"service_interface.o",
|
505
325
|
"switch.o",
|
326
|
+
"switch_option.o",
|
506
327
|
"xid_table.o",
|
507
328
|
].collect do | each |
|
508
329
|
File.join switch_manager_objects_dir, each
|
@@ -774,6 +595,47 @@ openflow_messages.each do | each |
|
|
774
595
|
end
|
775
596
|
|
776
597
|
|
598
|
+
###############################################################################
|
599
|
+
# Build switch_event_config
|
600
|
+
###############################################################################
|
601
|
+
|
602
|
+
switch_event_config = [
|
603
|
+
"add_forward_entry",
|
604
|
+
"delete_forward_entry",
|
605
|
+
"set_forward_entries",
|
606
|
+
"dump_forward_entries",
|
607
|
+
]
|
608
|
+
|
609
|
+
switch_event_config_source_dir = "src/examples/switch_event_config"
|
610
|
+
switch_event_config_objects_dir = objects( "examples/switch_event_config" )
|
611
|
+
|
612
|
+
gen C::Dependencies, dependency( "switch_event_config" ),
|
613
|
+
:search => [ Trema.include ], :sources => sys[ "#{ switch_event_config_source_dir }/*.{c,h}" ]
|
614
|
+
|
615
|
+
gen Action do
|
616
|
+
source dependency( "switch_event_config" )
|
617
|
+
end
|
618
|
+
|
619
|
+
gen Directory, switch_event_config_objects_dir
|
620
|
+
|
621
|
+
|
622
|
+
gen DirectedRule, switch_event_config_objects_dir => [ switch_event_config_source_dir ], :o => :c do | t |
|
623
|
+
sys "gcc -I#{ Trema.include } -I#{ Trema.openflow } #{ var :CFLAGS } -c -o #{ t.name } #{ t.source }"
|
624
|
+
end
|
625
|
+
|
626
|
+
|
627
|
+
switch_event_config.each do | each |
|
628
|
+
target = File.join( switch_event_config_objects_dir, each )
|
629
|
+
task "examples:switch_event_config" => target
|
630
|
+
file target => [
|
631
|
+
File.join( switch_event_config_objects_dir, "#{ each }.o" ),
|
632
|
+
libtrema
|
633
|
+
] do | t |
|
634
|
+
sys "gcc -L#{ Trema.lib } -o #{ t.name } #{ t.source } -ltrema -lsqlite3 -ldl -lrt -lpthread"
|
635
|
+
end
|
636
|
+
end
|
637
|
+
|
638
|
+
|
777
639
|
################################################################################
|
778
640
|
# Build packetin_filter_config
|
779
641
|
################################################################################
|
@@ -871,7 +733,7 @@ end
|
|
871
733
|
libtrema_unit_tests.keys.each do | each |
|
872
734
|
target = "unittests/objects/#{ each }"
|
873
735
|
|
874
|
-
task :build_old_unittests => target
|
736
|
+
task :build_old_unittests => [ "vendor:openflow", target ]
|
875
737
|
task target => "vendor:cmockery"
|
876
738
|
file target => test_object_files( each ) + [ "#{ target }.o" ] do | t |
|
877
739
|
sys "gcc -L#{ File.dirname Trema.libcmockery_a } -o #{ t.name } #{ sys.sp t.prerequisites } -DUNIT_TESTING -lrt -lcmockery -lsqlite3 -ldl -lpthread --coverage --static"
|
@@ -884,6 +746,7 @@ tests = [
|
|
884
746
|
"objects/unittests/buffer_test",
|
885
747
|
"objects/unittests/doubly_linked_list_test",
|
886
748
|
"objects/unittests/ether_test",
|
749
|
+
"objects/unittests/event_forward_interface_test",
|
887
750
|
"objects/unittests/hash_table_test",
|
888
751
|
"objects/unittests/linked_list_test",
|
889
752
|
"objects/unittests/log_test",
|
@@ -907,8 +770,8 @@ end
|
|
907
770
|
|
908
771
|
|
909
772
|
tests.each do | each |
|
910
|
-
task :build_unittests => [ "
|
911
|
-
task each => [ "
|
773
|
+
task :build_unittests => [ "libtrema:gcov", each ]
|
774
|
+
task each => [ "libtrema:gcov", "vendor:cmockery", "objects/unittests/cmockery_trema.o" ]
|
912
775
|
file each => "unittests/lib/#{ File.basename each }.c" do | t |
|
913
776
|
sys "gcc --coverage -c unittests/lib/#{ File.basename t.name }.c -o #{ each }.o #{ var :CFLAGS } -I#{ Trema.include } -I#{ Trema.openflow } -I#{ File.dirname Trema.cmockery_h } -Iunittests"
|
914
777
|
sys "gcc --coverage -o #{ t.name } #{ each }.o objects/unittests/cmockery_trema.o -Lobjects/unittests -L#{ File.dirname Trema.libcmockery_a } -ltrema -lrt -lcmockery -lsqlite3 -ldl -lpthread --static"
|