LteRlcAmRxEntity

Package: simu5g.stack.rlc.am

LteRlcAmRxEntity

simple module

LTE (TS 36.322) receiving side of the Acknowledged Mode (AM) of the RLC layer: PDU-SN receiving window with byte-interval coverage for AMD PDU segments, t-Reordering + t-StatusProhibit, ACK_SN + NACK-list STATUS reports, in-order FI-walk reassembly of the concatenated SDU stream. Shares the common RlcAmRxEntityBase shell with the NR profile NrRlcAmRxEntity, whose window/status machinery it deliberately mirrors. Bound by default inside the LteRlcAmEntity compound.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Parameters

Name Type Default value Description
AM_Window_Size int 512

TS 36.322: 512 (10-bit SN space)

t_Reordering double 80ms
t_StatusProhibit double 100ms

Properties

Name Value Description
dynamic true
display i=block/layer

Gates

Name Direction Size Description
in input

PDUs from MAC, via the RlcMux

out output

Reassembled SDUs to the PDCP layer (direct per-DRB connection, not via a mux)

feedbackOut output

Received STATUS PDUs -> co-located TX side (ARQ)

statusOut output

Own STATUS reports -> co-located TX side (transmission)

Signals

Name Type Unit Description
receivedPacketFromLowerLayer
sentPacketToUpperLayer
rxWindowOccupation
rlcDelayDl
rlcThroughputDl
rlcDelayUl
rlcThroughputUl
rlcPduDelayDl
rlcPduThroughputDl
rlcPduDelayUl
rlcPduThroughputUl
rlcPacketLossDl
rlcPacketLossUl

Statistics

Name Title Source Record Unit Interpolation Mode Description
receivedPacketFromLowerLayer receivedPacketFromLowerLayer count, sum(packetBytes) none
sentPacketToUpperLayer sentPacketToUpperLayer count, sum(packetBytes) none
rxWindowOccupation RX window occupation rxWindowOccupation mean
rlcDelayDl Delay at the rlc layer DL rlcDelayDl mean s
rlcThroughputDl Throughput at the rlc layer DL rlcThroughputDl simu5g_rateavg Bps
rlcDelayUl Delay at the rlc layer UL rlcDelayUl mean s
rlcThroughputUl Throughput at the rlc layer UL rlcThroughputUl simu5g_rateavg Bps
rlcPduDelayDl PDU delay at the rlc layer DL rlcPduDelayDl mean s
rlcPduThroughputDl PDU throughput at the rlc layer DL rlcPduThroughputDl simu5g_rateavg Bps
rlcPduDelayUl PDU delay at the rlc layer UL rlcPduDelayUl mean s
rlcPduThroughputUl PDU throughput at the rlc layer UL rlcPduThroughputUl simu5g_rateavg Bps
rlcPacketLossDl Packet loss at the rlc layer DL rlcPacketLossDl mean
rlcPacketLossUl Packet loss at the rlc layer UL rlcPacketLossUl mean

Source code

//
// LTE (TS 36.322) receiving side of the Acknowledged Mode (AM) of the RLC
// layer: PDU-SN receiving window with byte-interval coverage for AMD PDU
// segments, t-Reordering + t-StatusProhibit, ACK_SN + NACK-list STATUS
// reports, in-order FI-walk reassembly of the concatenated SDU stream.
// Shares the common RlcAmRxEntityBase shell with the NR profile
// ~NrRlcAmRxEntity, whose window/status machinery it deliberately mirrors.
// Bound by default inside the ~LteRlcAmEntity compound.
//
simple LteRlcAmRxEntity like simu5g.stack.rlc.IRlcAmRxEntity
{
    parameters:
        @dynamic(true);
        @display("i=block/layer");
        int AM_Window_Size = default(512);       // TS 36.322: 512 (10-bit SN space)
        double t_Reordering @unit(s) = default(80ms);
        double t_StatusProhibit @unit(s) = default(100ms);

        @signal[receivedPacketFromLowerLayer];
        @statistic[receivedPacketFromLowerLayer](source="receivedPacketFromLowerLayer"; record=count,"sum(packetBytes)"; interpolationmode=none);
        @signal[sentPacketToUpperLayer];
        @statistic[sentPacketToUpperLayer](source="sentPacketToUpperLayer"; record=count,"sum(packetBytes)"; interpolationmode=none);
        @signal[rxWindowOccupation];
        @statistic[rxWindowOccupation](title="RX window occupation"; source="rxWindowOccupation"; record=mean);

        //# Per-bearer statistics. A bearer serves one peer, so these are already
        //# per-UE; aggregate over a UE's bearers in the analysis tool.
        @signal[rlcDelayDl];
        @statistic[rlcDelayDl](title="Delay at the rlc layer DL"; unit="s"; source="rlcDelayDl"; record=mean);
        @signal[rlcThroughputDl];
        @statistic[rlcThroughputDl](title="Throughput at the rlc layer DL"; unit="Bps"; source="rlcThroughputDl"; record=simu5g_rateavg);
        @signal[rlcDelayUl];
        @statistic[rlcDelayUl](title="Delay at the rlc layer UL"; unit="s"; source="rlcDelayUl"; record=mean);
        @signal[rlcThroughputUl];
        @statistic[rlcThroughputUl](title="Throughput at the rlc layer UL"; unit="Bps"; source="rlcThroughputUl"; record=simu5g_rateavg);
        @signal[rlcPduDelayDl];
        @statistic[rlcPduDelayDl](title="PDU delay at the rlc layer DL"; unit="s"; source="rlcPduDelayDl"; record=mean);
        @signal[rlcPduThroughputDl];
        @statistic[rlcPduThroughputDl](title="PDU throughput at the rlc layer DL"; unit="Bps"; source="rlcPduThroughputDl"; record=simu5g_rateavg);
        @signal[rlcPduDelayUl];
        @statistic[rlcPduDelayUl](title="PDU delay at the rlc layer UL"; unit="s"; source="rlcPduDelayUl"; record=mean);
        @signal[rlcPduThroughputUl];
        @statistic[rlcPduThroughputUl](title="PDU throughput at the rlc layer UL"; unit="Bps"; source="rlcPduThroughputUl"; record=simu5g_rateavg);
        @signal[rlcPacketLossDl];
        @statistic[rlcPacketLossDl](title="Packet loss at the rlc layer DL"; unit=""; source="rlcPacketLossDl"; record=mean);
        @signal[rlcPacketLossUl];
        @statistic[rlcPacketLossUl](title="Packet loss at the rlc layer UL"; unit=""; source="rlcPacketLossUl"; record=mean);

    gates:
        input in;         // PDUs from MAC, via the RlcMux
        output out;       // Reassembled SDUs to the PDCP layer (direct per-DRB connection, not via a mux)
        output feedbackOut;   // Received STATUS PDUs -> co-located TX side (ARQ)
        output statusOut; // Own STATUS reports -> co-located TX side (transmission)
}
File: src/simu5g/stack/rlc/am/LteRlcAmRxEntity.ned