Package: simu5g.stack.pdcp
LtePdcpTxEntity
simple moduleHandles 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