CompoundPacketQueueBase

Package: inet.queueing.queue

compound module CompoundPacketQueueBase

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

CompoundPacketQueueBase

Inheritance diagram

Known subclasses

Name

Type

Description

EthernetQosQueue

compound module

Queue module that gives the PAUSE frames a higher priority, and can be parametrized with an IPacketQueue for serving the data frames.

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.

CompoundPendingQueue

compound module

Implements a prioritized queue system for IEEE 802.11 MAC frames. Uses a classifier to separate incoming packets into three queues: management frames (highest priority), multicast frames (medium priority), and unicast frames (lowest priority). A priority scheduler then selects packets from these queues in order of priority.

Ieee8021qTimeAwareShaper

compound module

Implements the IEEE 802.1Q time aware shaper.

DiffservQueue

compound module

This is an example queue that can be used in interfaces of DS core and edge nodes to support the AFxy (RFC 2597) and EF (RFC 3246) PHBs.

GatingPriorityQueue

compound module

Implements a priority queue with multiple inner queues each having its own periodic gate for packet selection and an optional shared memory buffer.

GatingQueue

compound module

Implements a queue having its own periodic gate.

PriorityQueue

compound module

Implements a priority queue with multiple inner queues and an optional shared memory buffer.

RedDropperQueue

compound module

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

PriorityShaper

compound module

Combines a classifier, a scheduler, and several traffic shapers into a single packet shaper. Packets are classified into one of the traffic shapers, and the scheduler prioritizes among them.

Extends

Name

Type

Description

PacketQueueBase

simple module

Base module for various packet queue modules which maintains a few statistics.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“contains %p pk (%l) pushed %u created %c\n pulled %o removed %r dropped %d”

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

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

dropperClass

string

“”

Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class

Properties

Name

Value

Description

class

CompoundPacketQueueBase

defaultStatistic

queueLength:vector

display

i=block/queue

Gates

Name

Direction

Size

Description

in

input

out

output

Signals

Name

Type

Unit

Description

packetDropped

inet::Packet

packetPulled

inet::Packet

packetPushEnded

inet::Packet?

packetPushStarted

inet::Packet

packetRemoved

inet::Packet

Statistics

Name

Title

Source

Record

Unit

Interpolation Mode

Description

droppedPacketLengthsQueueOverflow

dropped packet lengths: queue overflow

packetLength(packetDropReasonIsQueueOverflow(warmup(localSignal(packetDropped))))

sum,vector

b

none

the statistical value is the length of the packet that is dropped due to queue overflow

droppedPacketsQueueOverflow

dropped packets: queue overflow

packetDropReasonIsQueueOverflow(warmup(localSignal(packetDropped)))

count

pk

none

the statistical value is the packet that is dropped due to queue overflow

flowIncomingDataRate

flow specific incoming data rate

throughput(flowPacketLength(demuxFlow(warmup(localSignal(packetPushStarted)))))

vector

bps

linear

the statistical value is the flow specific data rate of the incoming packets

flowOutgoingDataRate

flow specific outgoing data rate

throughput(flowPacketLength(demuxFlow(warmup(localSignal(packetPulled)))))

vector

bps

linear

the statistical value is the flow specific data rate of the outgoing packets

flowQueueingTime

flow queueing times

queueingTime(demuxFlow(warmup(localSignal(packetPulled))))

histogram,vector

s

none

the statistical value is the flow specific queueing time of packets

incomingDataRate

incoming datarate

throughput(warmup(localSignal(packetPushStarted)))

vector

bps

linear

the statistical value is the data rate of the incoming packets

incomingPacketLengths

incoming packet lengths

packetLength(warmup(localSignal(packetPushStarted)))

sum,histogram,vector

b

none

the statistical value is the length of the incoming packet

incomingPackets

incoming packets

warmup(localSignal(packetPushStarted))

count

pk

the statistical value is the incoming packet

outgoingDataRate

outgoing datarate

throughput(warmup(localSignal(packetPulled)))

vector

bps

linear

the statistical value is the data rate of the outgoing packets

outgoingPacketLengths

outgoing packet lengths

packetLength(warmup(localSignal(packetPulled)))

sum,histogram,vector

b

none

the statistical value is the length of the outgoing packet

outgoingPackets

outgoing packets

warmup(localSignal(packetPulled))

count

pk

the statistical value is the outgoing packet

queueBitLength

queue bit length

warmup(atomic(constant0(localSignal(packetPushEnded)) + sum(packetLength(localSignal(packetPushStarted))) - sum(packetLength(localSignal(packetPulled))) - sum(packetLength(localSignal(packetRemoved))) - sum(packetLength(localSignal(packetDropped)))))

last,max,timeavg,vector

b

sample-hold

the statistical value is the total bit length of all packets in the queue

queueingTime

queueing times

queueingTime(warmup(localSignal(packetPulled)))

histogram,vector

s

none

the statistical value is the queueing time of packets

queueLength

queue length

warmup(atomic(constant0(localSignal(packetPushEnded)) + count(localSignal(packetPushStarted)) - count(localSignal(packetPulled)) - count(localSignal(packetRemoved)) - count(localSignal(packetDropped))))

last,max,timeavg,vector

pk

sample-hold

the statistical value is the number of packets in the queue

Source code

//
// This compound module serves as a base module for complex packet queues formed
// by combining several queueing components.
//
module CompoundPacketQueueBase extends PacketQueueBase like IPacketQueue
{
    parameters:
        @class(CompoundPacketQueueBase);
        int packetCapacity = default(-1); // Maximum number of packets in the queue, no limit by default
        int dataCapacity @unit(b) = default(-1b); // Maximum total length of packets in the queue, no limit by default
        string dropperClass = default(""); // Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class
        displayStringTextFormat = default("contains %p pk (%l) pushed %u created %c\n pulled %o removed %r dropped %d");
        @class(CompoundPacketQueueBase);
        @defaultStatistic(queueLength);
        @signal[packetPushStarted](type=inet::Packet);
        @signal[packetPushEnded](type=inet::Packet?);
        @signal[packetPulled](type=inet::Packet);
        @signal[packetRemoved](type=inet::Packet);
        @signal[packetDropped](type=inet::Packet);
        // the statistical value is the number of packets in the queue
        @statistic[queueLength](title="queue length"; source=warmup(atomic(constant0(localSignal(packetPushEnded)) + count(localSignal(packetPushStarted)) - count(localSignal(packetPulled)) - count(localSignal(packetRemoved)) - count(localSignal(packetDropped)))); record=last,max,timeavg,vector; interpolationmode=sample-hold; unit=pk; autoWarmupFilter=false);
        // the statistical value is the total bit length of all packets in the queue
        @statistic[queueBitLength](title="queue bit length"; source=warmup(atomic(constant0(localSignal(packetPushEnded)) + sum(packetLength(localSignal(packetPushStarted))) - sum(packetLength(localSignal(packetPulled))) - sum(packetLength(localSignal(packetRemoved))) - sum(packetLength(localSignal(packetDropped))))); record=last,max,timeavg,vector; unit=b; interpolationmode=sample-hold; autoWarmupFilter=false);
        // the statistical value is the queueing time of packets
        @statistic[queueingTime](title="queueing times"; source=queueingTime(warmup(localSignal(packetPulled))); record=histogram,vector; unit=s; interpolationmode=none; autoWarmupFilter=false);
        // the statistical value is the incoming packet
        @statistic[incomingPackets](title="incoming packets"; source=warmup(localSignal(packetPushStarted)); record=count; unit=pk; autoWarmupFilter=false);
        // the statistical value is the length of the incoming packet
        @statistic[incomingPacketLengths](title="incoming packet lengths"; source=packetLength(warmup(localSignal(packetPushStarted))); record=sum,histogram,vector; unit=b; interpolationmode=none; autoWarmupFilter=false);
        // the statistical value is the data rate of the incoming packets
        @statistic[incomingDataRate](title="incoming datarate"; source=throughput(warmup(localSignal(packetPushStarted))); record=vector; unit=bps; interpolationmode=linear; autoWarmupFilter=false);
        // the statistical value is the outgoing packet
        @statistic[outgoingPackets](title="outgoing packets"; source=warmup(localSignal(packetPulled)); record=count; unit=pk; autoWarmupFilter=false);
        // the statistical value is the length of the outgoing packet
        @statistic[outgoingPacketLengths](title="outgoing packet lengths"; source=packetLength(warmup(localSignal(packetPulled))); record=sum,histogram,vector; unit=b; interpolationmode=none; autoWarmupFilter=false);
        // the statistical value is the data rate of the outgoing packets
        @statistic[outgoingDataRate](title="outgoing datarate"; source=throughput(warmup(localSignal(packetPulled))); record=vector; unit=bps; interpolationmode=linear; autoWarmupFilter=false);
        // the statistical value is the packet that is dropped due to queue overflow
        @statistic[droppedPacketsQueueOverflow](title="dropped packets: queue overflow"; source=packetDropReasonIsQueueOverflow(warmup(localSignal(packetDropped))); record=count; unit=pk; interpolationmode=none; autoWarmupFilter=false);
        // the statistical value is the length of the packet that is dropped due to queue overflow
        @statistic[droppedPacketLengthsQueueOverflow](title="dropped packet lengths: queue overflow"; source=packetLength(packetDropReasonIsQueueOverflow(warmup(localSignal(packetDropped)))); record=sum,vector; unit=b; interpolationmode=none; autoWarmupFilter=false);
        // the statistical value is the flow specific queueing time of packets
        @statistic[flowQueueingTime](title="flow queueing times"; source=queueingTime(demuxFlow(warmup(localSignal(packetPulled)))); record=histogram,vector; unit=s; interpolationmode=none; autoWarmupFilter=false);
        // the statistical value is the flow specific data rate of the incoming packets
        @statistic[flowIncomingDataRate](title="flow specific incoming data rate"; source=throughput(flowPacketLength(demuxFlow(warmup(localSignal(packetPushStarted))))); record=vector; unit=bps; interpolationmode=linear; autoWarmupFilter=false);
        // the statistical value is the flow specific data rate of the outgoing packets
        @statistic[flowOutgoingDataRate](title="flow specific outgoing data rate"; source=throughput(flowPacketLength(demuxFlow(warmup(localSignal(packetPulled))))); record=vector; unit=bps; interpolationmode=linear; autoWarmupFilter=false);
        @defaultStatistic(queueLength:vector);
}

File: src/inet/queueing/queue/CompoundPacketQueueBase.ned