Simple Module REDQueue

File: Network/Queue/REDQueue.ned

C++ definition: click here

RED (Random Early Detection) queue, to be used in routers' network interfaces. Conforms to the OutputQueue interface.

Implements the original RED algorithm from "Random Early Detection Gateways for Congestion Avoidance" by Sally Floyd and Van Jacobson, 1993.

The code is based on the algorithm described on p10 of the paper:

Initialization:
   avg <- 0
   count <- -1
for each packet arrival
   calculate the new average queue size avg:
       if the queue is nonempty
           avg <- (1-wq)*avg + wq*q
       else
           m <- f(time-q_time)
           avg <- (1-wq)^m * avg
   if minth <= avg < maxth
       increment count
       calculate probability pa:
           pb <- maxp*(avg-minth) / (maxth-minth)
           pa <- pb / (1-count*pb)
       with probability pa:
           mark the arriving packet
           count <- 0
   else if maxth <= avg
       mark the arriving packet
       count <- 0
   else count <- -1
when queue becomes empty
   q_time <- time

Saved Variables:
   - avg: average queue size
   - q_time: start of the queue idle time
   - count: packets since last marked packet

Fixed parameters:
   - wq: queue weight
   - minth: minimum threshold for queue
   - maxth: maximum threshold for queue
   - maxp: maximum value for pb

Other:
   - pa: current packet-marking probability
   - q: current queue size
   - time: current time
   - f(t): a linear function of the time t

The function f() is supposed to estimate the number of packets that could have arrived during the idle interval. We use f(t) = pkrate * t, where pkrate = 1/s, s being the typical transmission time for a small packet as mentioned in Section 11 of the paper.

Example parameter values: wq = 0.002, minth = 5 packets, maxth = 15 packets, maxp = 1/50 = 0.02 and pkrate = 12000 (~1K packets on 100Mbps link).

Usage diagram:

The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.

REDQueue

Parameters:

Name Type Description
wq numeric const

queue weight

minth numeric const

minimum threshold for avg queue length

maxth numeric const

maximum threshold for avg queue length (=buffer capacity)

maxp numeric const

maximum value for pb

pkrate numeric const

arrivals per sec (see comment above)

Gates:

Name Direction Description
in input
out output

Source code:

simple REDQueue
    parameters:
        wq: numeric const,    // queue weight
        minth: numeric const, // minimum threshold for avg queue length
        maxth: numeric const, // maximum threshold for avg queue length (=buffer capacity)
        maxp: numeric const,  // maximum value for pb
        pkrate: numeric const;  // arrivals per sec (see comment above)
    gates:
        in: in;
        out: out;
endsimple