EthernetFragmentingMacLayer

Package: inet.linklayer.ethernet.modular

compound module EthernetFragmentingMacLayer

(no description)

EthernetFragmentingMacLayerupperLayerIn --> queue.inqueue.out --> fcsRemover.infcsRemover.out --> streamer.instreamer.out --> gate.ingate.out --> fragmentFcsInserter.infragmentFcsInserter.out --> outboundEmitter.inoutboundEmitter.out --> lowerLayerOutlowerLayerIn --> inboundEmitter.ininboundEmitter.out --> fragmentFcsChecker.infragmentFcsChecker.out --> defragmenter.indefragmenter.out --> fcsInserter.infcsInserter.out --> upperLayerOutlifetimer: inet.protocolelement.contract.IPacketLifeTimer (like IPacketLifeTimer) Source: lifetimer: <default("")> like IPacketLifeTimer if typename != "" { @display("p=100,100;is=s"); }lifetimerqueue: inet.queueing.queue.PacketQueue (like IPacketQueue) PacketQueue: Implements a configurable packet queue, which is suitable for use in MAC protocols, traffic condi... IPacketQueue: Interface for packet queue modules. Source: queue: <default("PacketQueue")> like IPacketQueue { @display("p=200,100"); }queuefcsRemover: inet.linklayer.ethernet.modular.EthernetFcsChecker (like IPacketFilter) IPacketFilter: Interface for packet filter modules. Source: fcsRemover: <default("EthernetFcsChecker")> like IPacketFilter { @display("p=200,200"); }fcsRemoverstreamer: inet.protocolelement.fragmentation.PreemptableStreamer (like IPacketFlow) PreemptableStreamer: Takes packets passed to its input and streams them to its output. IPacketFlow: Interface for packet flows. Source: streamer: <default("PreemptableStreamer")> like IPacketFlow { @display("p=200,300"); }streamergate: inet.queueing.contract.IPacketGate (like IPacketGate) IPacketGate: Interface for a packet gate. Source: gate: <default("")> like IPacketGate { @display("p=200,400"); }gatefragmentFcsInserter: inet.linklayer.ethernet.modular.EthernetFragmentFcsInserter (like IPacketFlow) IPacketFlow: Interface for packet flows. Source: fragmentFcsInserter: <default("EthernetFragmentFcsInserter")> like IPacketFlow { @display("p=200,500"); }fragmentFcsInserteroutboundEmitter: inet.protocolelement.common.PacketEmitter (like IPacketFlow) IPacketFlow: Interface for packet flows. Source: outboundEmitter: <default("PacketEmitter")> like IPacketFlow { @display("p=200,600"); }outboundEmitterfcsInserter: inet.linklayer.ethernet.modular.EthernetFcsInserter (like IPacketFlow) IPacketFlow: Interface for packet flows. Source: fcsInserter: <default("EthernetFcsInserter")> like IPacketFlow { @display("p=500,200"); }fcsInserterdefragmenter: inet.protocolelement.fragmentation.FragmentTagBasedDefragmenter Source: defragmenter: FragmentTagBasedDefragmenter { @display("p=500,300"); }defragmenterfragmentFcsChecker: inet.linklayer.ethernet.modular.EthernetFragmentFcsChecker (like IPacketFilter) IPacketFilter: Interface for packet filter modules. Source: fragmentFcsChecker: <default("EthernetFragmentFcsChecker")> like IPacketFilter { @display("p=500,400"); }fragmentFcsCheckerinboundEmitter: inet.protocolelement.common.PacketEmitter (like IPacketFlow) IPacketFlow: Interface for packet flows. Source: inboundEmitter: <default("PacketEmitter")> like IPacketFlow { @display("p=500,500"); }inboundEmitter

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

EthernetPreemptingMacLayer

compound module

(no description)

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

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

queue.packetCapacity

int

-1

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

queue.dataCapacity

int

-1b

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

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

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

queue.bufferModule

string

“”

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

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

fcsRemover.backpressure

bool

false

fcsRemover.popFcs

bool

true

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

streamer.clockModule

string

“”

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

streamer.datarate

double

nan bps

streamer.minPacketLength

int

streamer.roundingLength

int

1B

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

fragmentFcsInserter.fcsMode

string

“declared”

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

outboundEmitter.packetFilter

object

“*”

Which packets are considered, matches all packets by default

outboundEmitter.direction

string

“undefined”

outboundEmitter.signalName

string

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

fcsInserter.fcsMode

string

“declared”

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

defragmenter.deleteSelf

bool

false

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

fragmentFcsChecker.backpressure

bool

false

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

inboundEmitter.packetFilter

object

“*”

Which packets are considered, matches all packets by default

inboundEmitter.direction

string

“undefined”

inboundEmitter.signalName

string

Source code

module EthernetFragmentingMacLayer like IEthernetMacLayer
{
    parameters:
        double bitrate @unit(bps);
        *.bitrate = default(this.bitrate);
        lifetimer.collectionModule = default("^.queue");
        streamer.minPacketLength = 60B;
        outboundEmitter.signalName = "packetSentToLower";
        outboundEmitter.direction = "outbound";
        inboundEmitter.signalName = "packetReceivedFromLower";
        inboundEmitter.direction = "inbound";
        @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("PacketQueue")> like IPacketQueue {
            @display("p=200,100");
        }
        fcsRemover: <default("EthernetFcsChecker")> like IPacketFilter {
            @display("p=200,200");
        }
        streamer: <default("PreemptableStreamer")> like IPacketFlow {
            @display("p=200,300");
        }
        gate: <default("")> like IPacketGate {
            @display("p=200,400");
        }
        fragmentFcsInserter: <default("EthernetFragmentFcsInserter")> like IPacketFlow {
            @display("p=200,500");
        }
        outboundEmitter: <default("PacketEmitter")> like IPacketFlow {
            @display("p=200,600");
        }
        fcsInserter: <default("EthernetFcsInserter")> like IPacketFlow {
            @display("p=500,200");
        }
        defragmenter: FragmentTagBasedDefragmenter {
            @display("p=500,300");
        }
        fragmentFcsChecker: <default("EthernetFragmentFcsChecker")> like IPacketFilter {
            @display("p=500,400");
        }
        inboundEmitter: <default("PacketEmitter")> like IPacketFlow {
            @display("p=500,500");
        }
    connections:
        upperLayerIn --> { @display("m=n"); } --> queue.in;
        queue.out --> fcsRemover.in;
        fcsRemover.out --> streamer.in;
        streamer.out --> gate.in;
        gate.out --> fragmentFcsInserter.in;
        fragmentFcsInserter.out --> outboundEmitter.in;
        outboundEmitter.out --> { @display("m=s"); } --> lowerLayerOut;

        lowerLayerIn --> { @display("m=s"); } --> inboundEmitter.in;
        inboundEmitter.out --> fragmentFcsChecker.in;
        fragmentFcsChecker.out --> defragmenter.in;
        defragmenter.out --> fcsInserter.in;
        fcsInserter.out --> { @display("m=n"); } --> upperLayerOut;
}

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