# # Testing FullTcpAgent's done callback # # Felix Hernandez # August 2000 # set ns [new Simulator] $ns namtrace-all [open test.nam w] # # Topology # set n1 [$ns node] set n2 [$ns node] $ns duplex-link $n1 $n2 1Mb 10ms DropTail # # Selective loss # #set em [new ErrorModule Fid] #set errmodel [new ErrorModel/Periodic] #$errmodel unit pkt # for sink closing: # n1->n2: 9th is ack sink FIN n2->n1: 8th is sink FIN # n1->n2: 10th is src FIN n2->n1: 9th is ack src FIN #$errmodel set offset_ 9.0 #$errmodel set period_ 500.0 #$em insert $errmodel #$em bind $errmodel 0 1 #$ns lossmodel $em $n2 $n1 # # Agents # set src [new Agent/TCP/FullTcp] set sink [new Agent/TCP/FullTcp] puts "src is $src" puts "sink is $sink" $ns attach-agent $n1 $src $ns attach-agent $n2 $sink $src set fid_ 0 $sink set fid_ 1 $ns color 0 Blue $ns color 1 Red # # Connection # # first connection $ns at 10.0 "puts \"\n*** First transfer ***\"" $ns at 5.0 "$ns connect $src $sink" $ns at 5.0 "$sink listen" $ns at 10.0 "$src advanceby 1" $ns at 20.0 "$sink advanceby 5" $ns at 30.0 "$sink close" # second connection $ns at 105.0 "puts \"\n*** Second transfer ***\"" $ns at 105.0 "$ns connect $src $sink" $ns at 105.0 "$sink listen" $ns at 110.0 "$src advanceby 1" $ns at 120.0 "$sink advanceby 5" $ns at 130.0 "$sink close" # -------------------------------------------------- # clean-up $sink proc done {} "puts -nonewline \"<<< sink ($sink) done \"; time" $src proc done {} "puts -nonewline \">>> src ($src) done \"; time; cleanup $src" proc cleanup { caller } { global ns src sink n1 n2 puts "--- Clean up [$ns now] by $caller" $ns detach-agent $n1 $src $ns detach-agent $n2 $sink $sink reset $src reset $ns attach-agent $n1 $src $ns attach-agent $n2 $sink } # -------------------------------------------------- proc time {} { global ns puts "[$ns now]" } $ns at 500.0 "finish" proc finish {} { global ns $ns flush-trace puts "running nam..." exec nam test.nam & exit 0 } $ns run