PacketClassifier

Package: inet.queueing.classifier

PacketClassifier

simple module

This module connects one packet producer to multiple packet consumers. It can be pushed with packets from the connected packet producer. When this happens, the classifier pushes the packet to one of its connected packet consumers based on the configured packet classifier function. The packet classifier function takes a packet and returns an integer which in turn is used for determining the output gate.

Inheritance diagram

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

Used in compound modules

Name Type Description
CompoundPendingQueue compound module (no description)
EthernetPreemptingMacLayer compound module (no description)
EthernetPreemptingPhyLayer compound module (no description)
MultiDomainGptp compound module

This module combines multiple Gptp modules, one per time domain into a multi time domain time synchronization module. Each gPTP time domain is automatically configured to use the corresponding subclock of the clock passed in to this module.

Known subclasses

Name Type Description
DynamicClassifier simple module (no description)
UserPriorityClassifier simple module

This module classifies packets based on the attached UserPriority tag.

Extends

Name Type Description
PacketClassifierBase simple module

This is a base module for various packet classifier modules. Derived modules must implement a single packet classifier function which determines the index of the output gate for the next pushed packet.

Parameters

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

determines the text that is written on top of the submodule

reverseOrder bool false
classifierClass string

determines the output queue of packets, the parameter must be the name of a C++ class which implements the IPacketClassifierFunction interface and is registered via Register_Class

Properties

Name Value Description
display i=block/classifier
class PacketClassifier

Gates

Name Direction Size Description
in input
out [ ] output

Signals

Name Type Unit
packetPushed inet::Packet

Statistics

Name Title Source Record Unit Interpolation Mode
packetLengths packet lengths packetLength(packetPushed) sum, histogram, vector b none
dataRate data rate throughput(packetPushed) vector bps linear
packets packets packetPushed count pk

Direct method calls (observed)

call tofunctioninfo
MessageDispatcherinet::MessageDispatcher::handleRegisterProtocolhandleRegisterProtocol
PcapRecorderinet::PcapRecorder::receiveSignalpacketReceivedFromLower
EthernetFragmentPhyHeaderCheckerinet::physicallayer::EthernetFragmentPhyHeaderChecker::pushPacketpushPacket
EthernetFragmentPhyHeaderInserterinet::physicallayer::EthernetFragmentPhyHeaderInserter::pushPacketEndpushPacketEnd
EthernetFragmentPhyHeaderInserterinet::physicallayer::EthernetFragmentPhyHeaderInserter::pushPacketStartpushPacketStart
EthernetPhyHeaderCheckerinet::physicallayer::EthernetPhyHeaderChecker::pushPacketpushPacket
EthernetPhyHeaderInserterinet::physicallayer::EthernetPhyHeaderInserter::pushPacketEndpushPacketEnd
EthernetPhyHeaderInserterinet::physicallayer::EthernetPhyHeaderInserter::pushPacketStartpushPacketStart
PacketEmitterinet::PacketEmitter::pushPacketpushPacket
PacketClonerinet::queueing::PacketCloner::handleCanPushPacketChangedhandleCanPushPacketChanged
DropTailQueueinet::queueing::PacketQueue::pushPacketpushPacket
PreemptingServerinet::queueing::PreemptingServer::handleCanPushPacketChangedhandleCanPushPacketChanged
TokenBasedServerinet::queueing::TokenBasedServer::handleCanPushPacketChangedhandleCanPushPacketChanged
PassivePacketSinkinet::queueing::PassivePacketSink::pushPacketpushPacket
ActivePacketSourceinet::queueing::ActivePacketSource::handleCanPushPacketChangedhandleCanPushPacketChanged
PacketBasedTokenGeneratorinet::queueing::PacketBasedTokenGenerator::pushPacketpushPacket

Called methods (observed)

functioninfocall from
inet::queueing::PacketClassifier::handleCanPushPacketChangedhandleCanPushPacketChangedEthernetFragmentPhyHeaderInserter, EthernetPhyHeaderInserter, DropTailQueue, PassivePacketSink, PacketBasedTokenGenerator
inet::queueing::PacketClassifier::pushPacketpushPacketMessageDispatcher, LayeredEthernetInterface, PacketEmitter, PacketCloner, PacketMultiplexer, PriorityQueue, TokenBasedServer, ActivePacketSource
inet::queueing::PacketClassifier::pushPacketEndpushPacketEndPreemptingServer
inet::queueing::PacketClassifier::pushPacketStartpushPacketStartPreemptingServer

Outgoing messages (observed)

gatemsgkindctrldestModuletags
out[]Packet0GptpDirectionTag, DispatchProtocolReq, EncapsulationProtocolInd, GptpIngressTimeInd, InterfaceInd, MacAddressInd, PacketProtocolTag

Pushed in messages (observed)

gatemsgkindctrlsrcModuletags
inPacket0MessageDispatcherDirectionTag, PacketProtocolTag, DispatchProtocolInd?, DispatchProtocolReq?, EncapsulationProtocolInd?, EncapsulationProtocolReq?, GptpIngressTimeInd?, InterfaceInd?, InterfaceReq?, MacAddressInd?, MacAddressReq?, MulticastReq?, NetworkProtocolInd?, TransportProtocolInd?, VlanReq?
inPacket0LayeredEthernetInterfaceDirectionTag, DispatchProtocolInd, EncapsulationProtocolReq, InterfaceReq, MacAddressReq, MulticastReq, NetworkProtocolInd, PacketProtocolTag, TransportProtocolInd, VlanReq
inPacket0PacketEmitterDirectionTag, InterfaceInd, PacketProtocolTag
inPacket0PacketClonerDirectionTag, PacketProtocolTag
inPacket0PacketMultiplexerDirectionTag, DispatchProtocolReq, InterfaceInd, PacketProtocolTag, FragmentTag?
inPacket0PreemptingServerDirectionTag, DispatchProtocolInd, EncapsulationProtocolReq, InterfaceReq, MacAddressReq, MulticastReq, NetworkProtocolInd, TransportProtocolInd, VlanReq, FragmentTag?, PacketProtocolTag?
inPacket0TokenBasedServerDscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, L4PortInd, NetworkProtocolInd, TosInd, TransportProtocolInd
inPacket0ActivePacketSourceDirectionTag, PacketProtocolTag
inPacket1TokenBasedServer

Push out messages (observed)

gatemsgkindctrldestModuletags
out[]Packet0EthernetFragmentPhyHeaderCheckerDirectionTag, InterfaceInd, PacketProtocolTag
out[]Packet0EthernetFragmentPhyHeaderInserterDirectionTag, DispatchProtocolInd, EncapsulationProtocolReq, FragmentTag, InterfaceReq, MacAddressReq, MulticastReq, NetworkProtocolInd, TransportProtocolInd, VlanReq, PacketProtocolTag?
out[]Packet0EthernetPhyHeaderCheckerDirectionTag, InterfaceInd, PacketProtocolTag
out[]Packet0EthernetPhyHeaderInserterDirectionTag, DispatchProtocolInd, EncapsulationProtocolReq, InterfaceReq, MacAddressReq, MulticastReq, NetworkProtocolInd, PacketProtocolTag, TransportProtocolInd, VlanReq
out[]Packet0PacketEmitterDirectionTag, DispatchProtocolReq, InterfaceInd, PacketProtocolTag, FragmentTag?
out[]Packet0DropTailQueueDirectionTag, DispatchProtocolInd, EncapsulationProtocolReq, InterfaceReq, MacAddressReq, MulticastReq, NetworkProtocolInd, PacketProtocolTag, TransportProtocolInd, VlanReq
out[]Packet0PassivePacketSinkDirectionTag, PacketProtocolTag
out[]Packet0PacketBasedTokenGeneratorDirectionTag?, DscpInd?, EcnInd?, HopLimitInd?, InterfaceInd?, L3AddressInd?, L4PortInd?, NetworkProtocolInd?, PacketProtocolTag?, TosInd?, TransportProtocolInd?
out[]Packet1PacketBasedTokenGenerator

Packet operations (observed)

chunkTypepacketAction
BytesChunkpeekDataAt
GptpBasepeekAtFront
EthernetPhyHeaderBasepeekAtFront

Shared Tagging operations (observed)

tagTypetagAction
FragmentTagfindTag
VlanReqfindTag

Source code

//
// This module connects one packet producer to multiple packet consumers. It
// can be pushed with packets from the connected packet producer. When this
// happens, the classifier pushes the packet to one of its connected packet
// consumers based on the configured packet classifier function. The packet
// classifier function takes a packet and returns an integer which in turn
// is used for determining the output gate.
//
simple PacketClassifier extends PacketClassifierBase like IPacketClassifier
{
    parameters:
        string classifierClass; // determines the output queue of packets, the parameter must be the name of a C++ class which implements the IPacketClassifierFunction interface and is registered via Register_Class
        @class(PacketClassifier);
}
File: src/inet/queueing/classifier/PacketClassifier.ned