trema 0.3.16 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.rvmrc +52 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +1 -1
  6. data/Rakefile +259 -1
  7. data/Rantfile +79 -216
  8. data/features/.nav +12 -0
  9. data/features/dsl/switch_port_specifier.feature +15 -0
  10. data/features/examples/switch-event/C-add_forward_entry.feature +130 -0
  11. data/features/examples/switch-event/C-delete_forward_entry.feature +97 -0
  12. data/features/examples/switch-event/C-dump_forward_entries.feature +80 -0
  13. data/features/examples/switch-event/C-set_forward_entries.feature +85 -0
  14. data/features/examples/switch-event/README.md +40 -0
  15. data/features/examples/switch-event/add_forward_entry.feature +142 -0
  16. data/features/examples/switch-event/delete_forward_entry.feature +142 -0
  17. data/features/examples/switch-event/dump_forward_entries.feature +91 -0
  18. data/features/examples/switch-event/set_forward_entries.feature +90 -0
  19. data/features/support/hooks.rb +1 -0
  20. data/ruby/rake/c/dependency.rb +42 -0
  21. data/ruby/rake/c/library-task.rb +142 -0
  22. data/ruby/rake/c/shared-library-task.rb +38 -0
  23. data/ruby/rake/c/static-library-task.rb +32 -0
  24. data/ruby/trema/path.rb +1 -0
  25. data/ruby/trema/switch-event.c +647 -0
  26. data/{src/switch_manager/management_interface.h → ruby/trema/switch-event.h} +7 -21
  27. data/ruby/trema/trema.c +2 -0
  28. data/ruby/trema/version.rb +1 -1
  29. data/spec/spec_helper.rb +26 -2
  30. data/src/examples/switch_event_config/.gitignore +7 -0
  31. data/src/examples/switch_event_config/add_forward_entry.c +227 -0
  32. data/src/examples/switch_event_config/delete_forward_entry.c +226 -0
  33. data/src/examples/switch_event_config/dump_forward_entries.c +190 -0
  34. data/src/examples/switch_event_config/set_forward_entries.c +210 -0
  35. data/src/lib/event_forward_interface.c +783 -0
  36. data/src/lib/event_forward_interface.h +138 -0
  37. data/src/lib/trema.h +1 -0
  38. data/src/lib/utility.c +13 -1
  39. data/src/lib/utility.h +3 -0
  40. data/src/switch_manager/event_forward_entry_manipulation.c +120 -0
  41. data/src/switch_manager/event_forward_entry_manipulation.h +31 -0
  42. data/src/switch_manager/secure_channel_listener.c +23 -3
  43. data/src/switch_manager/switch.c +99 -29
  44. data/src/switch_manager/switch_manager.c +176 -3
  45. data/src/switch_manager/switch_manager.h +4 -0
  46. data/src/switch_manager/switch_option.c +30 -0
  47. data/src/switch_manager/switch_option.h +41 -0
  48. data/trema.gemspec +2 -1
  49. data/unittests/lib/event_forward_interface_test.c +1646 -0
  50. data/unittests/lib/utility_test.c +23 -1
  51. 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
- data.tar.gz: f69593a5a3dd91e192bae4b0134220e6b723a1a7
7
- metadata.gz: 0fba34c5a5378885651c99a5c928e28f04de1e0b
3
+ metadata.gz: 7fd5b47d45e7a0338002ebdb7c4a773cb38adad6
4
+ data.tar.gz: 6394df3370fdea2695913e11c1ff935ca32c049e
5
+ SHA512:
6
+ metadata.gz: b8f264d3ce3d2b393f07ec9f53df77dad75532813b25901e3c74c452d6d7c9c0995bfb3773b59e851f16a192a1a5373d6dbdd0a6525d745e824dac06fe02634c
7
+ data.tar.gz: 1df9b3476330bad7da63ddc19f0a787f8cf94106be78bc57b7ade172d93f6908adf2cc2561aacb88a6a28045f82f19b0789ce8c83bbca007823eb90ccdda3608
data/.gitignore CHANGED
@@ -17,6 +17,7 @@ doc
17
17
 
18
18
  # other generated files
19
19
  *.dependency
20
+ *.depends
20
21
  /tmp
21
22
  GPATH
22
23
  GRTAGS
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
@@ -14,3 +14,6 @@ before_install:
14
14
  - sudo apt-get update -qq
15
15
  - sudo apt-get install libpcap-dev -qq
16
16
  - gem install bundler
17
+
18
+ notifications:
19
+ webhooks: http://trema-hubot.herokuapp.com/hubot/travis?room=1
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.1"
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, :spec ]
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
- :libtrema,
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 "cbench" => "cbench:ruby"
129
+ task :cbench => "cbench:ruby"
185
130
 
186
131
 
187
- desc "Run the c cbench switch controller to benchmark"
188
- task "cbench:c" => :default do | t |
189
- run_cbench cbench_c_controller
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 ruby cbench switch controller to benchmark"
194
- task "cbench:ruby" => :default do | t |
195
- run_cbench cbench_ruby_controller
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" => :default do
201
- cbench_profile cbench_latency_mode_options
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:oflops",
215
- "vendor:openflow",
216
- "vendor:openvswitch",
217
- "vendor:phost",
218
- ]
157
+ task :vendor do
158
+ sys "rake vendor"
159
+ end
219
160
 
220
- task :distclean => [
221
- "vendor:cmockery:distclean",
222
- "vendor:oflops:distclean",
223
- "vendor:openflow:distclean",
224
- "vendor:openvswitch:distclean",
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.unpack_tgz "#{ Trema.vendor_openflow }.tar.gz", :in => Trema.vendor
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.unpack_tgz "#{ Trema.vendor_cmockery }.tar.gz", :in => Trema.vendor
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 :libtrema => libtrema
409
- file libtrema => libtrema_o.candidates do | t |
410
- build_libtrema_a.call t
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 :libtrema_so => libtrema_so
415
- file libtrema_so => libtrema_o.candidates do | t |
416
- build_libtrema_so.call t
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 "coverage:libtrema" => libtrema_gcov
421
- file libtrema_gcov => libtrema_gcov_o.candidates do | t |
422
- build_libtrema_a.call t
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 => [ "coverage:libtrema", each ]
911
- task each => [ "coverage:libtrema", "vendor:cmockery", "objects/unittests/cmockery_trema.o", "#{ Trema.home }/objects/unittests" ]
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"