110 likes | 280 Views
NS-2 Tutorial. CS556 Jan 22th, 2004. Figure 1 :Simplified User's View of NS. OTCL. C++ and OTcl: The Duality. Export C++ class to OTcl. Reference: http://nile.wpi.edu/NS/linkage.html. Export C++ Object Control Commands to OTcl.
E N D
NS-2 Tutorial CS556 Jan 22th, 2004
C++ and OTcl: The Duality Export C++ class to OTcl Reference: http://nile.wpi.edu/NS/linkage.html Export C++ Object Control Commands to OTcl.
For a complete NS class hierarchy, visit http://www-sop.inria.fr/rodeo/personnel/Antoine.Clerget/ns.
#Schedule events for the CBR and FTP agents • $ns at 0.1 "$cbr start" • $ns at 1.0 "$ftp start" • $ns at 4.0 "$ftp stop" • $ns at 4.5 "$cbr stop" • #Detach tcp and sink agents (not really necessary) • $ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink" • #Call the finish procedure after 5 seconds of simulation time • $ns at 5.0 "finish" • #Print CBR packet size and interval • puts "CBR packet size = [$cbr set packet_size_]" • puts "CBR interval = [$cbr set interval_]" • #Run the simulation • $ns run #Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n2 $n3 10 #Give node position (for NAM) $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right #Monitor the queue for link (n2-n3). (for NAM) $ns duplex-link-op $n2 $n3 queuePos 0.5 #Setup a TCP connection set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #Setup a FTP over TCP connection set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 #Setup a CBR over UDP connection set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false #Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #Open the Trace file set tf [open out.tr w] $ns trace-all $tf #Define a 'finish' procedure proc finish {} { global ns nf tf $ns flush-trace #Close the NAM trace file close $nf #Close the Trace file close $tf #Execute NAM on the trace file exec nam out.nam & exit 0 } #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
#script: myflowcalcall.awk # a general script for computing throughput BEGIN { arguments = 2; if (ARGC < arguments || ARGC > arguments || flowtype == 0) { printf("error: wrong number of arguments.\nawk: usage - awk -f flowcalc.awk [-v graphgran=value] [-v fidfrom=value] [-v fidto=value] [-v fid=value] -v flowtype=\"type\" -v outdata_file=\"filename\" indata_file\n--%d",ARGC); exit; } measure_interval = 0.5; bits = 0; first_time = graphgran; } { if (($1 == "r") && ((fidfrom == 0 && fidto ==0) || (($8 == fid) && ($3 == fidfrom) && ($4 == fidto))) && (flowtype == "all" || flowtype == $5)) { if (($2 - first_time) > measure_interval) { first_time = first_time + measure_interval; rate = (bits/1000000)/first_time; print filename first_time, rate; } bits = bits + $6 * 8; } } END { measure_interval = 0.5; first_time = first_time + measure_interval; rate = (bits/1000000)/first_time; print filename first_time, rate; } #Script: computeall #compute throughput so far for a certain flow awk -f myflowcalcall.awk -v graphgran=0 -v fidfrom=2 -v fidto=3 -v fid=1 -v flowtype="tcp" -v outdata_file="nothing" out.tr >thr1 echo "Compute flow1 throughput all and output to thr1" awk -f myflowcalcall.awk -v graphgran=0 -v fidfrom=2 -v fidto=3 -v fid=2 -v flowtype="cbr" -v outdata_file="nothing" out.tr >thr2 echo "Compute flow2 throughput all and output to thr2"
gnuplot #Filename: gscript # Before loading this file, # gnuplot>set term windows (x11 for unix) # Gnuplot script file for plotting data # in file "force.dat" # Gnuplot script file for plotting data in files # This file is called force.p set title "One CBR Competes with One FTP" set xlabel "Time in second" set ylabel "Throughput in Mbps" set key 3,1.8 # set label "Yield Point" at 0.003,260 # set arrow from 0.0028,250 to 0.003,280 set xr [0:5] set yr [0:2] plot "thr1" using 1:2 title 'CBR Flow' with lines, \ "thr2" using 1:2 title 'TCP Flow' with lines #Filename: saveplot #Before loading this file #gnuplot>set out myfig.ps (output file) # File name: saveplot - saves a plot as #a PostScript file # to save the current plot as a #postscript file issue the commands: # gnuplot> set out 'plotfile.ps' # gnuplot> load 'saveplot' set size 1.0, 0.4 set terminal postscript portrait \ enhanced mono lw 2 "Helvetica" 14 replot set terminal x11 set size 1,1
Build NS http://www.isi.edu/nsnam/ns/ns-build.html Linux: first build and instal the source packages of tcl, tk and otcl. Then download a snapshot of ns-2 and build it. I used to try ns-allinone but failed. Cygwin: download the allinone package for Cygwin and build it. Reference: (where most of my materials come from) http://nile.wpi.edu/NS/ http://nile.wpi.edu/NS/Example/ns-simple-trace.tcl Good to look at ~/ns-2-root/tcl/lib/ns-default.tcl, which is the init file for ns.