NrRlcAmRxEntity

Package: simu5g.stack.rlc.am

NrRlcAmRxEntity

simple module

NR (TS 38.322) receiving side of the Acknowledged Mode (AM) of the RLC layer: SO byte-coverage reassembly with a per-SDU SN window, t-Reassembly + t-StatusProhibit timers. Shares the common RlcAmRxEntityBase shell with the LTE profile LteRlcAmRxEntity. Bound by default inside the NrRlcAmEntity compound. The NR SO-reassembly statistics are declared here so they are recorded only for NR-selected entities.

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 2048

2048 (12-bit SN) or 131072 (18-bit SN)

t_Reassembly 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), vector(packetBytes) none
sentPacketToUpperLayer sentPacketToUpperLayer count, sum(packetBytes), vector(packetBytes) none
rxWindowOccupation RX window occupation rxWindowOccupation mean, vector
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

//
// NR (TS 38.322) receiving side of the Acknowledged Mode (AM) of the RLC
// layer: SO byte-coverage reassembly with a per-SDU SN window, t-Reassembly +
// t-StatusProhibit timers. Shares the common RlcAmRxEntityBase shell with the
// LTE profile ~LteRlcAmRxEntity. Bound by default inside the ~NrRlcAmEntity
// compound. The NR SO-reassembly statistics are declared here so they are
// recorded only for NR-selected entities.
//
simple NrRlcAmRxEntity like simu5g.stack.rlc.IRlcAmRxEntity
{
    parameters:
        @dynamic(true);
        @display("i=block/layer");
        int AM_Window_Size = default(2048);       // 2048 (12-bit SN) or 131072 (18-bit SN)
        double t_Reassembly @unit(s) = default(80ms);
        double t_StatusProhibit @unit(s) = default(100ms);

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


        //# 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/NrRlcAmRxEntity.ned