Hi

I am trying to simulate RED with ECN.
I am using ns2.33 on Ubuntu 9.04
I have encountered two problems so far that I would like to share.
If anybody knows a solution for them, please share.

1. (more important of the two).
    As far as I know, a RED queue should mark packets linearly when the
queue is between thresh_ and maxthresh_ in average size.
    However this was not the case in the simulations.
    I had a queue that was constantly over maxthresh_ but it was marking
half the packets.

   The problem seems to be in queue/red.cc in the function
   REDQueue::drop_early(Packet* pkt)

   Here, around the line 550 it says
   if (u<= edv_.v_prob) {
           // DROP or MARK
     .........
    }

    The problem is that edv_.v_prob constantly fluctuates between the
value 0 and the value 1 even if the queue occupancy is very very close
to maxtresh_.
    Since u is a random variable between 0 and 1 the result is that only
half of the packets that should be marked are actually marked.
    Interestingly,  once the average queue size exceeds maxthresh_ then
edv_.v_prob becomes 1.

   What I've done is to change the above code to:
   if (u<= (double)edv_.v_prob1) {
        // DROP or MARK
       .....
    }
   This does the job as I expected.

   Now, am I missing something? Is what I'm saying here incorrect?


2. RFC 3168 that describes ECN states

>>>>>
    This document specifies ECN-capable TCP implementations MUST NOT set
    either ECT codepoint (ECT(0) or ECT(1)) in the IP header for
retransmitted data packets
>>>>>
    However, in ns2 all the retransmissions seem to be marked ECN-capable.


Any help is appreciated
Thanks
Florin



Reply via email to