# # gec9cooked.ns - Example NS file to illustrate the use of the Emulab # frontend to ProtoGENI ('cooked mode') # # # Standard Emulab boilerplate # source tb_compat.tcl set ns [new Simulator] # # Parameters # # How many clients and servers? set num_clients 2 set num_servers 1 # Which CMs should the be on? set client_cm "emulab.net" set server_cm "uky.emulab.net" # What type should they have (pcfed gives you a virutal node, pcfedphys a # physical one) set client_type "pcfedphys" set server_type "pcfedphys" # Should they be shared nodes? # (Note: type of the nodes must be 'pcfed' for this to work') set client_shared 0 set server_shared 0 # OS images to run on each CM (default OS if left blank) set client_os "FEDORA8-OVZ-STD" set server_os "" # Tarball to install on all nodes set tarball "/proj/gec9tutorial/speedtest/speed-test.tar.gz" # Command to run to start up the software in the tarball set startup "/speed-test/run.sh" # Put some auomatically generated traffic on the link from clients to servers? set generate_traffic 1 # # Set up routers on both sides # set serverrouter [$ns node] tb-set-hardware $serverrouter "pcfedphys" tb-set-node-tarfiles $serverrouter "/ $tarball" tb-fix-node $serverrouter "urn:publicid:IDN+$server_cm+node+*" tb-set-node-failure-action $serverrouter "nonfatal" if {$server_os ne ""} { tb-set-node-os $serverrouter $server_os } set srouterprog [$serverrouter program-agent -command {/speed-test/run.sh}] set clientrouter [$ns node] tb-set-hardware $clientrouter "pcfedphys" tb-set-node-tarfiles $clientrouter "/ $tarball" tb-fix-node $clientrouter "urn:publicid:IDN+$client_cm+node+*" tb-set-node-failure-action $clientrouter "nonfatal" if {$client_os ne ""} { tb-set-node-os $clientrouter $client_os } set crouterprog [$clientrouter program-agent -command {/speed-test/run.sh}] # # Link between the two routers # set routerlink [$ns duplex-link $clientrouter $serverrouter 100Mb 0ms DropTail] if {$server_cm != $client_cm} { # If on different CMs, the link between them has to be a GRE tunnel, as we # do not support VLANs between CMs yet tb-set-link-encap $routerlink gre } # # Create a set of client machines # for {set i 1} {$i <= $num_clients} {incr i} { set client($i) [$ns node] tb-set-hardware $client($i) $client_type tb-set-node-tarfiles $client($i) "/ $tarball" tb-fix-node $client($i) "urn:publicid:IDN+$client_cm+node+*" tb-set-node-failure-action $client($i) "nonfatal" if {$client_shared == 1} { tb-set-node-usesharednode $client($i) 1.0 } if {$client_os ne ""} { tb-set-node-os $client($i) $client_os } set clientlink($i) [$ns duplex-link $client($i) $clientrouter 100Mb 0ms DropTail] set cprog($i) [$client($i) program-agent -command {/speed-test/run.sh}] } # # Create a set of server machines # for {set i 1} {$i <= $num_servers} {incr i} { set server($i) [$ns node] tb-set-hardware $server($i) $server_type tb-set-node-tarfiles $server($i) "/ $tarball" tb-fix-node $server($i) "urn:publicid:IDN+$server_cm+node+*" tb-set-node-failure-action $server($i) "nonfatal" if {$server_shared == 1} { tb-set-node-usesharednode $server($i) 1.0 } if {$server_os ne ""} { tb-set-node-os $server($i) $server_os } set serverlink($i) [$ns duplex-link $server($i) $serverrouter 100Mb 0ms DropTail] set sprog($i) [$server($i) program-agent -command {/speed-test/run.sh}] } # # Start up the webservers on all machines # We'll start the two routers immediately, then the others 30 seconds # apart # $ns at 0.0 "$srouterprog start" $ns at 0.0 "$crouterprog start" set next_time 30 for {set i 1} {$i <= $num_clients} {incr i} { $ns at $next_time "$cprog($i) start" set next_time [expr $next_time + 30] } for {set i 1} {$i <= $num_servers} {incr i} { $ns at $next_time "$sprog($i) start" set next_time [expr $next_time + 30] } # # Create automatic traffic generation betwen the server and client # routers # if {$generate_traffic} { # Create traffic source on the client router set udp0 [new Agent/UDP] $ns attach-agent $clientrouter $udp0 # Send 128-byte packets once a second set cbr0 [new Application/Traffic/CBR] $cbr0 set packetSize_ 128 $cbr0 set interval_ 1 $cbr0 attach-agent $udp0 # Create traffic sink on the server router set null0 [new Agent/Null] $ns attach-agent $serverrouter $null0 # Connect source with sink $ns connect $udp0 $null0 } # # Ask for static routing # $ns rtproto Static # # More boilerplate # $ns run