EtherQosRedQueue

Package: inet.linklayer.ethernet

EtherQosRedQueue

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.

IPacketClassifier IPacketQueue RedDropper IPacketQueue IPacketScheduler

Usage diagram

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram

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

Extends

Name Type Description
CompoundPacketQueue compound module

This compound module serves as a base module for complex packet queues formed by combining several queueing components.

Parameters

Name Type Default value Description
displayStringTextFormat string "contains %p pk (%l) pushed %u created %c\n popped %o removed %r dropped %d"

determines display string text above the submodule

packetCapacity int -1

maximum number of packets in the queue, no limit by default

dataCapacity int -1b

maximum total length of packets in the queue, no limit by default

Properties

Name Value Description
display i=block/queue
class CompoundPacketQueue

Gates

Name Direction Size Description
in input
out output

Signals

Name Type Unit
packetRemoved inet::Packet
packetPushed inet::Packet
packetDropped inet::Packet
packetPopped inet::Packet

Statistics

Name Title Source Record Unit Interpolation Mode
packetRemoved packets removed localSignal(packetRemoved) count, sum(packetBytes), vector(packetBytes) none
queueLength queue length count(localSignal(packetPushed)) - count(localSignal(packetPopped)) - count(localSignal(packetRemoved)) - count(packetDropped) max, timeavg, vector sample-hold
queueingTime queueing times queueingTime(packetPopped) histogram, vector s none
packetPushed packets pushed localSignal(packetPushed) count, sum(packetBytes), vector(packetBytes) none
packetDropQueueOverflow packets dropped: queue overflow packetDropReasonIsQueueOverflow(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetPopped packets popped localSignal(packetPopped) count, sum(packetBytes), vector(packetBytes) none

Unassigned submodule parameters

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

determines the text that is written on top of the submodule

redFilter.collectionModule string ""
redFilter.wq double 0.002

weight of the current queue length in the averaged queue length

redFilter.minth double 5

minimum threshold for avg queue length

redFilter.maxth double 50

maximum threshold for avg queue length (=buffer capacity)

redFilter.maxp double 0.02

maximum value for pbs

redFilter.pkrate double 150

average packet rate for calculations when queue is empty

redFilter.useEcn bool false

if enabled, packets are marked with ECN if applicable

redFilter.packetCapacity int int(maxth)

packets are dropped if queue length is greater

Source code

//
// 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.
//
module EtherQosRedQueue extends CompoundPacketQueue like IPacketQueue
{
    parameters:
        @display("i=block/queue");
    submodules:
        classifier: <default("EtherFrameClassifier")> like IPacketClassifier {
            parameters:
                @display("p=100,200");
        }
        pauseQueue: <default("DropTailQueue")> like IPacketQueue {
            parameters:
                @display("p=250,100");
        }
        redFilter: RedDropper {
            @display("p=190,300");
        }
        dataQueue: <default("DropTailQueue")> like IPacketQueue {
            parameters:
                @display("p=310,300;q=l2queue");
        }
        scheduler: <default("PriorityScheduler")> like IPacketScheduler {
            parameters:
                @display("p=400,200");
        }
    connections:
        in --> classifier.in;
        classifier.out++ --> pauseQueue.in;
        classifier.out++ --> redFilter.in;
        pauseQueue.out --> scheduler.in++;
        dataQueue.out --> scheduler.in++;
        scheduler.out --> out;
        redFilter.out --> dataQueue.in;
}

File: src/inet/linklayer/ethernet/EtherQosQueue.ned