NRNicUe

Package: simu5g.stack

NRNicUe

compound module

This module defines a User Equipment (UE) network interface card that supports both LTE and NR (New Radio) technologies. It extends the LteNicUeD2D module by adding additional submodules and parameters to support NR-specific functionalities.

pcapRecorder[numPcapRecorders] : PcapRecorder

Records PCAP traces of frames sent/received by other modules within the same host.

Source:
pcapRecorder[numPcapRecorders]: PcapRecorder {
    parameters:
        moduleNamePatterns = ".^";
        @display("p=100,100;is=s");
} clock : like IClock

IClock: This module interface is implemented by clock models.

Source:
clock: <default("")> like IClock if typename != "" {
    parameters:
        @display("p=100,200;is=s");
} ip2nic : like INetworkLayer2CellularNic

IP2Nic: The IP2Nic module acts as a bridge between the IP network layer and the cellular (LTE/NR) protocol...

INetworkLayer2CellularNic: The INetworkLayer2CellularNic module interface serves as an intermediary between the network layer...

Source:
ip2nic: <default("IP2Nic")> like INetworkLayer2CellularNic {
    nodeType = parent.nodeType;
    @display("p=412,67");
} pdcpRrc : like ILtePdcpRrc

ILtePdcpRrc: Interface for the PDCP/RRC layer of the LTE Stack.

Source:
pdcpRrc: <> like ILtePdcpRrc {
    @display("p=362,141");
} rlc : LteRlc

The LteRlc module implements the functionalities of the Radio Link Control (RLC) layer.

Source:
rlc: LteRlc {
    @display("p=362,226");
    d2dCapable = parent.d2dCapable;
    *.macModule = "^.^.mac";
    *.packetFlowManagerModule = parent.hasRNISupport ? "^.^.packetFlowManager" : "";
    um.nodeType = parent.nodeType;
} mac : like ILteMac

ILteMac: Interface for the Medium Access Control (MAC) layer of the LTE Stack.

Source:
mac: <> like ILteMac {
    @display("p=363,314");
} phy : like ILtePhy

ILtePhy: Interface for the Physical (PHY) layer of the LTE stack.

Source:
phy: <> like ILtePhy {
    @display("p=363,389");
} channelModel[numCarriers] : like ILteChannelModel

ILteChannelModel: This module provides the interface for modules implementing the model of the radio channel.

Source:
channelModel[numCarriers]: <LteChannelModelType> like ILteChannelModel {
    @display("p=100,389");
}

         		//# packetFlowManager : like IPacketFlowManager

Source:
packetFlowManager: <default("")> like IPacketFlowManager if hasRNISupport {
    @display("p=70,300");
} dlFbGen : LteDlFeedbackGenerator

This is the Lte Downlink Feedback Generator.

Source:
dlFbGen: LteDlFeedbackGenerator {
    @display("p=50,50;is=s");
} nrRlc : LteRlc

The LteRlc module implements the functionalities of the Radio Link Control (RLC) layer.

Source:
nrRlc: LteRlc {
    @display("p=466,226");
    d2dCapable = parent.d2dCapable;
    *.macModule = "^.^.nrMac";
    *.packetFlowManagerModule = parent.hasRNISupport ? "^.^.nrPacketFlowManager" : "";
    um.nodeType = parent.nodeType;
} nrMac : like ILteMac

NRMacUe: This module provides functionalities for the Medium Access Control (MAC) of the New Radio (NR)...

ILteMac: Interface for the Medium Access Control (MAC) layer of the LTE Stack.

Source:
nrMac: <default("NRMacUe")> like ILteMac {
    @display("p=466,314");
} nrPhy : like ILtePhy

NRPhyUe: This module provides the functionalities for the Physical (PHY) layer of the New Radio (NR)...

ILtePhy: Interface for the Physical (PHY) layer of the LTE stack.

Source:
nrPhy: <default("NRPhyUe")> like ILtePhy {
    @display("p=466,389");
} nrChannelModel[numNRCarriers] : like ILteChannelModel

ILteChannelModel: This module provides the interface for modules implementing the model of the radio channel.

Source:
nrChannelModel[numNRCarriers]: <NRChannelModelType> like ILteChannelModel {
    @display("p=232,389");
} nrDlFbGen : LteDlFeedbackGenerator

This is the Lte Downlink Feedback Generator.

Source:
nrDlFbGen: LteDlFeedbackGenerator {
    @display("p=144,50;is=s");
    phyModule = "^.nrPhy";
}
 		//# nrPacketFlowManager : like IPacketFlowManager

NRPacketFlowManagerUe: This simple module represents the Packet Flow Manager for User Equipment (UE) in an NR (New Radio)...

Source:
nrPacketFlowManager: <default("NRPacketFlowManagerUe")> like IPacketFlowManager if hasRNISupport {
    @display("p=200,300");
}

Usage diagram

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram

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

Extends

Name Type Description
LteNicUeD2D compound module

This module represents a Device-to-Device (D2D) capable User Equipment (UE) network interface. It extends the basic LTE UE functionality by adding D2D communication capabilities, allowing direct communication between UEs without the need to route traffic through the base station.

Parameters

Name Type Default value Description
displayStringTextFormat string "%a (%i)\n%m"
recordPcap bool false
numPcapRecorders int recordPcap ? 1 : 0
isWireless bool true
interfaceTableModule string
routingTableModule string
hasRNISupport bool false
nodeType string
processingDelayIn double 0s

additional processing delay for incoming ip packets

processingDelayOut double 0s

additional processing delay for outgoing ip packets

LteChannelModelType string "LteRealisticChannelModel"
d2dCapable bool true

inherit the value from the parent module

dualConnectivityEnabled bool false
numCarriers int 1
address string "auto"
d2dInitialMode bool false
NRChannelModelType string "NRChannelModel_3GPP38_901"
numNRCarriers int 1

Properties

Name Value Description
networkInterface
lifecycleSupport
class ::inet::NetworkInterface
display bgb=694,443

Gates

Name Direction Size Description
EUTRAN_RRC_Sap inout
upperLayerIn input
upperLayerOut output
radioIn input

to receive messages sent using sendDirect()

nrRadioIn input

for NR support

x2 [ ] inout

optional x2 manager

Signals

Name Type Unit Description
packetDropped inet::Packet

Statistics

Name Title Source Record Unit Interpolation Mode Description
packetDropInterfaceDown packet drops: interface down packetDropReasonIsInterfaceDown(packetDropped) count, sum(packetBytes), vector(packetBytes) none
packetDropNoCarrier packet drops: no carrier packetDropReasonIsNoCarrier(packetDropped) count, sum(packetBytes), vector(packetBytes) none

Unassigned submodule parameters

Name Type Default value Description
pcapRecorder.verbose bool true

whether to log packets on the module output

pcapRecorder.pcapFile string ""

the PCAP file to be written

pcapRecorder.fileFormat string "pcapng"
pcapRecorder.snaplen int 65535

maximum number of bytes to record per packet

pcapRecorder.dumpBadFrames bool true

enable dump of frames with hasBitError

pcapRecorder.sendingSignalNames string "packetSentToLower"

space-separated list of outbound packet signals to subscribe to

pcapRecorder.receivingSignalNames string "packetReceivedFromLower"

space-separated list of inbound packet signals to subscribe to

pcapRecorder.dumpProtocols string "ethernetmac ppp ieee80211mac"

space-separated list of protocol names as defined in the Protocol class

pcapRecorder.packetFilter object "*"

which packets are considered, matches all packets by default

pcapRecorder.helpers string ""

usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype currently available: "inet::AckingMacToEthernetPcapRecorderHelper"

pcapRecorder.alwaysFlush bool false

flush the pcapFile after each write to ensure that all packets are captured in case of a crash

pcapRecorder.displayStringTextFormat string "rec: %n pks"
ip2nic.interfaceTableModule string
ip2nic.routingTableModule string
pdcpRrc.headerCompressedSize int
rlc.tm.queueSize int 2MiB

RLC SDU queue size (0: unlimited)

rlc.um.queueSize int
rlc.um.mapAllLcidsToSingleBearer bool
packetFlowManager.macModule string
packetFlowManager.pfmType string
dlFbGen.feedbackType string "ALLBANDS"

can be ALLBANDS, PREFERRED, WIDEBAND

dlFbGen.rbAllocationType string "localized"

resource allocation type ("distributed" or "localized")

dlFbGen.fbPeriod int 6tti

period for Periodic feedback in TTI

dlFbGen.fbDelay int 1tti

time interval between sensing and transmission in TTI

dlFbGen.usePeriodic bool true

true if we want to use also periodic feedback

dlFbGen.initialTxMode string "SINGLE_ANTENNA_PORT0"

initial txMode (see LteCommon.h) SINGLE_ANTENNA_PORT0,SINGLE_ANTENNA_PORT5,TRANSMIT_DIVERSITY,OL_SPATIAL_MULTIPLEXING, CL_SPATIAL_MULTIPLEXING,MULTI_USER,

dlFbGen.feedbackGeneratorType string "IDEAL"

Type of generator: IDEAL, REAL, DAS_AWARE IDEAL: feedback generator reports feedback for each txmode and for each rus REAL: feedback generator reports feedback only for the last txmode used but for each rus DAS_AWARE: feedback generator reports feedback only for the last txmode used and only for rus in Antenna set

dlFbGen.binderModule string "binder"
dlFbGen.phyModule string "^.phy"
nrRlc.tm.queueSize int 2MiB

RLC SDU queue size (0: unlimited)

nrRlc.um.queueSize int
nrRlc.um.mapAllLcidsToSingleBearer bool
nrDlFbGen.feedbackType string "ALLBANDS"

can be ALLBANDS, PREFERRED, WIDEBAND

nrDlFbGen.rbAllocationType string "localized"

resource allocation type ("distributed" or "localized")

nrDlFbGen.fbPeriod int 6tti

period for Periodic feedback in TTI

nrDlFbGen.fbDelay int 1tti

time interval between sensing and transmission in TTI

nrDlFbGen.usePeriodic bool true

true if we want to use also periodic feedback

nrDlFbGen.initialTxMode string "SINGLE_ANTENNA_PORT0"

initial txMode (see LteCommon.h) SINGLE_ANTENNA_PORT0,SINGLE_ANTENNA_PORT5,TRANSMIT_DIVERSITY,OL_SPATIAL_MULTIPLEXING, CL_SPATIAL_MULTIPLEXING,MULTI_USER,

nrDlFbGen.feedbackGeneratorType string "IDEAL"

Type of generator: IDEAL, REAL, DAS_AWARE IDEAL: feedback generator reports feedback for each txmode and for each rus REAL: feedback generator reports feedback only for the last txmode used but for each rus DAS_AWARE: feedback generator reports feedback only for the last txmode used and only for rus in Antenna set

nrDlFbGen.binderModule string "binder"
nrPacketFlowManager.macModule string
nrPacketFlowManager.pfmType string

Source code

//
// This module defines a User Equipment (UE) network interface card that
// supports both LTE and NR (New Radio) technologies. It extends the
// LteNicUeD2D module by adding additional submodules and parameters to
// support NR-specific functionalities.
//
module NRNicUe extends LteNicUeD2D
{
    parameters:
        string NRChannelModelType = default("NRChannelModel_3GPP38_901");

        packetFlowManager.typename = default("PacketFlowManagerUe");

        int numNRCarriers = default(1);

        pdcpRrc.typename = default("NRPdcpRrcUe");
        phy.typename = default("NRPhyUe");	        // TODO fix this
        											// LtePhy is of type NRPhyUe so that it is
        											// be aware of the existing of the second
        											// PHY layer (needed at handover)

        @display("bgb=694,443");
        nrPhy.rlcUmModule = "^.nrRlc.um";
        nrPhy.otherPhyModule = "^.phy";
        nrPhy.channelModelModule = "^.nrChannelModel[0]";
        nrPhy.feedbackGeneratorModule = "^.nrDlFbGen";
        nrMac.packetFlowManagerModule = hasRNISupport ? "^.nrPacketFlowManager" : "";
        phy.otherPhyModule = "^.nrPhy";

    submodules:
        // RLC Layer
        nrRlc: LteRlc {
            @display("p=466,226");
            d2dCapable = parent.d2dCapable;
            *.macModule = "^.^.nrMac";
            *.packetFlowManagerModule = parent.hasRNISupport ? "^.^.nrPacketFlowManager" : "";
            um.nodeType = parent.nodeType;
        }
        // MAC Layer
        nrMac: <default("NRMacUe")> like ILteMac {
            @display("p=466,314");
        }
        // PHY Layer
        nrPhy: <default("NRPhyUe")> like ILtePhy {
            @display("p=466,389");
        }
        // NR Channel Model
        nrChannelModel[numNRCarriers]: <NRChannelModelType> like ILteChannelModel {
            @display("p=232,389");
        }

        // Feedback generator submodule
        nrDlFbGen: LteDlFeedbackGenerator {
            @display("p=144,50;is=s");
            phyModule = "^.nrPhy";
        }
 		//#
        //# Modules used to take trace of PDCP pkt flow
        //#
        nrPacketFlowManager: <default("NRPacketFlowManagerUe")> like IPacketFlowManager if hasRNISupport {
            @display("p=200,300");
        }

    connections:

        //# PDCP <-> RLC
        pdcpRrc.UM_Sap++ <--> nrRlc.UM_Sap;
        pdcpRrc.AM_Sap++ <--> nrRlc.AM_Sap;
        pdcpRrc.TM_Sap++ <--> nrRlc.TM_Sap;

        //# RLC <-> MAC
        nrRlc.RLC_to_MAC --> nrMac.RLC_to_MAC;
        nrRlc.MAC_to_RLC <-- nrMac.MAC_to_RLC;

        //#
        //# Connections from LTE Stack to radio interface
        //#
        nrMac.MAC_to_PHY --> nrPhy.upperGateIn;
        nrMac.PHY_to_MAC <-- nrPhy.upperGateOut;

        //# external: lower connection
        nrRadioIn --> nrPhy.radioIn;
}
File: src/stack/NRNicUe.ned