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: Interface for packet queue modules.

Source:
queue: <default("")> like IPacketQueue {
    @display("p=200,100");
} outboundClassifier : 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");
} expressMacLayer : like IEthernetMacLayer

IEthernetMacLayer: Module interface for Ethernet MAC (Media Access Control) layer implementations.

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

IEthernetMacLayer: Module interface for Ethernet MAC (Media Access Control) layer implementations.

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 : 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");
} multiplexer : PacketMultiplexer

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
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,2); optional

preemptingServer.datarate double parent.bitrate
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