EthernetPreemptingMacLayer

Package: inet.linklayer.ethernet.modular

compound module EthernetPreemptingMacLayer

(no description)

EthernetPreemptingMacLayerupperLayerIn --> queue.inqueue.out --> outboundClassifier.inoutboundClassifier.out++ --> expressMacLayer.upperLayerInoutboundClassifier.out++ --> preemptableMacLayer.upperLayerInexpressMacLayer.lowerLayerOut --> scheduler.in++preemptableMacLayer.lowerLayerOut --> scheduler.in++scheduler.out --> preemptingServer.inpreemptingServer.out --> lowerLayerOutlowerLayerIn --> inboundClassifier.ininboundClassifier.out++ --> expressMacLayer.lowerLayerIninboundClassifier.out++ --> preemptableMacLayer.lowerLayerInexpressMacLayer.upperLayerOut --> multiplexer.in++preemptableMacLayer.upperLayerOut --> multiplexer.in++multiplexer.out --> upperLayerOutlifetimer: inet.protocolelement.contract.IPacketLifeTimer (like IPacketLifeTimer) Source: lifetimer: <default("")> like IPacketLifeTimer if typename != "" { @display("p=100,100;is=s"); }lifetimerqueue: inet.queueing.contract.IPacketQueue (like IPacketQueue) IPacketQueue: Interface for packet queue modules. Source: queue: <default("")> like IPacketQueue { @display("p=200,100"); }queueoutboundClassifier: inet.queueing.classifier.PacketClassifier (like IPacketClassifier) PacketClassifier: Connects one packet producer to multiple packet consumers. IPacketClassifier: Interface for packet classifier modules. Source: outboundClassifier: <default("PacketClassifier")> like IPacketClassifier { classifierClass = default("inet::PacketVlanReqClassifier"); @display("p=200,200"); }outboundClassifierexpressMacLayer: inet.linklayer.ethernet.modular.EthernetStreamingMacLayer (like IEthernetMacLayer) IEthernetMacLayer: Module interface for Ethernet MAC (Media Access Control) layer implementations. Source: expressMacLayer: <default("EthernetStreamingMacLayer")> like IEthernetMacLayer { @display("p=300,300"); }expressMacLayerpreemptableMacLayer: inet.linklayer.ethernet.modular.EthernetFragmentingMacLayer (like IEthernetMacLayer) IEthernetMacLayer: Module interface for Ethernet MAC (Media Access Control) layer implementations. Source: preemptableMacLayer: <default("EthernetFragmentingMacLayer")> like IEthernetMacLayer { @display("p=500,300"); }preemptableMacLayerscheduler: inet.queueing.scheduler.PriorityScheduler This scheduler pulls packets from the first non-empty among its connected packet providers. Source: scheduler: PriorityScheduler { @display("p=200,400"); }schedulerpreemptingServer: inet.queueing.server.PreemptingServer Source: preemptingServer: PreemptingServer { datarate = default(parent.bitrate); @display("p=200,500"); }preemptingServerinboundClassifier: inet.queueing.classifier.PacketClassifier (like IPacketClassifier) PacketClassifier: Connects one packet producer to multiple packet consumers. IPacketClassifier: Interface for packet classifier modules. Source: inboundClassifier: <default("PacketClassifier")> like IPacketClassifier { classifierClass = default("inet::PacketFragmentTagClassifier"); @display("p=600,400"); }inboundClassifiermultiplexer: inet.queueing.common.PacketMultiplexer Connects multiple packet producers to one packet consumer. Source: multiplexer: PacketMultiplexer { @display("p=600,200"); }multiplexer

Usage diagram

Inheritance diagram

Parameters

Name

Type

Default value

Description

bitrate

double

Properties

Name

Value

Description

display

i=block/layer

Gates

Name

Direction

Size

Description

upperLayerIn

input

upperLayerOut

output

lowerLayerIn

input

lowerLayerOut

output

Unassigned submodule parameters

Name

Type

Default value

Description

outboundClassifier.displayStringTextFormat

string

“classified %p pk (%l)”

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

outboundClassifier.reverseOrder

bool

false

outboundClassifier.classifierClass

string

“inet::PacketVlanReqClassifier”

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

expressMacLayer.queue.displayStringTextFormat

string

“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d”

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

expressMacLayer.queue.packetCapacity

int

-1

Maximum number of packets in the queue, no limit by default

expressMacLayer.queue.dataCapacity

int

-1b

Maximum total length of packets in the queue, no limit by default

expressMacLayer.queue.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

expressMacLayer.queue.comparatorClass

string

“”

Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class

expressMacLayer.queue.bufferModule

string

“”

Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default

expressMacLayer.streamer.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

expressMacLayer.streamer.clockModule

string

“”

Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional

expressMacLayer.streamer.datarate

double

nan bps

expressMacLayer.outboundEmitter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

expressMacLayer.outboundEmitter.packetFilter

object

“*”

Which packets are considered, matches all packets by default

expressMacLayer.outboundEmitter.direction

string

“undefined”

expressMacLayer.outboundEmitter.signalName

string

expressMacLayer.fcsChecker.displayStringTextFormat

string

“dropped {numDroppedPackets}/{numProcessedPackets} pk ({droppedTotalLength}/{processedTotalLength})”

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

expressMacLayer.fcsChecker.backpressure

bool

false

expressMacLayer.fcsChecker.popFcs

bool

false

expressMacLayer.inboundEmitter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

expressMacLayer.inboundEmitter.packetFilter

object

“*”

Which packets are considered, matches all packets by default

expressMacLayer.inboundEmitter.direction

string

“undefined”

expressMacLayer.inboundEmitter.signalName

string

preemptableMacLayer.queue.displayStringTextFormat

string

“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d”

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

preemptableMacLayer.queue.packetCapacity

int

-1

Maximum number of packets in the queue, no limit by default

preemptableMacLayer.queue.dataCapacity

int

-1b

Maximum total length of packets in the queue, no limit by default

preemptableMacLayer.queue.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

preemptableMacLayer.queue.comparatorClass

string

“”

Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class

preemptableMacLayer.queue.bufferModule

string

“”

Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default

preemptableMacLayer.fcsRemover.displayStringTextFormat

string

“dropped {numDroppedPackets}/{numProcessedPackets} pk ({droppedTotalLength}/{processedTotalLength})”

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

preemptableMacLayer.fcsRemover.backpressure

bool

false

preemptableMacLayer.fcsRemover.popFcs

bool

true

preemptableMacLayer.streamer.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

preemptableMacLayer.streamer.clockModule

string

“”

Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional

preemptableMacLayer.streamer.datarate

double

nan bps

preemptableMacLayer.streamer.minPacketLength

int

preemptableMacLayer.streamer.roundingLength

int

1B

preemptableMacLayer.fragmentFcsInserter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

preemptableMacLayer.fragmentFcsInserter.fcsMode

string

“declared”

preemptableMacLayer.outboundEmitter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

preemptableMacLayer.outboundEmitter.packetFilter

object

“*”

Which packets are considered, matches all packets by default

preemptableMacLayer.outboundEmitter.direction

string

“undefined”

preemptableMacLayer.outboundEmitter.signalName

string

preemptableMacLayer.fcsInserter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

preemptableMacLayer.fcsInserter.fcsMode

string

“declared”

preemptableMacLayer.defragmenter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

preemptableMacLayer.defragmenter.deleteSelf

bool

false

preemptableMacLayer.fragmentFcsChecker.displayStringTextFormat

string

“dropped {numDroppedPackets}/{numProcessedPackets} pk ({droppedTotalLength}/{processedTotalLength})”

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

preemptableMacLayer.fragmentFcsChecker.backpressure

bool

false

preemptableMacLayer.inboundEmitter.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

preemptableMacLayer.inboundEmitter.packetFilter

object

“*”

Which packets are considered, matches all packets by default

preemptableMacLayer.inboundEmitter.direction

string

“undefined”

preemptableMacLayer.inboundEmitter.signalName

string

scheduler.displayStringTextFormat

string

“scheduled %p pk (%l)”

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

scheduler.reverseOrder

bool

false

preemptingServer.displayStringTextFormat

string

“served %p pk (%l)”

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

preemptingServer.clockModule

string

“”

Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional

preemptingServer.datarate

double

parent.bitrate

inboundClassifier.displayStringTextFormat

string

“classified %p pk (%l)”

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

inboundClassifier.reverseOrder

bool

false

inboundClassifier.classifierClass

string

“inet::PacketFragmentTagClassifier”

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

multiplexer.displayStringTextFormat

string

“passed %p pk (%l)”

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

multiplexer.forwardServiceRegistration

bool

true

multiplexer.forwardProtocolRegistration

bool

true

Source code

module EthernetPreemptingMacLayer like IEthernetMacLayer
{
    parameters:
        volatile double bitrate @unit(bps);
        *.bitrate = default(this.bitrate);
        lifetimer.collectionModule = default("^.queue");
        @display("i=block/layer");
    gates:
        input upperLayerIn;
        output upperLayerOut;
        input lowerLayerIn;
        output lowerLayerOut;
    submodules:
        lifetimer: <default("")> like IPacketLifeTimer if typename != "" {
            @display("p=100,100;is=s");
        }
        queue: <default("")> like IPacketQueue {
            @display("p=200,100");
        }
        outboundClassifier: <default("PacketClassifier")> like IPacketClassifier {
            classifierClass = default("inet::PacketVlanReqClassifier");
            @display("p=200,200");
        }
        expressMacLayer: <default("EthernetStreamingMacLayer")> like IEthernetMacLayer {
            @display("p=300,300");
        }
        preemptableMacLayer: <default("EthernetFragmentingMacLayer")> like IEthernetMacLayer {
            @display("p=500,300");
        }
        scheduler: PriorityScheduler {
            @display("p=200,400");
        }
        preemptingServer: PreemptingServer {
            datarate = default(parent.bitrate);
            @display("p=200,500");
        }
        inboundClassifier: <default("PacketClassifier")> like IPacketClassifier {
            classifierClass = default("inet::PacketFragmentTagClassifier");
            @display("p=600,400");
        }
        multiplexer: PacketMultiplexer {
            @display("p=600,200");
        }
    connections:
        upperLayerIn --> { @display("m=n"); } --> queue.in;
        queue.out --> outboundClassifier.in;
        outboundClassifier.out++ --> expressMacLayer.upperLayerIn;
        outboundClassifier.out++ --> preemptableMacLayer.upperLayerIn;
        expressMacLayer.lowerLayerOut --> scheduler.in++;
        preemptableMacLayer.lowerLayerOut --> scheduler.in++;
        scheduler.out --> preemptingServer.in;
        preemptingServer.out --> { @display("m=s"); } --> lowerLayerOut;

        lowerLayerIn --> { @display("m=s"); } --> inboundClassifier.in;
        inboundClassifier.out++ --> expressMacLayer.lowerLayerIn;
        inboundClassifier.out++ --> preemptableMacLayer.lowerLayerIn;
        expressMacLayer.upperLayerOut --> multiplexer.in++;
        preemptableMacLayer.upperLayerOut --> multiplexer.in++;
        multiplexer.out --> { @display("m=n"); } --> upperLayerOut;
}

File: src/inet/linklayer/ethernet/modular/EthernetPreemptingMacLayer.ned