EthernetPreemptingMacLayer

Package: inet.linklayer.ethernet.modular

EthernetPreemptingMacLayer

compound module

(no description)

lifetimer : like IPacketLifeTimer

Source:
lifetimer: <default("")> like IPacketLifeTimer if typename != "" {
    @display("p=100,100;is=s");
} queue : like IPacketQueue

IPacketQueue: This module interface is implemented by packet queue modules.

Source:
queue: <default("")> like IPacketQueue {
    @display("p=200,100");
} outboundClassifier : PacketClassifier

This module connects one packet producer to multiple packet consumers.

Source:
outboundClassifier: PacketClassifier {
    classifierClass = default("inet::PacketVlanReqClassifier");
    @display("p=200,200");
} expressMacLayer : like IEthernetMacLayer

Source:
expressMacLayer: <default("EthernetStreamingMacLayer")> like IEthernetMacLayer {
    @display("p=300,300");
} preemptableMacLayer : like IEthernetMacLayer

Source:
preemptableMacLayer: <default("EthernetFragmentingMacLayer")> like IEthernetMacLayer {
    @display("p=500,300");
} scheduler : PriorityScheduler

This scheduler pulls packets from the first non-empty among its connected packet providers.

Source:
scheduler: PriorityScheduler {
    @display("p=200,400");
} preemptingServer : PreemptingServer

Source:
preemptingServer: PreemptingServer {
    datarate = default(parent.bitrate);
    @display("p=200,500");
} inboundClassifier : PacketClassifier

This module connects one packet producer to multiple packet consumers.

Source:
inboundClassifier: PacketClassifier {
    classifierClass = default("inet::PacketFragmentTagClassifier");
    @display("p=600,400");
} multiplexer : PacketMultiplexer

This module connects multiple packet producers to one packet consumer.

Source:
multiplexer: PacketMultiplexer {
    @display("p=600,200");
}

Usage diagram

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the 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

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

scheduler.displayStringTextFormat string "scheduled %p pk (%l)"

determines the text that is written on top of the submodule

scheduler.reverseOrder bool false
preemptingServer.displayStringTextFormat string "served %p pk (%l)"

determines the text that is written on top of the submodule

preemptingServer.clockModule string ""

relative path of a module that implements 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

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

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: PacketClassifier {
            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: PacketClassifier {
            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