RlcMux

Package: simu5g.stack.rlc

simple module RlcMux

Lower-layer RLC packet dispatcher.

Dispatches MAC packets to the correct RX entity or TX entity, and collects TX entity output to route to the MAC layer.

simu5g.stack.rlc.RlcMuxRlcMuxsimple

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

LteNicBase

compound module

The LteNicBase module serves as the foundational building block for LTE networking in Simu5G. It integrates protocols for LTE communication, including PDCP, RLC, MAC, and PHY layers. This base module allows higher-level modules, such as User Equipment (UE) and eNodeB (evolved Node B), to configure and utilize these layers according to their specific requirements.

NrNicUe

compound module

Defines a User Equipment (UE) network interface card that supports both LTE and NR (New Radio) technologies. It extends the LteNicUe module by adding additional submodules and parameters to support NR-specific functionalities. D2D support is added by the NrNicUeD2D subtype.

Known subclasses

Name

Type

Description

RlcMuxD2D

simple module

Device-to-Device (D2D) aware version of RlcMux. It additionally handles D2D mode switch notifications arriving from the MAC layer, dispatching them to the TX or RX UM entity of the affected bearer, and declares the D2D statistics (emitted by the D2D UM entities). Selected by the D2D-capable NICs.

Parameters

Name

Type

Default value

Description

bearerManagementModule

string

“^.rrc.bearerManagement”

Properties

Name

Value

Description

class

RlcMux

display

p=100,200;i=block/dispatch

Gates

Name

Direction

Size

Description

macIn

input

macOut

output

toRxEntity [ ]

output

Dynamic: dispatches to RX entity in gates

fromTxEntity [ ]

input

Dynamic: receives from TX entity out gates

macToTxEntity [ ]

output

Dynamic: dispatches MAC SDU requests to TX entity macIn gates

Signals

Name

Type

Unit

Description

receivedPacketFromLowerLayer

rlcDelayDl

rlcDelayUl

rlcPduDelayDl

rlcPduDelayUl

rlcPduThroughputDl

rlcPduThroughputUl

rlcThroughputDl

rlcThroughputUl

sentPacketToLowerLayer

Statistics

Name

Title

Source

Record

Unit

Interpolation Mode

Description

receivedPacketFromLowerLayer

receivedPacketFromLowerLayer

count,”sum(packetBytes)”,”vector(packetBytes)”

none

rlcDelayDl

Delay at the rlc layer DL

rlcDelayDl

mean,vector

s

rlcDelayUl

Delay at the rlc layer UL

rlcDelayUl

mean,vector

s

rlcPduDelayDl

Delay at the rlc layer UL

rlcPduDelayDl

mean,vector

s

rlcPduDelayUl

Delay at the rlc layer UL

rlcPduDelayUl

mean,vector

s

rlcPduThroughputDl

Throughput at the rlc layer DL

rlcPduThroughputDl

simu5g_rateavg,vector

Bps

rlcPduThroughputUl

Throughput at the rlc layer UL

rlcPduThroughputUl

simu5g_rateavg,vector

Bps

rlcThroughputDl

Throughput at the rlc layer DL

rlcThroughputDl

simu5g_rateavg,vector

Bps

rlcThroughputUl

Throughput at the rlc layer UL

rlcThroughputUl

simu5g_rateavg,vector

Bps

sentPacketToLowerLayer

sentPacketToLowerLayer

count,”sum(packetBytes)”,”vector(packetBytes)”

none

Source code

//
// Lower-layer RLC packet dispatcher.
//
// Dispatches MAC packets to the correct RX entity or TX entity,
// and collects TX entity output to route to the MAC layer.
//
simple RlcMux like IRlcMux
{
    parameters:
        @class("RlcMux");
        @display("p=100,200;i=block/dispatch");
        string bearerManagementModule = default("^.rrc.bearerManagement");

        @signal[receivedPacketFromLowerLayer];
        @statistic[receivedPacketFromLowerLayer](source="receivedPacketFromLowerLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
        @signal[sentPacketToLowerLayer];
        @statistic[sentPacketToLowerLayer](source="sentPacketToLowerLayer"; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);

        //# SDU-level statistics
        @signal[rlcDelayDl];
        @statistic[rlcDelayDl](title="Delay at the rlc layer DL"; unit="s"; source="rlcDelayDl"; record=mean,vector);
        @signal[rlcThroughputDl];
        @statistic[rlcThroughputDl](title="Throughput at the rlc layer DL"; unit="Bps"; source="rlcThroughputDl"; record=simu5g_rateavg,vector);
        @signal[rlcDelayUl];
        @statistic[rlcDelayUl](title="Delay at the rlc layer UL"; unit="s"; source="rlcDelayUl"; record=mean,vector);
        @signal[rlcThroughputUl];
        @statistic[rlcThroughputUl](title="Throughput at the rlc layer UL"; unit="Bps"; source="rlcThroughputUl"; record=simu5g_rateavg,vector);

        //# PDU-level statistics
        @signal[rlcPduDelayDl];
        @statistic[rlcPduDelayDl](title="Delay at the rlc layer UL"; unit="s"; source="rlcPduDelayDl"; record=mean,vector);
        @signal[rlcPduThroughputDl];
        @statistic[rlcPduThroughputDl](title="Throughput at the rlc layer DL"; unit="Bps"; source="rlcPduThroughputDl"; record=simu5g_rateavg,vector);
        @signal[rlcPduDelayUl];
        @statistic[rlcPduDelayUl](title="Delay at the rlc layer UL"; unit="s"; source="rlcPduDelayUl"; record=mean,vector);
        @signal[rlcPduThroughputUl];
        @statistic[rlcPduThroughputUl](title="Throughput at the rlc layer UL"; unit="Bps"; source="rlcPduThroughputUl"; record=simu5g_rateavg,vector);

    gates:
        input macIn;
        output macOut;
        output toRxEntity[];          // Dynamic: dispatches to RX entity in gates
        input fromTxEntity[];         // Dynamic: receives from TX entity out gates
        output macToTxEntity[];       // Dynamic: dispatches MAC SDU requests to TX entity macIn gates
}

File: src/simu5g/stack/rlc/RlcMux.ned