NrPdcpEntity

Package: simu5g.stack.pdcp

compound module NrPdcpEntity

PDCP entity of an NR data radio bearer: the PdcpEntityBase compound with its TX/RX sides bound to the NR entity profiles (TS 38.323), i.e. NR-flavored statistics on the TX side and the multi-leg reorder window on the RX side. Selected by BearerManagement via its pdcpEntityModuleType parameter (set by NrNicUe/NrNicEnb, and on EN-DC master eNBs from the configuration).

NrPdcpEntityupperIn --> tx.in inherited from PdcpEntityBaserx.out --> upperOut inherited from PdcpEntityBasetx.out --> legOut[0] inherited from PdcpEntityBase conditional: !hasSplitter?tx.out --> splitter.in inherited from PdcpEntityBase conditional: hasSplitter?splitter.out++ --> legOut[i] inherited from PdcpEntityBase for i=0..numLegs-1 conditional: hasSplitter⦀?legIn[0] --> rx.in inherited from PdcpEntityBase conditional: numLegs == 1?joiner.out --> rx.in inherited from PdcpEntityBase conditional: numLegs > 1?legIn[i] --> joiner.in++ inherited from PdcpEntityBase for i=0..numLegs-1 conditional: numLegs > 1⦀?tx: simu5g.stack.pdcp.NrPdcpTxEntity (like IPdcpTxEntity) inherited from PdcpEntityBase NrPdcpTxEntity: Handles the operations related to the NR PDCP (Packet Data Convergence Protocol) layer at the tra... IPdcpTxEntity: Module interface for the transmitting side of a PDCP entity. Source: tx: <> like IPdcpTxEntity { @display("p=50,50"); }txrx: simu5g.stack.pdcp.NrPdcpRxEntity (like IPdcpRxEntity) inherited from PdcpEntityBase NrPdcpRxEntity: Handles the operations related to the NR PDCP (Packet Data Convergence Protocol) layer on the rec... IPdcpRxEntity: Module interface for the receiving side of a PDCP entity. Source: rx: <> like IPdcpRxEntity { @display("p=150,50"); }rxsplitter: simu5g.stack.pdcp.DcPdcpLegSplitter (like IPdcpLegSplitter) inherited from PdcpEntityBase DcPdcpLegSplitter: TX-side leg dispatcher of a dual-connectivity split bearer (two legs), steering each PDCP PDU to... IPdcpLegSplitter: Module interface for the TX-side leg dispatcher of a PDCP entity (see ~PdcpEntityBase): implement... Source: splitter: <default("simu5g.stack.pdcp.DcPdcpLegSplitter")> like IPdcpLegSplitter if hasSplitter { @display("p=50,130;is=s"); }splitterjoiner: simu5g.stack.pdcp.PdcpLegJoiner (like IPdcpLegJoiner) inherited from PdcpEntityBase PdcpLegJoiner: RX-side leg merger of a multi-leg PDCP entity (see ~PdcpEntityBase): relays the PDU streams of al... IPdcpLegJoiner: Module interface for the RX-side leg merger of a multi-leg PDCP entity (see ~PdcpEntityBase): imp... Source: joiner: <default("simu5g.stack.pdcp.PdcpLegJoiner")> like IPdcpLegJoiner if numLegs > 1 { @display("p=150,130;is=s"); }joiner

Inheritance diagram

Extends

Name

Type

Description

PdcpEntityBase

compound module

Base type of the PDCP entity of one data radio bearer: packages the transmitting and the receiving side of TS 36.323 / 38.323, plus the leg split/join stage of a multi-leg bearer (e.g. an NR dual connectivity split bearer). Created dynamically by BearerManagement, one per (peer, DRB) pair.

Parameters

Name

Type

Default value

Description

numLegs

int

1

Number of RLC legs of this bearer

legs

string

numLegs == 1 ? “MCG” : “MCG SCG”

Cell group of each leg, space-separated, in leg-index order

hasSplitter

bool

numLegs > 1 || legs != “MCG”

The TX side routes through the splitter whenever a leg needs its per-leg id mapping

rohcProfiles

string

“”

The bearer’s ROHC profiles, space-separated, pushed by RRC; “” = no header compression

rlcMode

string

“UM”

Forwarded to tx only; determines the PDCP header size

Properties

Name

Value

Description

display

i=block/wheelbarrow

dynamic

true

Gates

Name

Direction

Size

Description

upperIn

input

SDUs from IP (via PdcpMux)

upperOut

output

Reassembled SDUs to IP (via PdcpMux)

legOut [ ]

output

numLegs

PDUs to leg k (RLC entity, or DcMux/X2)

legIn [ ]

input

numLegs

PDUs from leg k

Unassigned submodule parameters

Name

Type

Default value

Description

tx.binderModule

string

“binder”

tx.emitPerSduSignals

bool

true

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

tx.rohcProfiles

string

“”

The bearer’s ROHC profiles, space-separated, pushed by RRC; “” = no header compression

tx.rohcFoHeaderSizes

object

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

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

tx.rohcSoHeaderSizes

object

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

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

tx.rohcIrOverhead

int

3B

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

tx.rohcIrPackets

int

3

IR packets a context sends before moving to FO

tx.rohcFoPackets

int

3

FO packets a context sends before moving to SO

tx.rohcIrRefresh

int

1700

Packets of a context between two IR refreshes

tx.rohcFoRefresh

int

700

SO packets of a context between two FO refreshes

tx.rlcMode

string

“UM”

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

rx.binderModule

string

“binder”

rx.rohcProfiles

string

“”

The bearer’s ROHC profiles, space-separated, pushed by RRC; “” = no header compression

rx.reorderingEnabled

bool

false

Set by a multi-leg PdcpEntityBase: reorder the SN stream merged from several legs

rx.outOfOrderDelivery

bool

false

rx.timeout

double

0.1s

Timeout for RX Buffer

rx.rxWindowSize

int

4096

splitter.numLegs

int

Number of legs (set by the enclosing PdcpEntityBase)

splitter.legs

string

Cell group of each leg, space-separated “MCG”/”SCG” (set by the enclosing PdcpEntityBase)

splitter.binderModule

string

“binder”

Source code

//
// PDCP entity of an NR data radio bearer: the ~PdcpEntityBase compound with its
// TX/RX sides bound to the NR entity profiles (TS 38.323), i.e. NR-flavored
// statistics on the TX side and the multi-leg reorder window on the RX side.
// Selected by BearerManagement via its pdcpEntityModuleType parameter (set by
// NrNicUe/NrNicEnb, and on EN-DC master eNBs from the configuration).
//
module NrPdcpEntity extends PdcpEntityBase
{
    parameters:
        tx.typename = default("simu5g.stack.pdcp.NrPdcpTxEntity");
        rx.typename = default("simu5g.stack.pdcp.NrPdcpRxEntity");
}

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