thanx for coopration i got the error :)
On Sat, May 16, 2009 at 11:17 AM, Nikheel Kumar <iamnikh...@gmail.com>wrote: > *hi all, > > friends this tcl script is very necessary for my thesis please replay ASAP. > i am using n-2.31 with cygwin Actually i want to simulate short session and > to measure the distribution of the transmission duration of the number of > ongoing connections and the throughput in TCP connections. for this i use > monitoring the number of session. it will be look like following scenario:: > * > > > S(1) ---------------- > . | > . | > . | > . > |-----------------------------------N------------------------------------D(1) > ...........D(NodeNb) > . | > . | > . | > S(NodeNb) ----------------- > > *for this tcl file is as follows:* > > set ns [new Simulator] > > #this file contain transfer time of different connection > set Out [open Out.ns w] > > #next file will contain the number of connections > set Conn [open Conn.tr w] > > #open the trace file > set tf [open out.tr w] > $ns trace-all $tf > > #we define the 3 files that will be used to trace the queue size, > #the bandwidth and lasses at the bottleneck. > set qsize [open queuesize.tr w] > set qbw [open queuebw.tr w] > set qlost [open queuelost.tr w] > > #defining the topology > set N [$ns node] > set D [$ns node] > $ns duplex-link $N $D 2Mb 1ms DropTail > $ns queue-limit $N $D 3000 > > #number of sources > set NodeNb 6 > > #number of flows per source node > set NumberFlows 530 > > #Nodes and links > for { set j 1 } {$j<=$NodeNb} {incr j} { > set S($j) [$ns node] > $ns duplex-link $S($j) $N 100Mb 1ms DropTail > $ns queue-limit $S($j) $N 1000 > } > > #TCP sources and destinations > for {set i 1} {$i<=$NodeNb} { incr i } { > for {set j 1} {$j<=$NumberFlows} { incr j } { > set tcpsrc ($i, $j) [new Agent/TCP/Newreno] > set tcp_snk ($i, $j) [new Agent/TCPSink] > $tcpsrc($i, $j) set window_ 2000 > } > } > > #connections > for {set i 1} {$i<=$NodeNb} { incr i } { > for {set j 1} {$j<=$NumberFlows} { incr j } { > $ns attach-agent $S($i) $tcpsrc($i, $j) > $ns attach-agent $D $tcp_snk($i, $j) > $ns connect $tcpsrc($i, $j) $tcp_snk($i, $j) > } > } > > #ftp sources > for {set i 1} {$i<=$NodeNb} { incr i } { > for {set j 1} {$j<=$NumberFlows} { incr j } { > set ftp($i, $j) [$tcpsrc($i, $j) attach-source FTP] > } > } > > #generator for the random size of files > set rng1 [new RNG] > $rng1 seed 0 > set rng2 [new RNG] > $rng2 seed 0 > > #random interarrival time of tcp transfers at each source i > set RV [new RandomVariable/Exponential] > $RV set avg_ 0.045 > $RV use-rng $rng1 > > #random size of files to transmit > set RV [new RandomVariable/Exponential] > $RVSize set avg_ 10000 > $RVSize set shape_ 1.5 > $RVSize use-rng $rng2 > > #we nw define the begining times of transfers and the transfer sizes > #arrivals of sessions follow a poisson process > for {set i 1} {$i<=$NodeNb} { incr i } { > set t [$ns now] > for {set j 1} {$j<=$NumberFlows} { incr j } { > > #set the begining time of next transfer from source i > set t [expr $t + [$RV value]] > set Conct($i, $j) $t > > #set the size of next transfer from source i > set Size($i, $j) [expr [$RVSize value]] > $ns at $Conct($i, $j) "$ftp($i, $j) send $Size($i, $j)" > > #update the number of flows > $ns at #Conct($i, $j) "countFlows $i 1" > } > } > > #next is a recursive procedure that checks for each session whether > #it has ended. the procedure calls itself each 0.1 sec (this is set in > #the variable "time") > #if a connection has ended then we print in the file $Out > #* the connection identifiers r i and j > #* the start and end time of the connection, > #* the throughput of the session, > #* the size of the transfer in bytes > # and we further defines another begining of transfer after a random times > > proc Test {} { > global Conct tcpsrc Size NodeNB NumberFlows ns RV ftp Out tcp_snk > RVSize > set time 0.1 > for {set i 1} {$i<=$NodeNb} { incr i } { > for {set j 1} {$j<=$NumberFlows} { incr j } { > > #we now check if the transfer is over > if {[$tcpsrc($i, $j) set ack_]==[$tcpsrc($i, $j) set maxseq_]} > { > if {[$tcpsrc($i, $j) set ack_]>=0} { > > #if the transfer is over, we print relevent information in $Out > puts $Out "$i, $j\t$Conct($i, $j)\t[expr [$ns now]]\t\ > [expr ($Size($i, $j))/(1000*([expr [$ns now ]] - $Conct($i, > $j)))]\t$Size($i, $j)" > countFlows $i 0 > $tcpsrc($i, $j) reset > $tcp_snk($i, $j) reset > } > } > } > } > $ns at [expr [$ns now]+$time] "Test" > } > for {set j 1} {$j<=$NodeNb} { incr j } { > set Cnts($j) 0 > } > > # the following recursive procedure updates the number of connections as a > function of time. > # Each 0.2 it prints them in to $Conn. This is done by calling the > procedure with the "sign" > # parameter equal 3 (in which case the "ind" parameter does not play a > role). the procedure > # is also called by the Test procedure whenever a connection from source i > ends by assigning > # the "sign" parameter 0, or when it begins, by assigning it 1 (i is passed > through the "ind" > # variable). > > proc countFlows { ind sign } { > global Cnts Conn NodeNb > set ns [Simulator instance] > if { $sign==0 } { set Cnts($ind) [expr $Cnts($ind) - 1] } > elseif { $sign==1 } { set Cnts($ind) [expr $Cnts($ind) - 1] } > else { > puts -nonewline $Conn "[$ns now] \t" > set sum 0 > for {set j 1} {$j<=$NodeNb} { incr j } { > puts -nonewline $Conn "$Cnts($j) \t" > set sum [expr $sum + $Cnts($j)] > } > puts $Conn "$sum" > $ns at [expr [$ns now] + 0.2] "countFlows 1 3" > } > } > > #define a finish procedure > proc finish {} { > global ns tf qsize qbw qlost > $ns flush-trace > close $qsize > close $qbw > close $qlost > # Execute xgraph to display the queue size, queue bandwidth and loss rate > exec xgraph queuesize.tr -geometry 800X400 -t "Queue size" -x "secs" > -y "# packets" & > exec xgraph queuebw.tr -geometry 800X400 -t "bandwidth" -x "secs" -y > "Kbps" -fg white & > exec xgraph queuelost.tr -geometry 800X400 -t "# Packet lost" -x > "secs" -y "packets" & > exit 0 > } > > # Queue Monitoring > set qfile [$ns monitor-queue $N $D [open queue.tr w] 0.05] > [$ns link $N $D] queue-sample-timeout; > > # the following records queue size, banwidth and loss rate\par > proc record {} { > global ns qfile qsize qbw qlost N D > set time 0.05 > set now [$ns now] > # print the current queue size in $qsize, the current used bandwidth in > $qbw, and the loss\par > # rate in $qloss\par > $qfile instvar parrivals_ pdepartures_ bdrops_ bdepartures_ pdrops_ > puts $qsize "$now [expr $parrivals_-$pdepartures_-$pdrops_]" > puts $qbw "$now [expr $bdepartures_*8/1024/$time]" > set bdepartures_ 0 > puts $qlost "$now [expr $pdrops_/$time]" > $ns at [expr $now+$time] "record" > } > > $ns at 0.0 "record" > $ns at 0.01 "Test" > $ns at 0.5 "countFlows 1 3" > $ns at 20 "finish" > $ns run > > > *but it is giving following error:* > > wrong # args: should "set varName ?newValue?" > while compiling > "set tcpsrc ($i, $j) [new Agent/TCP/Newreno]" > ("for" body line 2) > "for {set j 1} {$j<=$NumberFlows} { incr j } { > set tcpsrc ($i, $j) [new Agent/TCP/Newreno] > set tcp_snk ($i, $j) [new Agent/TCPSink] > $tcpsrc($i, $j)..." > ("for" body line 2) > invoked from within > "for {set i 1} {$i<=$NodeNb} { incr i } { > for {set j 1} {$j<=$NumberFlows} { incr j } { > set tcpsrc ($i, $j) [new Agent/TCP/Newreno] > set tcp_snk ($i,..." > (file "my_tcl.tcl" line 40) > > *i m unable to rectify the error. > plz help me this is very important for my thesis. > plz replay ASAP. > * > Thanks, > > >