trema 0.3.16 → 0.3.17

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.
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"