[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ns] problem with record procedure



Try to delcare "global null" instead of "global null(0) null(1)...." in
your record procedure..


On Fri, 17 Aug 2001, lorenz meier wrote:

> hi all
> when i try to run the following tcl file, i allways get the error:
> 
> ns: record: can't read "null(0)": no such variable
>     while executing
> "$null($i) set bytes_"
>     (procedure "record" line 5)
>     invoked from within
> "record"
> 
> 
> what's wrong with the file?please help me
> thanks lorenz
> the file looks like:
> 
> # ======================================================================
> # Define options
> # ======================================================================
> 
> set val(chan)       Channel/WirelessChannel
> set val(prop)       Propagation/TwoRayGround
> set val(netif)      Phy/WirelessPhy
> set val(mac)        Mac/802_11
> set val(ifq)        Queue/DropTail/PriQueue
> set val(ll)         LL
> set val(ant)        Antenna/OmniAntenna
> set val(x)              200  ;# X dimension of the topography
> set val(y)              200   ;# Y dimension of the topography
> set val(ifqlen)         50            ;# max packet in ifq
> set val(seed)           0.0
> set val(adhocRouting)   DSR
> set val(nn)             5            ;# how many nodes are simulated
> set val(stop)           20        ;# simulation time
> 
> # =====================================================================
> # Main Program
> # ======================================================================
> 
> #
> # Initialize Global Variables
> #
> 
> # create simulator instance
> 
> set ns		[new Simulator]
> 
> # setup topography object
> 
> set topo	[new Topography]
> 
> # create trace object for ns and nam
> 
> set tracefd	[open 1v3tr.tr w]
> set namtrace    [open 1v3nam.nam w]
> for {set i 0} {$i < $val(nn)} {incr i} {
>     set f($i)   [open out($i).tr w]
>     }
> $ns trace-all $tracefd
> $ns namtrace-all-wireless $namtrace $val(x) $val(y)
> 
> #Define a 'finish' procedure
> proc finish {} {
>         global ns tracefd f0 f1 f2 f3 f4
>         $ns flush-trace
> 	#Close the trace file
>         close $tracefd
>         for {set i 0} {$i < $val(nn)} {incr i} {
>             close f($i)
>             }
>         exec xgraph -bb -m -y nb(pkts/bytes) -x time out(0).tr out(1).tr 
> out(2).tr out(3).tr out(4).tr -geometry 1000x500 &
> 	#Execute nam on the trace file
>         exec nam 1c1nam.nam &
>         exit 0
> }
> 
> # define topology
> $topo load_flatgrid $val(x) $val(y)
> 
> #
> # Create God
> #
> set god [create-god $val(nn)]
> 
> #
> # define how node should be created
> #
> 
> #global node setting
> 
> $ns node-config -adhocRouting $val(adhocRouting) \
>                  -llType $val(ll) \
>                  -macType $val(mac) \
>                  -ifqType $val(ifq) \
>                  -ifqLen $val(ifqlen) \
>                  -antType $val(ant) \
>                  -propType $val(prop) \
>                  -phyType $val(netif) \
>                  -channelType $val(chan) \
> 		 -topoInstance $topo \
> 		 -agentTrace ON \
>                  -routerTrace OFF \
>                  -macTrace OFF
> 
> #
> #  Create the specified number of nodes [$val(nn)] and "attach" them
> #  to the channel.
> 
> for {set i 0} {$i < $val(nn) } {incr i} {
> 	set node_($i) [$ns node]
> 	$node_($i) random-motion 0		;# disable random motion
> 
> }
> #
> # Provide initial (X,Y, for now Z=0) co-ordinates for mobilenodes
> for {set i 0} {$i < $val(nn) } {incr i} {
>     $node_($i) set X_ 100*$i
>     $node_($i) set Y_ 100*$i
>     $node_($i) set Z_ 0.0
> }
> 
> #
> 
> 
> #
> for {set i 0} {$i < $val(nn)*($val(nn)-1) } {incr i} {
>     set udp($i) [new Agent/CBR/UDP]
>     $ns attach-agent $node_([expr $i%$val(nn)]) $udp($i)
> }
> 
> for {set i 0} {$i < $val(nn) } {incr i } {
>     set null($i) [new Agent/LossMonitor]
>     $ns attach-agent $node_($i) $null($i)
> }
> 
> for {set i 0} {$i <  $val(nn) } {incr i} {
> 
>     for {set j 0} {$j < ($val(nn)-1) } {incr j} {
> 	$ns connect $udp([expr ($i+$j*($val(nn)))]) $null([expr 
> ($i+$j+1)%$val(nn)])}}
> 
> for {set i 0} {$i < $val(nn)*($val(nn)-1) } {incr i} {
>     set exp($i) [new Application/Traffic/Exponential]
>     $exp($i) set packetSize_ 500
>     $exp($i) set burst_time_ 3
>     $exp($i) set idle_time_ 1
>     $exp($i) set rate_ 1000
>     $exp($i) attach-agent $udp([expr ($i)%$val(nn)])}
> 
> 
> for {set i 0} {$i < $val(nn)*($val(nn)-1) } {incr i} {
>     $ns at 5.0 "$exp($i) start" }
> 
> 
> 
> # Define node initial position in nam
> 
> for {set i 0} {$i < $val(nn)} {incr i} {
> 
>     # 20 defines the node size in nam, must adjust it according to your 
> scenario
>     # The function must be called after mobility model is defined
> 
>     $ns initial_node_pos $node_($i) 20
> }
> 
> proc record {} {
> 	global null(0) null(1) null(2) null(3) null(4) f(0) f(1) f(2) f(3) f(4)
> 	set time 0.1
> 	for {set i 0} {$i < 5} {incr i} {
> 	    set bw($i) [$null($i) set bytes_]
> 	    }
> 	set now [$ns now]
> 	for {set i 0} {$i < 5} {incr i} {
> 	    puts $f($i) "$now [expr $bw($i)/$time*8/1000000]"
> 	    $null($i) set bytes_ 0
> 	    }
> 	$ns at [expr $now+$time] "record"
> }
> 
> 
> $ns at 0.0 "record"
> 
> #Call the finish procedure after 5 seconds of simulation time
> $ns at 20 "finish"
> 
> #
> # Tell nodes when the simulation ends
> #
> for {set i 0} {$i < $val(nn) } {incr i} {
>     $ns at $val(stop).0 "$node_($i) reset";
> }
> 
> $ns at  $val(stop).0002 "puts \"NS EXITING...\" ; $ns halt"
> 
> 
> puts "Starting Simulation..."
> $ns run
> 
> 
> 
> 
> 
> 
> _________________________________________________________________
> Downloaden Sie MSN Explorer kostenlos unter http://explorer.msn.de/intl.asp
> 
>