PacketFlowBase

Package: inet.queueing.base

PacketFlowBase

simple module

This is a base module for various packet flow modules. A packet flow module passes or streams all pushed or pulled packets after processing them from its input to its output.

See also: IPacketFlow

Inheritance diagram

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

Known subclasses

Name Type Description
BackPressureBarrier simple module

This module prevents backpressure propagation from its output to its input and vice verse. It always allows pushing and pulling packets independently of what the connected modules would allow to do in their current state. Both pushed and pulled packets pass through unchanged, but the operations may raise a runtime error due to this module preventing backpressure propagation.

CrcInserterBase simple module (no description)
EthernetAddressInserter simple module (no description)
EthernetFcsInserter simple module (no description)
EthernetFragmentFcsInserter simple module (no description)
EthernetFragmentPhyHeaderInserter simple module (no description)
EthernetMacHeaderInserter simple module (no description)
EthernetPhyHeaderInserter simple module (no description)
EthernetSocketCommandProcessor simple module (no description)
EthernetTypeOrLengthInserter simple module (no description)
FcsInserterBase simple module (no description)
FlowMeasurementRecorder simple module

This module is part of the flow measurement infrastructure. It can be used to record the collected statistics and also to terminate the flow measurements.

FlowMeasurementStarter simple module (no description)
FragmentNumberHeaderInserter simple module (no description)
Ieee8021aeTagEpdHeaderInserter simple module

TODO this module is incomplete

Ieee8021qSocketCommandProcessor simple module (no description)
Ieee8021qTagEpdHeaderInserter simple module (no description)
Ieee8021qTagTpidHeaderInserter simple module (no description)
Ieee8021rTagEpdHeaderInserter simple module (no description)
Ieee8022LlcInserter simple module (no description)
Ieee8022LlcSocketCommandProcessor simple module (no description)
Ieee8022LlcSocketPacketProcessor simple module (no description)
Ieee8022SnapInserter simple module (no description)
PacketDeserializer simple module (no description)
PacketDirectionReverser simple module

This module is part of the layer 2 architecture. It turns an incoming packet into an outgoing packet simply by removing all attached indication tags and turning some of them into an attached request tag on the packet.

PacketEmitter simple module (no description)
PacketGateBase simple module

This is a base module for various packet gate modules.

PacketMarkerBase simple module

This is a base module for various packet marker modules. Derived modules must implement a single markPacket() function which marks the individual packets by attaching tags.

PacketMeterBase simple module

This is a base module for various packet meter modules. Derived modules must implement a single meterPacket() function which meters the flow of and attaches the required tags.

PacketSerializer simple module

This module serializes packets flowing from its input to its output.

PaddingInserter simple module (no description)
RelayInterfaceLearner simple module

This module extracts the source MAC address of the packet passing through and stores the mapping from this MAC address to the incoming network interface in the MAC address table (forwarding information database).

SequenceNumbering simple module (no description)
StreamDecoder simple module

This module decodes the stream of a packet by matching various tags on the packet against the mapping. It can check for network interface, source address, destination address, VLAN id, and PCP. If a match was found then the stream is attached to the packet in a StreamInd tag.

StreamEncoder simple module

This module encodes the stream name of a packet into several request tags attached to the packet. It looks up the stream in the mapping and attaches the necessary request tags to the packet based on the specified parameters.

StreamIdentifier simple module

This module identifies the stream of a packet using packet filter expressions. It can check for arbitrary packet data and assign and if a match was found then the stream is attached to the packet in a StreamReq tag.

VlanReqMapper simple module

This module updates the VlanReq tag on packets.

Extends

Name Type Description
PacketProcessorBase simple module

This is a base module for various packet processing modules which maintains a few statistics.

Parameters

Name Type Default value Description
displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

Properties

Name Value Description
display i=block/rightarrow
class PacketFlowBase

Gates

Name Direction Size Description
in input
out output

Signals

Name Type Unit
packetPushedIn inet::Packet
packetPulledIn inet::Packet
packetPushedOut inet::Packet
packetPulledOut inet::Packet

Statistics

Name Title Source Record Unit Interpolation Mode
flowIncomingDataRate flow specific incoming data rate throughput(demuxFlow(merge(packetPushedIn, packetPulledIn))) vector bps linear
outgoingDataRate outgoing data rate throughput(merge(packetPushedOut, packetPulledOut)) vector bps linear
incomingDataRate incoming data rate throughput(merge(packetPushedIn, packetPulledIn)) vector bps linear
outgoingPacketLengths outgoing packet lengths packetLength(merge(packetPushedOut, packetPulledOut)) sum, histogram, vector b none
flowIncomingPacketLengths flow specific incoming packet lengths packetLength(demuxFlow(merge(packetPushedIn, packetPulledIn))) sum, histogram, vector b none
flowOutgoingDataRate flow specific outgoing data rate throughput(demuxFlow(merge(packetPushedOut, packetPulledOut))) vector bps linear
incomingPacketLengths incoming packet lengths packetLength(merge(packetPushedIn, packetPulledIn)) sum, histogram, vector b none
flowOutgoingPacketLengths flow specific outgoing packet lengths packetLength(demuxFlow(merge(packetPushedOut, packetPulledOut))) sum, histogram, vector b none
incomingPackets incoming packets merge(packetPushedIn, packetPulledIn) count pk
outgoingPackets outgoing packets merge(packetPushedOut, packetPulledOut) count pk

Source code

//
// This is a base module for various packet flow modules. A packet flow module
// passes or streams all pushed or pulled packets after processing them from
// its input to its output.
//
// @see ~IPacketFlow
//
simple PacketFlowBase extends PacketProcessorBase
{
    parameters:
        @class(PacketFlowBase);
        @display("i=block/rightarrow");
        @signal[packetPushedIn](type=inet::Packet);
        @signal[packetPushedOut](type=inet::Packet);
        @signal[packetPulledIn](type=inet::Packet);
        @signal[packetPulledOut](type=inet::Packet);
        // the statistical value is the incoming packet
        @statistic[incomingPackets](title="incoming packets"; source=merge(packetPushedIn, packetPulledIn); record=count; unit=pk);
        // the statistical value is the length of the incoming packet
        @statistic[incomingPacketLengths](title="incoming packet lengths"; source=packetLength(merge(packetPushedIn, packetPulledIn)); record=sum,histogram,vector; unit=b; interpolationmode=none);
        // the statistical value is the data rate of the incoming packets
        @statistic[incomingDataRate](title="incoming data rate"; source=throughput(merge(packetPushedIn, packetPulledIn)); record=vector; unit=bps; interpolationmode=linear);
        // the statistical value is the outgoing packet
        @statistic[outgoingPackets](title="outgoing packets"; source=merge(packetPushedOut, packetPulledOut); record=count; unit=pk);
        // the statistical value is the length of the outgoing packet
        @statistic[outgoingPacketLengths](title="outgoing packet lengths"; source=packetLength(merge(packetPushedOut, packetPulledOut)); record=sum,histogram,vector; unit=b; interpolationmode=none);
        // the statistical value is the data rate of the outgoing packets
        @statistic[outgoingDataRate](title="outgoing data rate"; source=throughput(merge(packetPushedOut, packetPulledOut)); record=vector; unit=bps; interpolationmode=linear);
        // the statistical value is the flow specific length of the incoming packet
        @statistic[flowIncomingPacketLengths](title="flow specific incoming packet lengths"; source=packetLength(demuxFlow(merge(packetPushedIn, packetPulledIn))); record=sum,histogram,vector; unit=b; interpolationmode=none);
        // the statistical value is the flow specific data rate of the incoming packets
        @statistic[flowIncomingDataRate](title="flow specific incoming data rate"; source=throughput(demuxFlow(merge(packetPushedIn, packetPulledIn))); record=vector; unit=bps; interpolationmode=linear);
        // the statistical value is the flow specific length of the outgoing packet
        @statistic[flowOutgoingPacketLengths](title="flow specific outgoing packet lengths"; source=packetLength(demuxFlow(merge(packetPushedOut, packetPulledOut))); record=sum,histogram,vector; unit=b; interpolationmode=none);
        // the statistical value is the flow specific data rate of the outgoing packets
        @statistic[flowOutgoingDataRate](title="flow specific outgoing data rate"; source=throughput(demuxFlow(merge(packetPushedOut, packetPulledOut))); record=vector; unit=bps; interpolationmode=linear);
    gates:
        input in @labels(send,push,pull,pass,stream);
        output out @labels(send,push,pull,pass,stream);
}
File: src/inet/queueing/base/PacketFlowBase.ned