GEC9Tutorial: cooked-fed.ns

File cooked-fed.ns, 4.5 kB (added by ricci, 2 years ago)

Cooked Mode Example NS File

Line 
1 #
2 # gec9cooked.ns - Example NS file to illustrate the use of the Emulab
3 # frontend to ProtoGENI ('cooked mode')
4 #
5
6
7 #
8 # Standard Emulab boilerplate
9 #
10 source tb_compat.tcl
11 set ns [new Simulator]
12
13 #
14 # Parameters
15 #
16
17 # How many clients and servers?
18 set num_clients 2
19 set num_servers 1
20
21 # Which CMs should the be on?
22 set client_cm "emulab.net"
23 set server_cm "uky.emulab.net"
24
25 # What type should they have (pcfed gives you a virutal node, pcfedphys a
26 # physical one)
27 set client_type "pcfedphys"
28 set server_type "pcfedphys"
29
30 # Should they be shared nodes?
31 # (Note: type of the nodes must be 'pcfed' for this to work')
32 set client_shared 0
33 set server_shared 0
34
35 # OS images to run on each CM (default OS if left blank)
36 set client_os "FEDORA8-OVZ-STD"
37 set server_os ""
38
39
40 # Tarball to install on all nodes
41 set tarball "/proj/gec9tutorial/speedtest/speed-test.tar.gz"
42
43 # Command to run to start up the software in the tarball
44 set startup "/speed-test/run.sh"
45
46 # Put some auomatically generated traffic on the link from clients to servers?
47 set generate_traffic 1
48
49 #
50 # Set up routers on both sides
51 #
52 set serverrouter [$ns node]
53 tb-set-hardware $serverrouter "pcfedphys"
54 tb-set-node-tarfiles $serverrouter "/ $tarball"
55 tb-fix-node $serverrouter "urn:publicid:IDN+$server_cm+node+*"
56 tb-set-node-failure-action $serverrouter "nonfatal"
57 if {$server_os ne ""} {
58     tb-set-node-os $serverrouter $server_os
59 }
60 set srouterprog [$serverrouter program-agent -command {/speed-test/run.sh}]
61
62 set clientrouter [$ns node]
63 tb-set-hardware $clientrouter "pcfedphys"
64 tb-set-node-tarfiles $clientrouter "/ $tarball"
65 tb-fix-node $clientrouter "urn:publicid:IDN+$client_cm+node+*"
66 tb-set-node-failure-action $clientrouter "nonfatal"
67 if {$client_os ne ""} {
68     tb-set-node-os $clientrouter $client_os
69 }
70 set crouterprog [$clientrouter program-agent -command {/speed-test/run.sh}]
71
72 #
73 # Link between the two routers
74 #
75 set routerlink [$ns duplex-link $clientrouter $serverrouter 100Mb 0ms DropTail]
76 if {$server_cm != $client_cm} {
77     # If on different CMs, the link between them has to be a GRE tunnel, as we
78     # do not support VLANs between CMs yet
79     tb-set-link-encap $routerlink gre
80 }
81
82 #
83 # Create a set of client machines
84 #
85 for {set i 1} {$i <= $num_clients} {incr i} {
86     set client($i) [$ns node]
87     tb-set-hardware $client($i) $client_type
88     tb-set-node-tarfiles $client($i) "/ $tarball"
89     tb-fix-node $client($i) "urn:publicid:IDN+$client_cm+node+*"
90     tb-set-node-failure-action $client($i) "nonfatal"
91     if {$client_shared == 1} {
92         tb-set-node-usesharednode $client($i) 1.0
93     }
94     if {$client_os ne ""} {
95         tb-set-node-os $client($i) $client_os
96     }
97     set clientlink($i) [$ns duplex-link $client($i) $clientrouter 100Mb 0ms DropTail]
98     set cprog($i) [$client($i) program-agent -command {/speed-test/run.sh}]
99 }
100
101 #
102 # Create a set of server machines
103 #
104 for {set i 1} {$i <= $num_servers} {incr i} {
105     set server($i) [$ns node]
106     tb-set-hardware $server($i) $server_type
107     tb-set-node-tarfiles $server($i) "/ $tarball"
108     tb-fix-node $server($i) "urn:publicid:IDN+$server_cm+node+*"
109     tb-set-node-failure-action $server($i) "nonfatal"
110     if {$server_shared == 1} {
111         tb-set-node-usesharednode $server($i) 1.0
112     }
113     if {$server_os ne ""} {
114         tb-set-node-os $server($i) $server_os
115     }
116     set serverlink($i) [$ns duplex-link $server($i) $serverrouter 100Mb 0ms DropTail]
117     set sprog($i) [$server($i) program-agent -command {/speed-test/run.sh}]
118 }
119
120 #
121 # Start up the webservers on all machines
122 # We'll start the two routers immediately, then the others 30 seconds
123 # apart
124 #
125 $ns at 0.0 "$srouterprog start"
126 $ns at 0.0 "$crouterprog start"
127 set next_time 30
128 for {set i 1} {$i <= $num_clients} {incr i} {
129     $ns at $next_time "$cprog($i) start"
130     set next_time [expr $next_time + 30]
131 }
132 for {set i 1} {$i <= $num_servers} {incr i} {
133     $ns at $next_time "$sprog($i) start"
134     set next_time [expr $next_time + 30]
135 }
136
137 #
138 # Create automatic traffic generation betwen the server and client
139 # routers
140 #
141 if {$generate_traffic} {
142
143     # Create traffic source on the client router
144     set udp0 [new Agent/UDP]
145     $ns attach-agent $clientrouter $udp0
146
147     # Send 128-byte packets once a second
148     set cbr0 [new Application/Traffic/CBR]
149     $cbr0 set packetSize_ 128
150     $cbr0 set interval_ 1
151     $cbr0 attach-agent $udp0
152
153     # Create traffic sink on the server router
154     set null0 [new Agent/Null]
155     $ns attach-agent $serverrouter $null0
156
157     # Connect source with sink
158     $ns connect $udp0 $null0
159 }
160
161 #
162 # Ask for static routing
163 #
164 $ns rtproto Static
165
166 #
167 # More boilerplate
168 #
169 $ns run