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 >