Package: inet.queueing.buffer
PacketBuffer
simple moduleThis module provides packet storage for sharing and optimizing storage space between multiple packet queues. When a packet buffer becomes overloaded, the packet dropping strategy can drop any number of packets from any number of connected packet queues.
See also: IPacketQueue
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Known subclasses
Name | Type | Description |
---|---|---|
PriorityBuffer | simple module |
This buffer drops packets among the connected packet queues based on their module id. |
Extends
Name | Type | Description |
---|---|---|
PacketBufferBase | simple module |
This is a base module for various packet buffer modules which maintains a few statistics. |
Parameters
Name | Type | Default value | Description |
---|---|---|---|
displayStringTextFormat | string | "contains %p pk (%l)\nadded %a removed %r dropped %d" |
determines the text that is written on top of 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 |
dropperClass | string | "" |
determines which packets are dropped when the buffer 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 |
---|---|---|
display | i=block/buffer | |
class | PacketBuffer |
Gates
Name | Direction | Size | Description |
---|---|---|---|
in | input | ||
out | output |
Signals
Name | Type | Unit |
---|---|---|
packetRemoved | inet::Packet | |
packetDropped | inet::Packet | |
packetAdded | inet::Packet |
Statistics
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
droppedPacketsQueueOverflow | dropped packets: queue overflow | packetDropReasonIsQueueOverflow(packetDropped) | count | pk | none |
addedPackets | added packets | packetAdded | count | pk | |
removedPackets | removed packets | packetRemoved | count | pk | |
removedPacketLengths | removed packet lengths | packetLength(packetRemoved) | sum, vector | pk | none |
bufferLength | buffer length | warmup(count(packetAdded) - count(packetRemoved) - count(packetDropped)) | last, max, timeavg, vector | pk | sample-hold |
droppedPacketLengthsQueueOverflow | dropped packet lengths: queue overflow | packetLength(packetDropReasonIsQueueOverflow(packetDropped)) | sum, vector | b | none |
addedPacketLengths | added packet lengths | packetLength(packetAdded) | sum, vector | b | none |
bufferBitLength | buffer bit length | warmup(sum(packetLength(packetAdded)) - sum(packetLength(packetRemoved)) - sum(packetLength(packetDropped))) | last, max, timeavg, vector | b | sample-hold |
Direct method calls (observed)
call to | function | info |
---|---|---|
PacketQueue | inet::queueing::PacketQueue::handlePacketRemoved | handlePacketRemoved |
Called methods (observed)
function | info | call from |
---|---|---|
inet::queueing::PacketBuffer::addPacket | addPacket | PacketQueue |
inet::queueing::PacketBuffer::removePacket | removePacket | PacketQueue |
Source code
// // This module provides packet storage for sharing and optimizing storage space // between multiple packet queues. When a packet buffer becomes overloaded, the // packet dropping strategy can drop any number of packets from any number of // connected packet queues. // // @see ~IPacketQueue // simple PacketBuffer extends PacketBufferBase like IPacketBuffer { parameters: 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 buffer 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 @class(PacketBuffer); @display("i=block/buffer"); @signal[packetAdded](type=inet::Packet); @signal[packetRemoved](type=inet::Packet); @signal[packetDropped](type=inet::Packet); // the statistical value is the added packet @statistic[addedPackets](title="added packets"; source=packetAdded; record=count; unit=pk); // the statistical value is the length of the added packet @statistic[addedPacketLengths](title="added packet lengths"; source=packetLength(packetAdded); record=sum,vector; unit=b; interpolationmode=none); // the statistical value is the removed packet @statistic[removedPackets](title="removed packets"; source=packetRemoved; record=count; unit=pk); // the statistical value is the length of the removed packet @statistic[removedPacketLengths](title="removed packet lengths"; source=packetLength(packetRemoved); record=sum,vector; unit=pk; interpolationmode=none); // the statistical value is the number of packets in the buffer @statistic[bufferLength](title="buffer length"; source=warmup(count(packetAdded) - count(packetRemoved) - count(packetDropped)); record=last,max,timeavg,vector; unit=pk; interpolationmode=sample-hold); // the statistical value is the total bit length of all packets in the buffer @statistic[bufferBitLength](title="buffer bit length"; source=warmup(sum(packetLength(packetAdded)) - sum(packetLength(packetRemoved)) - sum(packetLength(packetDropped))); record=last,max,timeavg,vector; unit=b; interpolationmode=sample-hold; autoWarmupFilter=false); // the statistical value is the packet that is dropped due to queue overflow @statistic[droppedPacketsQueueOverflow](title="dropped packets: queue overflow"; source=packetDropReasonIsQueueOverflow(packetDropped); record=count; unit=pk; interpolationmode=none); // 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(packetDropped)); record=sum,vector; unit=b; interpolationmode=none); }File: src/inet/queueing/buffer/PacketBuffer.ned