I was able to solve this problem. I would like to thank both Pedro and
Alam for their response. The solution provided by Pedro: that is to
apply the error to just one link does work. However, my intention was to
simulate a network where every link has a certain error rate. The
solution provided by Alam: that is to use a separate errorModel object
for each link works exactly as I intended.
The mistake on my part was that after attaching the errorModel object to
one link, I was trying to attach the same object to a second link.
However, the response of ns was very confusing.
Thanks,
Abdul.
Abdul Jabbar wrote:
> Hello,
>
> I am having unusual trouble getting a simple error model to work over
> wired links in ns2.29. I have checked the mailing list archives and
> could not find a similar problem/solution. Below is my tcl script
> which represents a simple network topology of 3 nodes connected in a
> chain using duplex-links. I have a CBR/UDP flow between the nodes 0
> and 3. The flow path is 0-1-2-3.
>
> If I don't use any error on the links, everything works fine as is
> confirmed by the trace file and the nam visualization.
>
> However, if I include a simple error model and attach it to each of
> the three links, the whole simulation goes awry. In the trace file I
> see packets going from node 0 to node 1. There is no data flow between
> node 2 and node 3 and there is a data flow between nodes 2 and 3.
> Basically the packets disappear on node 1 and magically reappear at
> node 2. In nam visualization, it is even worse...there is just one
> flow between nodes 0 and 1....thats it.....no other data flows.
> Changing the error rate does not help.
>
> When I have a more complex topology ( like a mesh topology of 8x8
> nodes) the whole simulation goes so bizarre, that it is even hard to
> trace what is going wrong. That's why I am using this simple 3 node
> topology to illustrate the problem.
>
> I am hoping that there is some fundamental mistake on my part. Please
> point in the right direction.
>
> Thanks,
> Abdul.
>
> Here's the TCL script
> ----------------------------------
> set ns [new Simulator]
> set tf [open simout.tr w]
> $ns trace-all $tf
> set nf [open simout.nam w]
> $ns namtrace-all $nf
> proc finish {} {
> global ns nf tf
> $ns flush-trace
> close $nf
> close $tf
> exec nam simout.nam &
> exit 0
> }
>
> for {set i 0} {$i < 4} {incr i} {
> set n($i) [$ns node]
> }
>
> $ns duplex-link $n(0) $n(1) 500Mb 10ms DropTail
> $ns duplex-link $n(1) $n(2) 500Mb 10ms DropTail
> $ns duplex-link $n(2) $n(3) 500Mb 10ms DropTail
>
> set em [new ErrorModel]
> $em unit pkt
> $em set rate_ 0.01
> $em ranvar [new RandomVariable/Uniform]
> $em drop-target [new Agent/Null]
>
> $ns link-lossmodel $em $n(0) $n(1)
> $ns link-lossmodel $em $n(1) $n(2)
> $ns link-lossmodel $em $n(2) $n(3)
>
> set udp0 [new Agent/UDP]
> $ns attach-agent $n(0) $udp0
> set cbr0 [new Application/Traffic/CBR]
> $cbr0 set packetSize_ 1000
> $cbr0 set interval_ 0.005
> $cbr0 attach-agent $udp0
>
> set null0 [new Agent/Null]
> $ns attach-agent $n(3) $null0
> $ns connect $udp0 $null0
>
> $ns at 0.5 "$cbr0 start"
> $ns at 4.5 "$cbr0 stop"
> $ns at 5.0 "finish"
>
> $ns run
>