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.
Inheritance diagram¶
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
compound module |
Queue module that gives the PAUSE frames a higher priority, and can be parametrized with an IPacketQueue for serving the data frames. |
|
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. |
|
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. |
|
compound module |
Implements the IEEE 802.1Q time aware shaper. |
|
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. |
|
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. |
|
compound module |
Implements a queue having its own periodic gate. |
|
compound module |
Implements a priority queue with multiple inner queues and an optional shared memory buffer. |
|
compound module |
Combines a packet queue with random early detection (RED) dropper. |
|
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 |
|---|---|---|
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 |
|||
packetPulled |
|||
packetPushEnded |
inet::Packet? |
||
packetPushStarted |
|||
packetRemoved |
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);
}