Changes between Version 22 and Version 23 of GEC18Agenda/GettingStartedWithGENI_III_GIMI/Procedure/Execute
- Timestamp:
- 01/09/14 03:52:25 (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GEC18Agenda/GettingStartedWithGENI_III_GIMI/Procedure/Execute
v22 v23 49 49 50 50 {{{ 51 defProperty('source1', "nodeA", "ID of a resource") 52 defProperty('source2', "nodeB", "ID of a resource") 53 defProperty('source3', "nodeC", "ID of a resource") 54 defProperty('source4', "nodeD", "ID of a resource") 55 defProperty('source5', "nodeE", "ID of a resource") 56 57 #defProperty('sink1', "nodeA", "ID of a sink") 58 #defProperty('sink2', "nodeB", "ID of a sink") 59 #defProperty('sink3', "nodeC", "ID of a sink") 60 #defProperty('sink4', "nodeD", "ID of a sink") 61 #defProperty('sink5', "nodeE", "ID of a sink") 62 63 defProperty('sinkaddr11', '192.168.4.10', "Ping destination address") 51 defProperty('source1', "nodeA-fivenodeping", "ID of a resource") 52 defProperty('source2', "nodeB-fivenodeping", "ID of a resource") 53 defProperty('source3', "nodeC-fivenodeping", "ID of a resource") 54 defProperty('source4', "nodeD-fivenodeping", "ID of a resource") 55 defProperty('source5', "nodeE-fivenodeping", "ID of a resource") 56 #defProperty('graph', true, "Display graph or not") 57 58 59 defProperty('sinkaddr11', '192.168.1.2', "Ping destination address") 60 defProperty('sinkaddr12', '192.168.1.4', "Ping destination address") 61 62 defProperty('sinkaddr11', '192.168.6.10', "Ping destination address") 64 63 defProperty('sinkaddr12', '192.168.5.12', "Ping destination address") 65 64 … … 78 77 defProperty('sinkaddr51', '192.168.6.12', "Ping destination address") 79 78 80 defApplication('ping_app', 'pingmonitor') do |a| 81 a.path = "/root/pingWrap.rb" 82 a.version(1, 2, 0) 83 a.shortDescription = "Wrapper around ping" 84 a.description = "ping application" 85 a.defProperty('dest_addr', 'Address to ping', '-a', {:type => :string, :dynamic => false}) 86 a.defProperty('count', 'Number of times to ping', '-c', {:type => :integer, :dynamic => false}) 87 a.defProperty('interval', 'Interval between pings in s', '-i', {:type => :integer, :dynamic => false}) 88 89 a.defMeasurement('myping') do |m| 90 m.defMetric('dest_addr',:string) 91 m.defMetric('ttl',:int) 92 m.defMetric('rtt',:float) 93 m.defMetric('rtt_unit',:string) 94 end 95 end 96 79 defApplication('ping') do |app| 80 app.description = 'Simple Definition for the ping-oml2 application' 81 # Define the path to the binary executable for this application 82 app.binary_path = '/usr/local/bin/ping-oml2' 83 # Define the configurable parameters for this application 84 # For example if target is set to foo.com and count is set to 2, then the 85 # application will be started with the command line: 86 # /usr/bin/ping-oml2 -a foo.com -c 2 87 app.defProperty('target', 'Address to ping', '-a', {:type => :string}) 88 app.defProperty('count', 'Number of times to ping', '-c', {:type => :integer}) 89 # Define the OML2 measurement point that this application provides. 90 # Here we have only one measurement point (MP) named 'ping'. Each measurement 91 # sample from this MP will be composed of a 4-tuples (addr,ttl,rtt,rtt_unit) 92 app.defMeasurement('ping') do |m| 93 m.defMetric('dest_addr',:string) 94 m.defMetric('ttl',:uint32) 95 m.defMetric('rtt',:double) 96 m.defMetric('rtt_unit',:string) 97 end 98 end 97 99 defGroup('Source1', property.source1) do |node| 98 node.addApplication("ping_app") do |app| 99 app.setProperty('dest_addr', property.sinkaddr11) 100 app.setProperty('count', 30) 101 app.setProperty('interval', 1) 102 app.measure('myping', :samples => 1) 103 end 104 105 node.addApplication("ping_app") do |app| 106 app.setProperty('dest_addr', property.sinkaddr12) 107 app.setProperty('count', 30) 108 app.setProperty('interval', 1) 109 app.measure('myping', :samples => 1) 110 end 111 end 100 node.addApplication("ping") do |app| 101 app.setProperty('target', property.sinkaddr12) 102 app.setProperty('count', 30) 103 #app.setProperty('interval', 1) 104 app.measure('ping', :samples => 1) 105 end 106 end 107 112 108 113 109 defGroup('Source2', property.source2) do |node| 114 node.addApplication("ping_app") do |app| 115 app.setProperty('dest_addr', property.sinkaddr21) 116 app.setProperty('count', 30) 117 app.setProperty('interval', 1) 118 app.measure('myping', :samples => 1) 119 end 120 121 node.addApplication("ping_app") do |app| 122 app.setProperty('dest_addr', property.sinkaddr22) 123 app.setProperty('count', 30) 124 app.setProperty('interval', 1) 125 app.measure('myping', :samples => 1) 126 end 127 128 node.addApplication("ping_app") do |app| 129 app.setProperty('dest_addr', property.sinkaddr23) 130 app.setProperty('count', 30) 131 app.setProperty('interval', 1) 132 app.measure('myping', :samples => 1) 110 node.addApplication("ping") do |app| 111 app.setProperty('target', property.sinkaddr11) 112 app.setProperty('count', 30) 113 #app.setProperty('interval', 1) 114 app.measure('ping', :samples => 1) 115 end 116 node.addApplication("ping") do |app| 117 app.setProperty('target', property.sinkaddr21) 118 app.setProperty('count', 30) 119 #app.setProperty('interval', 1) 120 app.measure('ping', :samples => 1) 121 end 122 123 node.addApplication("ping") do |app| 124 app.setProperty('target', property.sinkaddr22) 125 app.setProperty('count', 30) 126 #app.setProperty('interval', 1) 127 app.measure('ping', :samples => 1) 128 end 129 130 node.addApplication("ping") do |app| 131 app.setProperty('target', property.sinkaddr23) 132 app.setProperty('count', 30) 133 #app.setProperty('interval', 1) 134 app.measure('ping', :samples => 1) 133 135 end 134 136 end 135 137 136 138 defGroup('Source3', property.source3) do |node| 137 node.addApplication("ping _app") do |app|138 app.setProperty(' dest_addr', property.sinkaddr31)139 app.setProperty('count', 30) 140 app.setProperty('interval', 1)141 app.measure(' myping', :samples => 1)142 end 143 144 node.addApplication("ping _app") do |app|145 app.setProperty(' dest_addr', property.sinkaddr32)146 app.setProperty('count', 30) 147 app.setProperty('interval', 1)148 app.measure(' myping', :samples => 1)149 end 150 151 node.addApplication("ping _app") do |app|152 app.setProperty(' dest_addr', property.sinkaddr33)153 app.setProperty('count', 30) 154 app.setProperty('interval', 1)155 app.measure(' myping', :samples => 1)156 end 157 158 node.addApplication("ping _app") do |app|159 app.setProperty(' dest_addr', property.sinkaddr34)160 app.setProperty('count', 30) 161 app.setProperty('interval', 1)162 app.measure(' myping', :samples => 1)139 node.addApplication("ping") do |app| 140 app.setProperty('target', property.sinkaddr31) 141 app.setProperty('count', 30) 142 #app.setProperty('interval', 1) 143 app.measure('ping', :samples => 1) 144 end 145 146 node.addApplication("ping") do |app| 147 app.setProperty('target', property.sinkaddr32) 148 app.setProperty('count', 30) 149 #app.setProperty('interval', 1) 150 app.measure('ping', :samples => 1) 151 end 152 153 node.addApplication("ping") do |app| 154 app.setProperty('target', property.sinkaddr33) 155 app.setProperty('count', 30) 156 #app.setProperty('interval', 1) 157 app.measure('ping', :samples => 1) 158 end 159 160 node.addApplication("ping") do |app| 161 app.setProperty('target', property.sinkaddr34) 162 app.setProperty('count', 30) 163 #app.setProperty('interval', 1) 164 app.measure('ping', :samples => 1) 163 165 end 164 166 end 165 167 166 168 defGroup('Source4', property.source4) do |node| 167 168 node.addApplication("ping_app") do |app| 169 app.setProperty('dest_addr', property.sinkaddr41) 170 app.setProperty('count', 30) 171 app.setProperty('interval', 1) 172 app.measure('myping', :samples => 1) 173 end 174 175 node.addApplication("ping_app") do |app| 176 app.setProperty('dest_addr', property.sinkaddr42) 177 app.setProperty('count', 30) 178 app.setProperty('interval', 1) 179 app.measure('myping', :samples => 1) 169 node.addApplication("ping") do |app| 170 app.setProperty('target', property.sinkaddr41) 171 app.setProperty('count', 30) 172 #app.setProperty('interval', 1) 173 app.measure('ping', :samples => 1) 174 end 175 176 node.addApplication("ping") do |app| 177 app.setProperty('target', property.sinkaddr42) 178 app.setProperty('count', 30) 179 #app.setProperty('interval', 1) 180 app.measure('ping', :samples => 1) 180 181 end 181 182 end 182 183 183 184 defGroup('Source5', property.source5) do |node| 184 node.addApplication("ping_app") do |app| 185 app.setProperty('dest_addr', property.sinkaddr51) 186 app.setProperty('count', 30) 187 app.setProperty('interval', 1) 188 app.measure('myping', :samples => 1) 189 end 190 end 185 node.addApplication("ping") do |app| 186 app.setProperty('target', property.sinkaddr51) 187 app.setProperty('count', 30) 188 #app.setProperty('interval', 1) 189 app.measure('ping', :samples => 1) 190 end 191 end 192 193 194 195 196 #defGroup('Sink1', property.sink1) do |node| 197 #end 198 199 #defGroup('Sink2', property.sink2) do |node| 200 #end 201 202 #defGroup('Sink3', property.sink3) do |node| 203 #end 204 205 #defGroup('Sink4', property.sink4) do |node| 206 #end 207 208 #defGroup('Sink5', property.sink5) do |node| 209 #end 191 210 192 211 onEvent(:ALL_UP_AND_INSTALLED) do |event| 193 212 info "Starting the ping" 194 allGroups.startApplications 195 wait 5 196 info "Stopping the ping" 197 allGroups.stopApplications 198 Experiment.done 199 end 213 after 5 do 214 allGroups.startApplications 215 end 216 after 70 do 217 info "Stopping the ping" 218 allGroups.stopApplications 219 Experiment.done 220 end 221 end 222 223 defGraph 'RTT' do |g| 224 g.ms('ping').select(:oml_seq, :dest_addr, :rtt) 225 g.caption "RTT of received packets." 226 g.type 'line_chart3' 227 g.mapping :x_axis => :oml_seq, :y_axis => :rtt, :group_by => :dest_addr 228 g.xaxis :legend => 'oml_seq' 229 g.yaxis :legend => 'rtt', :ticks => {:format => 's'} 230 end 231 200 232 }}} 201 233 … … 208 240 209 241 {{{ 210 defGroup('Node1', "nodeA") 211 defGroup('Node2', "nodeB") 212 defGroup('Node3', "nodeC") 213 defGroup('Node4', "nodeD") 214 defGroup('Node5', "nodeE") 242 #defProperty('source1', 'omf.nicta.node11', 'ID of a resource') 243 #defProperty('source2', 'omf.nicta.node13', 'ID of a resource') 244 #defProperty('target', 'emmy9.casa.umass.edu/expect_wget_script.sh', 'download target1') 245 #defProperty('target1', 'emmy9.casa.umass.edu/expect_script.sh', 'download target2') 246 247 defGroup('Node1', "nodeA-fivenodetest") 248 defGroup('Node2', "nodeB-fivenodetest") 249 defGroup('Node3', "nodeC-fivenodetest") 250 defGroup('Node4', "nodeD-fivenodetest") 251 defGroup('Node5', "nodeE-fivenodetest") 215 252 216 253 217 254 onEvent(:ALL_UP) do |event| 218 wait 1 255 after 1 do 256 # group('All').startApplications 219 257 info 'Changing routing setup' 220 258 221 group('Node1').exec(" route add -net 192.168.1.0/24 gw 192.168.4.10")222 group('Node1').exec(" route add -net 192.168.2.0/24 gw 192.168.4.10")223 group('Node1').exec(" route add -net 192.168.3.0/24 gw 192.168.5.12")224 group('Node1').exec(" route add -net 192.168.6.0/24 gw 192.168.5.12")259 group('Node1').exec("/sbin/route add -net 192.168.1.0/24 gw 192.168.4.10") 260 group('Node1').exec("/sbin/route add -net 192.168.2.0/24 gw 192.168.4.10") 261 group('Node1').exec("/sbin/route add -net 192.168.3.0/24 gw 192.168.5.12") 262 group('Node1').exec("/sbin/route add -net 192.168.6.0/24 gw 192.168.5.12") 225 263 group('Node1').exec("echo 1 > /proc/sys/net/ipv4/ip_forward") 226 264 227 group('Node2').exec(" route add -net 192.168.3.0/24 gw 192.168.1.13")228 group('Node2').exec(" route add -net 192.168.5.0/24 gw 192.168.4.11")229 group('Node2').exec(" route add -net 192.168.6.0/24 gw 192.168.2.12")265 group('Node2').exec("/sbin/route add -net 192.168.3.0/24 gw 192.168.1.13") 266 group('Node2').exec("/sbin/route add -net 192.168.5.0/24 gw 192.168.4.11") 267 group('Node2').exec("/sbin/route add -net 192.168.6.0/24 gw 192.168.2.12") 230 268 group('Node2').exec("echo 1 > /proc/sys/net/ipv4/ip_forward") 231 269 232 group('Node3').exec(" route add -net 192.168.1.0/24 gw 192.168.3.13")233 group('Node3').exec(" route add -net 192.168.4.0/24 gw 192.168.5.11")270 group('Node3').exec("/sbin/route add -net 192.168.1.0/24 gw 192.168.3.13") 271 group('Node3').exec("/sbin/route add -net 192.168.4.0/24 gw 192.168.5.11") 234 272 group('Node3').exec("echo 1 > /proc/sys/net/ipv4/ip_forward") 235 273 236 group('Node4').exec(" route add -net 192.168.2.0/24 gw 192.168.3.12")237 group('Node4').exec(" route add -net 192.168.4.0/24 gw 192.168.1.10")238 group('Node4').exec(" route add -net 192.168.5.0/24 gw 192.168.3.12")239 group('Node4').exec(" route add -net 192.168.6.0/24 gw 192.168.3.12")274 group('Node4').exec("/sbin/route add -net 192.168.2.0/24 gw 192.168.3.12") 275 group('Node4').exec("/sbin/route add -net 192.168.4.0/24 gw 192.168.1.10") 276 group('Node4').exec("/sbin/route add -net 192.168.5.0/24 gw 192.168.3.12") 277 group('Node4').exec("/sbin/route add -net 192.168.6.0/24 gw 192.168.3.12") 240 278 group('Node4').exec("echo 1 > /proc/sys/net/ipv4/ip_forward") 241 279 242 group('Node5').exec(" route add -net 192.168.2.0/24 gw 192.168.6.12")243 group('Node5').exec(" route add -net 192.168.1.0/24 gw 192.168.6.12")244 group('Node5').exec(" route add -net 192.168.3.0/24 gw 192.168.6.12")245 group('Node5').exec(" route add -net 192.168.4.0/24 gw 192.168.6.12")246 group('Node5').exec(" route add -net 192.168.5.0/24 gw 192.168.6.12")280 group('Node5').exec("/sbin/route add -net 192.168.2.0/24 gw 192.168.6.12") 281 group('Node5').exec("/sbin/route add -net 192.168.1.0/24 gw 192.168.6.12") 282 group('Node5').exec("/sbin/route add -net 192.168.3.0/24 gw 192.168.6.12") 283 group('Node5').exec("/sbin/route add -net 192.168.4.0/24 gw 192.168.6.12") 284 group('Node5').exec("/sbin/route add -net 192.168.5.0/24 gw 192.168.6.12") 247 285 248 286 info 'Routing setup finished' 249 wait 5 287 end 288 289 after 6 do 250 290 info 'Stopping applications' 251 291 allGroups.stopApplications 252 wait 1 292 end 293 after 7 do 253 294 Experiment.done 254 end 295 end 296 end 297 255 298 }}} 256 299 … … 267 310 268 311 {{{ 269 defProperty('source1', "nodeA", "ID of a resource") 270 defProperty('source2', "nodeB", "ID of a resource") 271 defProperty('source3', "nodeC", "ID of a resource") 272 defProperty('source4', "nodeD", "ID of a resource") 273 defProperty('source5', "nodeE", "ID of a resource") 312 defProperty('source1', "nodeA-fivenodeping", "ID of a resource") 313 defProperty('source2', "nodeB-fivenodeping", "ID of a resource") 314 defProperty('source3', "nodeC-fivenodeping", "ID of a resource") 315 defProperty('source4', "nodeD-fivenodeping", "ID of a resource") 316 defProperty('source5', "nodeE-fivenodeping", "ID of a resource") 317 274 318 275 319 defProperty('sinkaddr11', '192.168.1.13', "Ping destination address") … … 287 331 defProperty('sinkaddr53', '192.168.3.13', "Ping destination address") 288 332 289 defApplication('ping_app', 'pingmonitor') do |a| 290 a.path = "/root/pingWrap.rb" 291 a.version(1, 2, 0) 292 a.shortDescription = "Wrapper around ping" 293 a.description = "ping application" 294 a.defProperty('dest_addr', 'Address to ping', '-a', {:type => :string, :dynamic => false}) 295 a.defProperty('count', 'Number of times to ping', '-c', {:type => :integer, :dynamic => false}) 296 a.defProperty('interval', 'Interval between pings in s', '-i', {:type => :integer, :dynamic => false}) 297 298 a.defMeasurement('myping') do |m| 299 m.defMetric('dest_addr',:string) 300 m.defMetric('ttl',:int) 301 m.defMetric('rtt',:float) 302 m.defMetric('rtt_unit',:string) 303 end 333 defApplication('ping') do |app| 334 app.description = 'Simple Definition for the ping-oml2 application' 335 # Define the path to the binary executable for this application 336 app.binary_path = '/usr/local/bin/ping-oml2' 337 # Define the configurable parameters for this application 338 # For example if target is set to foo.com and count is set to 2, then the 339 # application will be started with the command line: 340 # /usr/bin/ping-oml2 -a foo.com -c 2 341 app.defProperty('target', 'Address to ping', '-a', {:type => :string}) 342 app.defProperty('count', 'Number of times to ping', '-c', {:type => :integer}) 343 # Define the OML2 measurement point that this application provides. 344 # Here we have only one measurement point (MP) named 'ping'. Each measurement 345 # sample from this MP will be composed of a 4-tuples (addr,ttl,rtt,rtt_unit) 346 app.defMeasurement('ping') do |m| 347 m.defMetric('dest_addr',:string) 348 m.defMetric('ttl',:uint32) 349 m.defMetric('rtt',:double) 350 m.defMetric('rtt_unit',:string) 351 end 304 352 end 305 353 306 354 defGroup('Source1', property.source1) do |node| 307 node.addApplication("ping_app") do |app|308 app.setProperty('dest_addr', property.sinkaddr11)309 310 311 app.measure('myping', :samples => 1)355 node.addApplication("ping") do |app| 356 app.setProperty('target', property.sinkaddr11) 357 app.setProperty('count', 30) 358 #app.setProperty('interval', 1) 359 app.measure('ping', :samples => 1) 312 360 end 313 361 314 node.addApplication("ping_app") do |app|315 app.setProperty('dest_addr', property.sinkaddr12)316 317 318 app.measure('myping', :samples => 1)319 320 321 node.addApplication("ping_app") do |app|322 app.setProperty('dest_addr', property.sinkaddr13)323 app.setProperty('count', 30)324 app.setProperty('interval', 1)325 app.measure('myping', :samples => 1)326 362 node.addApplication("ping") do |app| 363 app.setProperty('target', property.sinkaddr12) 364 app.setProperty('count', 30) 365 #app.setProperty('interval', 1) 366 app.measure('ping', :samples => 1) 367 end 368 369 node.addApplication("ping") do |app| 370 app.setProperty('target', property.sinkaddr13) 371 app.setProperty('count', 30) 372 #app.setProperty('interval', 1) 373 app.measure('ping', :samples => 1) 374 end 327 375 end 328 376 329 377 defGroup('Source2', property.source1) do |node| 330 node.addApplication("ping_app") do |app|331 app.setProperty('dest_addr', property.sinkaddr21)332 app.setProperty('count', 30)333 app.setProperty('interval', 1)334 app.measure('myping', :samples => 1)335 end378 node.addApplication("ping") do |app| 379 app.setProperty('target', property.sinkaddr21) 380 app.setProperty('count', 30) 381 #app.setProperty('interval', 1) 382 app.measure('ping', :samples => 1) 383 end 336 384 end 337 385 338 386 defGroup('Source4', property.source3) do |node| 339 node.addApplication("ping_app") do |app|340 app.setProperty('dest_addr', property.sinkaddr41)341 342 343 app.measure('myping', :samples => 1)344 345 346 node.addApplication("ping_app") do |app|347 app.setProperty('dest_addr', property.sinkaddr42)348 349 350 app.measure('myping', :samples => 1)351 352 353 node.addApplication("ping_app") do |app|354 app.setProperty('dest_addr', property.sinkaddr43)355 356 357 app.measure('myping', :samples => 1)358 387 node.addApplication("ping") do |app| 388 app.setProperty('target', property.sinkaddr41) 389 app.setProperty('count', 30) 390 #app.setProperty('interval', 1) 391 app.measure('ping', :samples => 1) 392 end 393 394 node.addApplication("ping") do |app| 395 app.setProperty('target', property.sinkaddr42) 396 app.setProperty('count', 30) 397 #app.setProperty('interval', 1) 398 app.measure('ping', :samples => 1) 399 end 400 401 node.addApplication("ping") do |app| 402 app.setProperty('target', property.sinkaddr43) 403 app.setProperty('count', 30) 404 #app.setProperty('interval', 1) 405 app.measure('ping', :samples => 1) 406 end 359 407 end 360 408 361 409 defGroup('Source5', property.source3) do |node| 362 node.addApplication("ping_app") do |app|363 app.setProperty('dest_addr', property.sinkaddr51)364 365 366 app.measure('myping', :samples => 1)367 368 369 node.addApplication("ping_app") do |app|370 app.setProperty('dest_addr', property.sinkaddr52)371 372 373 app.measure('myping', :samples => 1)374 375 376 node.addApplication("ping_app") do |app|377 app.setProperty('dest_addr', property.sinkaddr53)378 379 380 app.measure('myping', :samples => 1)381 410 node.addApplication("ping") do |app| 411 app.setProperty('target', property.sinkaddr51) 412 app.setProperty('count', 30) 413 #app.setProperty('interval', 1) 414 app.measure('ping', :samples => 1) 415 end 416 417 node.addApplication("ping") do |app| 418 app.setProperty('target', property.sinkaddr52) 419 app.setProperty('count', 30) 420 #app.setProperty('interval', 1) 421 app.measure('ping', :samples => 1) 422 end 423 424 node.addApplication("ping") do |app| 425 app.setProperty('target', property.sinkaddr53) 426 app.setProperty('count', 30) 427 #app.setProperty('interval', 1) 428 app.measure('ping', :samples => 1) 429 end 382 430 end 383 431 384 432 onEvent(:ALL_UP_AND_INSTALLED) do |event| 385 info "Starting the ping" 386 allGroups.startApplications 387 wait 5 388 info "Stopping the ping" 389 allGroups.stopApplications 390 Experiment.done 391 end 433 info "Starting the ping" 434 after 5 do 435 allGroups.startApplications 436 end 437 after 70 do 438 info "Stopping the ping" 439 allGroups.stopApplications 440 Experiment.done 441 end 442 end 443 444 445 defGraph 'RTT' do |g| 446 g.ms('ping').select(:oml_seq, :dest_addr, :rtt) 447 g.caption "RTT of received packets." 448 g.type 'line_chart3' 449 g.mapping :x_axis => :oml_seq, :y_axis => :rtt, :group_by => :dest_addr 450 g.xaxis :legend => 'oml_seq' 451 g.yaxis :legend => 'rtt', :ticks => {:format => 's'} 452 end 453 454 455 392 456 }}} 393 457 … … 404 468 405 469 ==== OEDL Script ==== 406 '''step4- otg_nmetrics.rb''470 '''step4-iperf.rb'' 407 471 408 472 409 473 {{{ 410 defProperty('theSender','nodeB','ID of sender node') 411 defProperty('theReceiver1', 'nodeE', "ID of receiver node") 412 defProperty('theReceiver2', 'nodeA', "ID of receiver node") 413 defProperty('theReceiver3', 'nodeD', "ID of receiver node") 414 defProperty('packetsize', 128, "Packet size (byte) from the sender node") 415 defProperty('bitrate', 2048, "Bitrate (bit/s) from the sender node") 416 defProperty('runtime', 40, "Time in second for the experiment is to run") 417 418 defGroup('Sender',property.theSender) do |node| 419 options = { 'sample-interval' => 2 } 420 node.addPrototype("system_monitor", options) 421 node.addApplication("test:app:otg2") do |app| 422 app.setProperty('udp:local_host', '192.168.2.10') 423 app.setProperty('udp:dst_host', '192.168.6.14') 424 app.setProperty('udp:dst_port', 3000) 425 app.setProperty('cbr:size', property.packetsize) 426 app.setProperty('cbr:rate', property.bitrate * 2) 427 app.measure('udp_out', :samples => 1) 428 end 429 430 node.addApplication("test:app:otg2") do |app| 431 app.setProperty('udp:local_host', '192.168.4.10') 432 app.setProperty('udp:dst_host', '192.168.4.11') 433 app.setProperty('udp:dst_port', 3000) 434 app.setProperty('cbr:size', property.packetsize) 435 app.setProperty('cbr:rate', property.bitrate * 2) 436 app.measure('udp_out', :samples => 1) 437 end 438 439 node.addApplication("test:app:otg2") do |app| 440 app.setProperty('udp:local_host', '192.168.1.10') 441 app.setProperty('udp:dst_host', '192.168.1.13') 442 app.setProperty('udp:dst_port', 3000) 443 app.setProperty('cbr:size', property.packetsize) 444 app.setProperty('cbr:rate', property.bitrate * 2) 445 app.measure('udp_out', :samples => 1) 446 end 447 end 448 449 defGroup('Receiver1',property.theReceiver1) do |node| 450 options = { 'sample-interval' => 2 } 451 node.addPrototype("system_monitor", options) 452 453 node.addApplication("test:app:otr2") do |app| 454 app.setProperty('udp:local_host', '192.168.6.14') 455 app.setProperty('udp:local_port', 3000) 456 app.measure('udp_in', :samples => 1) 457 end 458 end 459 460 defGroup('Receiver2',property.theReceiver2) do |node| 461 options = { 'sample-interval' => 2 } 462 node.addPrototype("system_monitor", options) 463 node.addApplication("test:app:otr2") do |app| 464 app.setProperty('udp:local_host', '192.168.4.11') 465 app.setProperty('udp:local_port', 3000) 466 app.measure('udp_in', :samples => 1) 467 end 468 end 469 470 defGroup('Receiver3',property.theReceiver3) do |node| 471 options = { 'sample-interval' => 2 } 472 node.addPrototype("system_monitor", options) 473 node.addApplication("test:app:otr2") do |app| 474 app.setProperty('udp:local_host', '192.168.1.13') 475 app.setProperty('udp:local_port', 3000) 476 app.measure('udp_in', :samples => 1) 474 defProperty('source1', "nodeA-fivenodetest", "ID of a resource") 475 defProperty('source2', "nodeB-fivenodetest", "ID of a resource") 476 defProperty('source3', "nodeC-fivenodetest", "ID of a resource") 477 defProperty('source4', "nodeD-fivenodetest", "ID of a resource") 478 defProperty('source5', "nodeE-fivenodetest", "ID of a resource") 479 480 481 defProperty('sinkaddr11', '192.168.1.13', "Ping destination address") 482 defProperty('sinkaddr12', '192.168.3.13', "Ping destination address") 483 defProperty('sinkaddr13', '192.168.6.14', "Ping destination address") 484 485 defProperty('sinkaddr21', '192.168.6.14', "Ping destination address") 486 487 defProperty('sinkaddr41', '192.168.4.11', "Ping destination address") 488 defProperty('sinkaddr42', '192.168.5.11', "Ping destination address") 489 defProperty('sinkaddr43', '192.168.6.14', "Ping destination address") 490 491 defProperty('sinkaddr51', '192.168.5.11', "Ping destination address") 492 defProperty('sinkaddr52', '192.168.2.10', "Ping destination address") 493 defProperty('sinkaddr53', '192.168.3.13', "Ping destination address") 494 495 defApplication('iperf') do |app| 496 app.description = "Iperf is a traffic generator and bandwidth measurement 497 tool. It provides generators producing various forms of packet streams and port 498 for sending these packets via various transports, such as TCP and UDP." 499 app.binary_path = "/usr/bin/iperf_oml2" 500 501 #app.defProperty('interval', 'pause n seconds between periodic bandwidth reports', '-i', 502 # :type => :double, :unit => "seconds", :default => '1.') 503 app.defProperty('len', 'set length read/write buffer to n (default 8 KB)', '-l', 504 :type => :integer, :unit => "KiBytes") 505 app.defProperty('print_mss', 'print TCP maximum segment size (MTU - TCP/IP header)', '-m', 506 :type => :boolean) 507 app.defProperty('output', 'output the report or error message to this specified file', '-o', 508 :type => :string) 509 app.defProperty('port', 'set server port to listen on/connect to to n (default 5001)', '-p', 510 :type => :integer) 511 app.defProperty('udp', 'use UDP rather than TCP', '-u', 512 :type => :boolean, 513 :order => 2) 514 app.defProperty('window', 'TCP window size (socket buffer size)', '-w', 515 :type => :integer, :unit => "Bytes") 516 app.defProperty('bind', 'bind to <host>, an interface or multicast address', '-B', 517 :type => :string) 518 app.defProperty('compatibility', 'for use with older versions does not sent extra msgs', '-C', 519 :type => :boolean) 520 app.defProperty('mss', 'set TCP maximum segment size (MTU - 40 bytes)', '-M', 521 :type => :integer, :unit => "Bytes") 522 app.defProperty('nodelay', 'set TCP no delay, disabling Nagle\'s Algorithm', '-N', 523 :type => :boolean) 524 app.defProperty('IPv6Version', 'set the domain to IPv6', '-V', 525 :type => :boolean) 526 app.defProperty('reportexclude', 'exclude C(connection) D(data) M(multicast) S(settings) V(server) reports', '-x', 527 :type => :string, :unit => "[CDMSV]") 528 app.defProperty('reportstyle', 'C or c for CSV report, O or o for OML', '-y', 529 :type => :string, :unit => "[CcOo]", :default => "o") # Use OML reporting by default 530 531 app.defProperty('server', 'run in server mode', '-s', 532 :type => :boolean) 533 534 app.defProperty('bandwidth', 'set target bandwidth to n bits/sec (default 1 Mbit/sec)', '-b', 535 :type => :string, :unit => "Mbps") 536 app.defProperty('client', 'run in client mode, connecting to <host>', '-c', 537 :type => :string, 538 :order => 1) 539 app.defProperty('dualtest', 'do a bidirectional test simultaneously', '-d', 540 :type => :boolean) 541 app.defProperty('num', 'number of bytes to transmit (instead of -t)', '-n', 542 :type => :integer, :unit => "Bytes") 543 app.defProperty('tradeoff', 'do a bidirectional test individually', '-r', 544 :type => :boolean) 545 app.defProperty('time', 'time in seconds to transmit for (default 10 secs)', '-t', 546 :type => :integer, :unit => "seconds") 547 app.defProperty('fileinput', 'input the data to be transmitted from a file', '-F', 548 :type => :string) 549 app.defProperty('stdin', 'input the data to be transmitted from stdin', '-I', 550 :type => :boolean) 551 app.defProperty('listenport', 'port to recieve bidirectional tests back on', '-L', 552 :type => :integer) 553 app.defProperty('parallel', 'number of parallel client threads to run', '-P', 554 :type => :integer) 555 app.defProperty('ttl', 'time-to-live, for multicast (default 1)', '-T', 556 :type => :integer, 557 :default => 1) 558 app.defProperty('linux_congestion', 'set TCP congestion control algorithm (Linux only)', '-Z', 559 :type => :boolean) 560 561 app.defMeasurement("application"){ |m| 562 m.defMetric('pid', :integer) 563 m.defMetric('version', :string) 564 m.defMetric('cmdline', :string) 565 m.defMetric('starttime_s', :integer) 566 m.defMetric('starttime_us', :integer) 567 } 568 569 app.defMeasurement("settings"){ |m| 570 m.defMetric('pid', :integer) 571 m.defMetric('server_mode', :integer) 572 m.defMetric('bind_address', :string) 573 m.defMetric('multicast', :integer) 574 m.defMetric('multicast_ttl', :integer) 575 m.defMetric('transport_protocol', :integer) 576 m.defMetric('window_size', :integer) 577 m.defMetric('buffer_size', :integer) 578 } 579 580 app.defMeasurement("connection"){ |m| 581 m.defMetric('pid', :integer) 582 m.defMetric('connection_id', :integer) 583 m.defMetric('local_address', :string) 584 m.defMetric('local_port', :integer) 585 m.defMetric('remote_address', :string) 586 m.defMetric('remote_port', :integer) 587 } 588 589 app.defMeasurement("transfer"){ |m| 590 m.defMetric('pid', :integer) 591 m.defMetric('connection_id', :integer) 592 m.defMetric('begin_interval', :double) 593 m.defMetric('end_interval', :double) 594 m.defMetric('size', :uint64) 595 } 596 597 app.defMeasurement("losses"){ |m| 598 m.defMetric('pid', :integer) 599 m.defMetric('connection_id', :integer) 600 m.defMetric('begin_interval', :double) 601 m.defMetric('end_interval', :double) 602 m.defMetric('total_datagrams', :integer) 603 m.defMetric('lost_datagrams', :integer) 604 } 605 606 app.defMeasurement("jitter"){ |m| 607 m.defMetric('pid', :integer) 608 m.defMetric('connection_id', :integer) 609 m.defMetric('begin_interval', :double) 610 m.defMetric('end_interval', :double) 611 m.defMetric('jitter', :double) 612 } 613 614 app.defMeasurement("packets"){ |m| 615 m.defMetric('pid', :integer) 616 m.defMetric('connection_id', :integer) 617 m.defMetric('packet_id', :integer) 618 m.defMetric('packet_size', :integer) 619 m.defMetric('packet_time_s', :integer) 620 m.defMetric('packet_time_us', :integer) 621 m.defMetric('packet_sent_time_s', :integer) 622 m.defMetric('packet_sent_time_us', :integer) 623 } 624 625 end 626 627 628 defGroup('Serverapp', property.source1, property.source2, property.source4, property.source5) do |node| 629 node.addApplication("iperf") do |app| 630 #app.setProperty('interval', property.setinterval) 631 app.setProperty('server',true) 632 app.setProperty('port',6001) 633 app.measure('transfer', :samples => 1) 634 end 635 end 636 637 638 defGroup('Source1', property.source1) do |node| 639 node.addApplication("iperf") do |app| 640 #app.setProperty('interval',property.setinterval) 641 app.setProperty('client',property.sinkaddr11) 642 app.setProperty('time',30) 643 app.setProperty('port',6001) 644 #app.setProperty('bandwidth',property.setbandwidth) 645 app.measure('transfer', :samples => 1) 646 app.measure('packets', :samples => 1) 647 end 648 node.addApplication("iperf") do |app| 649 #app.setProperty('interval',property.setinterval) 650 app.setProperty('client',property.sinkaddr12) 651 app.setProperty('time',30) 652 app.setProperty('port',6001) 653 #app.setProperty('bandwidth',property.setbandwidth) 654 app.measure('transfer', :samples => 1) 655 app.measure('packets', :samples => 1) 656 end 657 node.addApplication("iperf") do |app| 658 #app.setProperty('interval',property.setinterval) 659 app.setProperty('client',property.sinkaddr13) 660 app.setProperty('time',30) 661 app.setProperty('port',6001) 662 #app.setProperty('bandwidth',property.setbandwidth) 663 app.measure('transfer', :samples => 1) 664 app.measure('packets', :samples => 1) 665 end 666 end 667 defGroup('Source2', property.source2) do |node| 668 node.addApplication("iperf") do |app| 669 #app.setProperty('interval',property.setinterval) 670 app.setProperty('client',property.sinkaddr21) 671 app.setProperty('time',30) 672 app.setProperty('port',6001) 673 #app.setProperty('bandwidth',property.setbandwidth) 674 app.measure('transfer', :samples => 1) 675 app.measure('packets', :samples => 1) 676 end 677 end 678 679 defGroup('Source4', property.source4) do |node| 680 node.addApplication("iperf") do |app| 681 #app.setProperty('interval',property.setinterval) 682 app.setProperty('client',property.sinkaddr41) 683 app.setProperty('time',30) 684 app.setProperty('port',6001) 685 #app.setProperty('bandwidth',property.setbandwidth) 686 app.measure('transfer', :samples => 1) 687 app.measure('packets', :samples => 1) 688 end 689 node.addApplication("iperf") do |app| 690 #app.setProperty('interval',property.setinterval) 691 app.setProperty('client',property.sinkaddr42) 692 app.setProperty('time',30) 693 app.setProperty('port',6001) 694 #app.setProperty('bandwidth',property.setbandwidth) 695 app.measure('transfer', :samples => 1) 696 app.measure('packets', :samples => 1) 697 end 698 node.addApplication("iperf") do |app| 699 #app.setProperty('interval',property.setinterval) 700 app.setProperty('client',property.sinkaddr43) 701 app.setProperty('time',30) 702 app.setProperty('port',6001) 703 #app.setProperty('bandwidth',property.setbandwidth) 704 app.measure('transfer', :samples => 1) 705 app.measure('packets', :samples => 1) 706 end 707 end 708 709 defGroup('Source5', property.source5) do |node| 710 node.addApplication("iperf") do |app| 711 #app.setProperty('interval',property.setinterval) 712 app.setProperty('client',property.sinkaddr51) 713 app.setProperty('time',30) 714 app.setProperty('port',6001) 715 #app.setProperty('bandwidth',property.setbandwidth) 716 app.measure('transfer', :samples => 1) 717 app.measure('packets', :samples => 1) 718 end 719 node.addApplication("iperf") do |app| 720 #app.setProperty('interval',property.setinterval) 721 app.setProperty('client',property.sinkaddr52) 722 app.setProperty('time',30) 723 app.setProperty('port',6001) 724 #app.setProperty('bandwidth',property.setbandwidth) 725 app.measure('transfer', :samples => 1) 726 app.measure('packets', :samples => 1) 727 end 728 node.addApplication("iperf") do |app| 729 #app.setProperty('interval',property.setinterval) 730 app.setProperty('client',property.sinkaddr53) 731 app.setProperty('time',30) 732 app.setProperty('port',6001) 733 #app.setProperty('bandwidth',property.setbandwidth) 734 app.measure('transfer', :samples => 1) 735 app.measure('packets', :samples => 1) 477 736 end 478 737 end 479 738 480 739 onEvent(:ALL_UP_AND_INSTALLED) do |event| 481 info "starting" 482 wait 5 483 allGroups.exec("ln -s /usr/local/bin/otr2 /usr/bin/otr2") 484 allGroups.exec("ln -s /usr/local/bin/otg2 /usr/bin/otg2") 485 allGroups.exec("ln -s /usr/local/bin/oml2-nmetrics /usr/bin/oml2-nmetrics") 486 allGroups.startApplications 487 info "All applications started..." 488 wait property.runtime / 4 489 property.packetsize = 256 490 wait property.runtime / 4 491 property.packetsize = 512 492 wait property.runtime / 4 493 property.packetsize = 1024 494 wait property.runtime / 4 740 info "Starting the iperf" 741 wait 1 742 group('Serverapp').startApplications 743 wait 3 744 group('Source1').startApplications 745 group('Source2').startApplications 746 group('Source4').startApplications 747 wait 40 748 info "Stopping the iperf" 749 group('Source1').stopApplications 750 group('Source2').stopApplications 751 group('Source4').stopApplications 752 wait 2 495 753 allGroups.stopApplications 496 info "All applications stopped."497 754 Experiment.done 498 755 end 756 757 defGraph 'Received bytes' do |g| 758 g.ms('transfer').select {[ oml_ts_client.as(:ts), :size , :connection_id]} 759 g.caption "Packet length measurement." 760 g.type 'line_chart3' 761 g.mapping :x_axis => :ts, :y_axis => :size, :group_by => :connection_id 762 g.xaxis :legend => 'time [s]' 763 g.yaxis :legend => 'packet size', :ticks => {:format => 's'} 764 end 765 766 499 767 }}} 500 768