Since its an old version of tcl/ns2, and since I’m using modern guides to guide me through this. I’m trying to implement a circular wireless network topology of 10 nodes. In these nodes 2 will be sender nodes and 2 will be receiver nodes and the remaining 6 nodes will be the relay nodes. I’m using TCP as transport layer protocol for 1 sender-receiver pair and UDP for the other sender-receiver pair.
set ns [new Simulator]
#the nam trace file
set nf [open out.nam w]
$ns namtrace-all $nf
#finish procedure
proc finish {} {
global ns nf
$ns flush-trace
#close the trace file
close $nf
#executenam on the trace file
exec nam out.nam &
exit 0
}
array set nodes {}
for {set i 0} {$i < 10} {incr i} {
set nodes($i) [$ns node]
}
proc selectSenderReceiver {} {
global nodes
set sender [expr int(rand()*10)] ;# choose a random sender node index (0-9)
set receiver [expr int(rand()*10)] ;# choose a random receiver node index (0-9)
# ensure sender and receiver are different and not relay nodes
while {$sender == $receiver || $sender > 7 || $receiver > 7} {
set sender [expr int(rand()*10)]
set receiver [expr int(rand()*10)]
}
return [list $nodes($sender) $nodes($receiver)]
}
set pair1 [selectSenderReceiver]
set pair2 [selectSenderReceiver]
set sender1 [lindex $pair1 0]
set receiver1 [lindex $pair1 1]
set sender2 [lindex $pair2 0]
set receiver2 [lindex $pair2 1]
# create links between the nodes
$ns duplex-link $nodes(0) $nodes(1) 1Mb 10ms DropTail
$ns duplex-link $nodes(1) $nodes(2) 1Mb 10ms DropTail
$ns duplex-link $nodes(2) $nodes(3) 1Mb 10ms DropTail
$ns duplex-link $nodes(3) $nodes(4) 1Mb 10ms DropTail
$ns duplex-link $nodes(4) $nodes(5) 1Mb 10ms DropTail
$ns duplex-link $nodes(5) $nodes(6) 1Mb 10ms DropTail
$ns duplex-link $nodes(6) $nodes(7) 1Mb 10ms DropTail
$ns duplex-link $nodes(7) $nodes(8) 1Mb 10ms DropTail
$ns duplex-link $nodes(8) $nodes(9) 1Mb 10ms DropTail
$ns duplex-link $nodes(9) $nodes(0) 1Mb 10ms DropTail
# set orientation for visualization
$ns duplex-link-op $nodes(0) $nodes(1) orient right
$ns duplex-link-op $nodes(1) $nodes(2) orient right
$ns duplex-link-op $nodes(2) $nodes(3) orient down
$ns duplex-link-op $nodes(3) $nodes(4) orient down
$ns duplex-link-op $nodes(4) $nodes(5) orient left
$ns duplex-link-op $nodes(5) $nodes(6) orient left
$ns duplex-link-op $nodes(6) $nodes(7) orient up
$ns duplex-link-op $nodes(7) $nodes(8) orient up
$ns duplex-link-op $nodes(8) $nodes(9) orient right
$ns duplex-link-op $nodes(9) $nodes(0) orient right
set tcp [new Agent/TCP]
$ns attach-agent $sender1 $tcp
set sink1 [new Agent/TCPSink]
$ns attach-agent $receiver1 $sink1
$ns connect $tcp $sink1
$ns at 0.1 "$tcp set dataSize_ 1000" ;# set packet size for TCP
set udp [new Agent/UDP]
$ns attach-agent $sender2 $udp
set sink2 [new Agent/Null]
$ns attach-agent $receiver2 $sink2
$ns connect $udp $sink2
$ns at 0.1 "$udp set packetSize_ 1000" ;# set packet size for UDP
# schedule events
$ns at 1.0 "$tcp start"
$ns at 1.5 "$udp send -1"
# call finish procedure at end of simulation
$ns at 2.0 "finish"
# run
$ns run
When I try to start TCP I get the following error:
ns: _o240 start:
(_o240 cmd line 1)
invoked from within
"_o240 cmd start"
invoked from within
"catch "$self cmd $args" ret"
invoked from within
"if [catch "$self cmd $args" ret] {
set cls [$self info class]
global errorInfo
set savedInfo $errorInfo
error "error when calling class $cls: $args" $..."
(procedure "_o240" line 2)
(SplitObject unknown line 2)
invoked from within
"_o240 start"
The error seems pretty ambiguous especially for someone who is super new to NS2.