RedDropper

Package: inet.queueing.filter

RedDropper

simple module

C++ definition

Implements Random Early Detection (RED).

It has n input and n output gates (specified by the numGates parameter). Packets arrived at the ith input gate are forwarded to the ith output gate, or dropped.

The module sums the used buffer space of the queues attached to the output gates. If it is below a minimum threshold, the packet won't be dropped, if above a maximum threshold, it will be dropped, if it is between the minimum and maximum threshold, it will be dropped by a given probability. This probability is determined by a linear function which is 0 at the minth and maxp at maxth.

The queue length can be smoothed by specifying the 'wq' parameter. The average queue length used in the tests is computed by the formula:

avg = (1-wq)*avg + wq*qlen

The minth, maxth, and maxp parameters can be specified separately for each input gate, so this module can be used to implement different packet drop priorities.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Used in compound modules

Name Type Description
AFxyQueue compound module

This is an example queue that implements one class of the Assured Forwarding PHB group (RFC 2597).

DSQueue2 compound module

Diffserv Queue used in Experiment 2.1 - 2.4.

EthernetQosRedQueue compound module

Queue module that gives the PAUSE frames a higher priority, and using Random Early Detection algorithm on data frames, and can be parametrized with an ~IPacketQueue for serving the data frames.

RedDropperQueue compound module

Combines a packet queue with random early detection (RED) dropper.

REDQueue compound module (no description)

Used in

Name Type Description
RedDropperTutorialStep network (no description)

Extends

Name Type Description
PacketFilterBase simple module

Base module for various packet filter modules. Derived modules must implement a single packet matcher function which determines if a packet is to be passed through or filtered out.

Parameters

Name Type Default value Description
displayStringTextFormat string "dropped %d/%p pk (%k/%l)"

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

backpressure bool false
collectionModule string ""
wq double 0.002

Weight of the current queue length in the averaged queue length, in range [0.0, 1.0]

minth double 5

Minimum threshold for average queue length

maxth double 50

Maximum threshold for average queue length (=buffer capacity), in range (minth,packetCapacity]

maxp double 0.02

Maximum value for pbs, in range [0.0, 1.0]

pkrate double 150

Average packet rate for calculations when queue is empty

useEcn bool false

If enabled, packets are marked with ECN if applicable

packetCapacity int int(maxth)

Packets are dropped if queue length is greater

Properties

Name Value Description
class RedDropper
display i=block/downarrow

Gates

Name Direction Size Description
in input
out output

Signals

Name Type Unit Description
packetDropped inet::Packet

Statistics

Name Title Source Record Unit Interpolation Mode Description
packetDropCongestion packet drop: congestion packetDropReasonIsCongestion(packetDropped) count, sum(packetBytes), vector(packetBytes) none

Source code

//
// Implements Random Early Detection (RED).
//
// It has n input and n output gates (specified by the `numGates`
// parameter). Packets arrived at the ith input gate are
// forwarded to the ith output gate, or dropped.
//
// The module sums the used buffer space of the queues attached
// to the output gates. If it is below a minimum threshold,
// the packet won't be dropped, if above a maximum threshold,
// it will be dropped, if it is between the minimum and
// maximum threshold, it will be dropped by a given probability.
// This probability is determined by a linear function which is
// 0 at the minth and maxp at maxth.
//
// The queue length can be smoothed by specifying the 'wq'
// parameter. The average queue length used in the tests
// is computed by the formula:
//
//  avg = (1-wq)*avg + wq*qlen
//
// The minth, maxth, and maxp parameters can be specified
// separately for each input gate, so this module can be
// used to implement different packet drop priorities.
//
simple RedDropper extends PacketFilterBase
{
    parameters:
        string collectionModule = default("");
        double wq = default(0.002);  // Weight of the current queue length in the averaged queue length, in range [0.0, 1.0]
        double minth = default(5);  // Minimum threshold for average queue length
        double maxth = default(50);  // Maximum threshold for average queue length (=buffer capacity), in range (minth,packetCapacity]
        double maxp = default(0.02);  // Maximum value for pbs, in range [0.0, 1.0]
        double pkrate = default(150);  // Average packet rate for calculations when queue is empty
        bool useEcn = default(false); // If enabled, packets are marked with ECN if applicable
        int packetCapacity = default(int(maxth)); // Packets are dropped if queue length is greater
        @class(RedDropper);
        @display("i=block/downarrow");
        @signal[packetDropped](type=inet::Packet);
        @statistic[packetDropCongestion](title="packet drop: congestion"; source=packetDropReasonIsCongestion(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
}

File: src/inet/queueing/filter/RedDropper.ned