LtePdcpTxEntity

Package: simu5g.stack.pdcp

LtePdcpTxEntity

simple module

Handles operations related to the LTE PDCP (Packet Data Convergence Protocol) layer on the transmitting side of a specific connection. This module manages the creation, sequencing, header compression, and metadata association for PDCP PDUs before they are passed down to the RLC layer.

Header compression (ROHC) is on when the bearer's configuration lists ROHC profiles (the rohc field of BearerConfigurator's bearer definitions, pushed as rohcProfiles). It is a size model of the unidirectional mode (U-mode, RFC 3095): the compressed IP and transport headers travel inside the ROHC header, which has the compressed size, and the receiver puts them back. Each packet is compressed with the most specific of the bearer's profiles that fits it: "rtp" (an RTP header follows the UDP header), "udp", "tcp", then "ip", which covers the IP header only and leaves the transport header as it is; a fragment can only use "ip". A packet no profile fits goes uncompressed.

Each flow has a context (up to 16 per bearer; CID 0 costs nothing, CIDs 1..15 one byte per packet; a new flow finding them all taken takes over the least recently used one). A context starts in the IR state, whose packets carry the full headers plus rohcIrOverhead, moves to FO after rohcIrPackets packets and to SO after rohcFoPackets FO packets, and is refreshed: back to IR every rohcIrRefresh packets, back to FO every rohcFoRefresh SO packets. The PDCP entities are re-created at a handover, so both ends start over in IR. Not modeled: context damage after losses (decompression failures), the O-mode and R-mode feedback, and ROHCv2. See RohcCompressor.

Inheritance diagram

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

Known subclasses

Name Type Description
NrPdcpTxEntity simple module

Handles the operations related to the NR PDCP (Packet Data Convergence Protocol) layer at the transmitting side of a specific connection. It extends the LtePdcpTxEntity module with the NR flavor of the per-SDU statistics (pdcpSduSentNr) and the NR-leg id mapping of a single-leg NR bearer. On a multi-leg bearer, leg dispatch, id mapping and per-leg statistics are handled by the enclosing compound's splitter instead (see PdcpEntityBase).

Parameters

Name Type Default value Description
binderModule string "binder"
emitPerSduSignals bool true

Cleared by a PdcpEntityBase with a splitter: the splitter emits the per-leg statistics

rohcProfiles string ""

The bearer's ROHC profiles, space-separated, pushed by RRC; "" = no header compression

rohcFoHeaderSizes object {rtp: 6, udp: 6, tcp: 9, ip: 4}

Compressed header size per ROHC profile in the FO state, in bytes

rohcSoHeaderSizes object {rtp: 3, udp: 3, tcp: 5, ip: 1}

Compressed header size per ROHC profile in the SO state, in bytes

rohcIrOverhead int 3B

Size of an IR packet's ROHC fields (packet type, profile, CRC) on top of the full headers

rohcIrPackets int 3

IR packets a context sends before moving to FO

rohcFoPackets int 3

FO packets a context sends before moving to SO

rohcIrRefresh int 1700

Packets of a context between two IR refreshes

rohcFoRefresh int 700

SO packets of a context between two FO refreshes

rlcMode string "UM"

RLC mode of this bearer, pushed by RRC; determines the PDCP header size

Properties

Name Value Description
dynamic true
display i=block/layer

Gates

Name Direction Size Description
in input
out output

Signals

Name Type Unit Description
receivedPacketFromUpperLayer
sentPacketToLowerLayer
pdcpSduSent

Source code

//
// Handles operations related to the LTE PDCP (Packet Data Convergence Protocol)
// layer on the transmitting side of a specific connection. This module manages the creation,
// sequencing, header compression, and metadata association for PDCP PDUs before they are passed
// down to the RLC layer.
//
// Header compression (ROHC) is on when the bearer's configuration lists ROHC profiles
// (the rohc field of ~BearerConfigurator's bearer definitions, pushed as rohcProfiles).
// It is a size model of the unidirectional mode (U-mode, RFC 3095): the compressed IP
// and transport headers travel inside the ROHC header, which has the compressed size,
// and the receiver puts them back. Each packet is compressed with the most specific of
// the bearer's profiles that fits it: "rtp" (an RTP header follows the UDP header),
// "udp", "tcp", then "ip", which covers the IP header only and leaves the transport
// header as it is; a fragment can only use "ip". A packet no profile fits goes
// uncompressed.
//
// Each flow has a context (up to 16 per bearer; CID 0 costs nothing, CIDs 1..15 one byte
// per packet; a new flow finding them all taken takes over the least recently used one).
// A context starts in the IR state, whose packets carry the full headers plus
// rohcIrOverhead, moves to FO after rohcIrPackets packets and to SO after rohcFoPackets
// FO packets, and is refreshed: back to IR every rohcIrRefresh packets, back to FO every
// rohcFoRefresh SO packets. The PDCP entities are re-created at a handover, so both ends
// start over in IR. Not modeled: context damage after losses (decompression failures),
// the O-mode and R-mode feedback, and ROHCv2. See RohcCompressor.
//
simple LtePdcpTxEntity like IPdcpTxEntity
{
    parameters:
        @dynamic(true);
        @display("i=block/layer");
        @signal[receivedPacketFromUpperLayer];
        @signal[sentPacketToLowerLayer];
        @signal[pdcpSduSent];
        string binderModule = default("binder");
        bool emitPerSduSignals = default(true);              // Cleared by a PdcpEntityBase with a splitter: the splitter emits the per-leg statistics
        string rohcProfiles = default("");  // The bearer's ROHC profiles, space-separated, pushed by RRC; "" = no header compression
        object rohcFoHeaderSizes = default({rtp: 6, udp: 6, tcp: 9, ip: 4});  // Compressed header size per ROHC profile in the FO state, in bytes
        object rohcSoHeaderSizes = default({rtp: 3, udp: 3, tcp: 5, ip: 1});  // Compressed header size per ROHC profile in the SO state, in bytes
        int rohcIrOverhead @unit(B) = default(3B);  // Size of an IR packet's ROHC fields (packet type, profile, CRC) on top of the full headers
        int rohcIrPackets = default(3);  // IR packets a context sends before moving to FO
        int rohcFoPackets = default(3);  // FO packets a context sends before moving to SO
        int rohcIrRefresh = default(1700);  // Packets of a context between two IR refreshes
        int rohcFoRefresh = default(700);  // SO packets of a context between two FO refreshes
        string rlcMode @enum(TM,UM,AM) = default("UM");      // RLC mode of this bearer, pushed by RRC; determines the PDCP header size

    gates:
        input in;
        output out;
}

File: src/simu5g/stack/pdcp/LtePdcpTxEntity.ned