NrUe

Package: simu5g.nodes

NrUe

compound module

Models a User Equipment (UE) for a 5G/LTE network. It extends the LteUe module by implementing a NrNicUe as a Network Interface Card (NIC) module. This module can be used to model a device that can connect to either a 4G eNodeB or a 5G gNodeB, or both.

interfaceTable : InterfaceTable
[from inet] ↗

Keeps the table of network interfaces.

Source:
interfaceTable: InterfaceTable {
    @display("p=127,257;is=s");
} mobility : like IMobility

StationaryMobility [from inet] ↗: This mobility module does nothing; it can be used for stationary nodes.

IMobility [from inet] ↗: The module interface for mobility models.

Source:
mobility: <default("StationaryMobility")> like IMobility {
    @display("p=127,172;is=s");
}

        //# layer submodules (must be ordered from lower to upper layers) lo[numLoInterfaces] : like ILoopbackInterface

LoopbackInterface [from inet] ↗: This module implements a loopback network interface.

ILoopbackInterface [from inet] ↗: This module interface is implemented by loopback network interfaces.

Source:
lo[numLoInterfaces]: <default("LoopbackInterface")> like ILoopbackInterface {
    parameters:
        @display("p=503,590,row,150");
} cellularNic : like ICellularNic

ICellularNic: Interface for the 3GPP Stack.

Source:
cellularNic: <default(hasD2D ? "LteNicUeD2D" : "LteNicUe")> like ICellularNic {
    nodeType = parent.nodeType;
    @display("p=355,589");
} eth[numEthInterfaces] : like IEthernetInterface

IEthernetInterface [from inet] ↗: This module interface is implemented by Ethernet network interfaces.

Source:
eth[numEthInterfaces]: <default("ExtLowerEthernetInterface")> like IEthernetInterface {
    parameters:
        @display("p=674,590,row,150;q=txQueue");
} encap : like IEthernetLayer

EthernetEncapsulation [from inet] ↗: Performs Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation.

IEthernetLayer [from inet] ↗

Source:
encap: <default("EthernetEncapsulation")> like IEthernetLayer if typename != "" {
    parameters:
        registerProtocol = true;
        @display("p=674,500");
} ipv4 : like INetworkLayer

Ipv4NetworkLayer [from inet] ↗: Network layer of an IPv4 node.

INetworkLayer [from inet] ↗

Source:
ipv4: <default("Ipv4NetworkLayer")> like INetworkLayer if hasIpv4 {
    parameters:
        @display("p=375,376;q=queue");
} ipv6 : like INetworkLayer

Ipv6NetworkLayer [from inet] ↗: Represents an IPv6 network layer (L3).

INetworkLayer [from inet] ↗

Source:
ipv6: <default("Ipv6NetworkLayer")> like INetworkLayer if hasIpv6 {
    parameters:
        @display("p=525,376;q=queue");
} udp : like IUdp

IUdp [from inet] ↗: UDP protocol interface.

Source:
udp: <default(firstAvailableOrEmpty("Udp"))> like IUdp if hasUdp {
    parameters:
        @display("p=375,226");
} tcp : like ITcp

ITcp [from inet] ↗: Interface for TCP protocol implementations.

Source:
tcp: <default(firstAvailableOrEmpty("Tcp", "TcpLwip", "TcpNsc"))> like ITcp if hasTcp {
    parameters:
        @display("p=525,226");
} sctp : like ISctp

ISctp [from inet] ↗: Interface for SCTP protocol.

Source:
sctp: <default(firstAvailableOrEmpty("Sctp"))> like ISctp if hasSctp {
    parameters:
        @display("p=675,226");
} app[numApps] : like IApp

IApp [from inet] ↗: Generic application interface.

Source:
app[numApps]: <> like IApp {
    @display("p=374,72,row,140");
} at : MessageDispatcher
[from inet] ↗

This module connects multiple applications, protocols and interfaces with each other and...

Source:
at: MessageDispatcher {
    parameters:
        @display("p=550,146;b=600,5,,,,1");
} tn : MessageDispatcher
[from inet] ↗

This module connects multiple applications, protocols and interfaces with each other and...

Source:
tn: MessageDispatcher {
    parameters:
        @display("p=550,300;b=600,5,,,,1");
} nl : MessageDispatcher
[from inet] ↗

This module connects multiple applications, protocols and interfaces with each other and...

Source:
nl: MessageDispatcher {
    parameters:
        @display("p=550,446;b=600,5,,,,1");
} pcapRecorder[numPcapRecorders] : PcapRecorder
[from inet] ↗

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

Source:
pcapRecorder[numPcapRecorders]: PcapRecorder {
    @display("p=126,346,r,10");
} ueCollector : UeStatsCollector

Collects the radio network information of a LTE User Equipment (UE), which can be accessed by the...

Source:
ueCollector: UeStatsCollector if hasRniSupport {
    @display("p=126,588;is=s");
} nrUeCollector : NrUeStatsCollector

Collects the radio network information of a NR UE, which can be accessed by the ~RniService module...

Source:
nrUeCollector: NrUeStatsCollector if hasRniSupport {
    @display("p=127,506;is=s");
}

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.

Used in

Name Type Description
ExtClientServer_bgCells network

ExtClientServerExample with background cells instead of external ones: one gNodeB served by a Upf core, a router in front of the Upf, one NrUe, and numBgCells BackgroundCell cells. The router has no simulated peer: the host it talks to, and the applications on the NrUe, are configured in the ini file.

ExtClientServerExample network

One gNodeB served by a Upf core, a router in front of the Upf, and one NrUe. numExtCells ExtCell cells can be added as interferers. The router has no simulated peer: the host it talks to, and the applications on the NrUe, are configured in the ini file.

ExtMecAppExample network

One gNodeB and one MecHost hung off the same intermediate Upf, behind an anchor Upf that carries the Ualcmp and, behind it, the MecOrchestrator, plus one NrUe. Nothing here is external: which node talks to a real host, and over which interface, is configured in the ini file.

ExtServerExample network

One gNodeB served by a Upf core, a router in front of the Upf, and two NrUe terminals. numExtCells ExtCell cells can be added as interferers. The router has no simulated peer: the host it talks to, and the applications on the UEs, are configured in the ini file.

ExtUeAppExample network

One gNodeB and one MecHost hung off the same intermediate Upf, behind an anchor Upf that carries the Ualcmp and, behind it, the MecOrchestrator, plus one NrUe. Nothing here is external: which node talks to a real host, and over which interface, is configured in the ini file.

ExtUeAppMecAppExample network

One gNodeB and one MecHost hung off the same intermediate Upf, behind an anchor Upf that carries the Ualcmp and, behind it, the MecOrchestrator, plus one NrUe. Nothing here is external: which node talks to a real host, and over which interface, is configured in the ini file.

MultiCell_Standalone network

Two gNodeB cells served by a 5G core: the anchor Upf faces the data network (a router and a server), an intermediate Upf feeds both gNodeBs, and an X2 link joins them. numUe NrUe terminals attach, and numBgCells BackgroundCell cells can be added as interferers.

MultiCell_withSecondaryGnb network

The two-cell version of SingleCell_withSecondaryGnb: two eNodeB masters, each paired over X2 with its own gNodeB secondary, and a further X2 link between the two masters. Both eNodeBs connect to the EPC PgwStandard, which faces a router and a server; neither gNodeB has a core-network link. numUe NrUe terminals attach, and numBgCells BackgroundCell cells can be added as interferers.

MultiMecHost network

Two gNodeB cells, each on an intermediate Upf of its own with a MecHost hung off it, so every cell has its own MEC host. Both intermediate Upf nodes meet at the anchor Upf, which carries the Ualcmp and, behind it, the MecOrchestrator. An X2 link joins the two gNodeBs. numUe NrUe terminals attach, and numBgCells BackgroundCell cells can be added as interferers.

MultiMecHost_delay network

MultiMecHost with the two intermediate Upf nodes linked directly to each other, and with no X2 link between the gNodeBs. The length of that link -- and so its propagation delay -- follows the routersDelay parameter, which makes the distance between the two MEC hosts configurable.

MultiOperator network

Two operator networks side by side. Each has three gNodeB cells chained by X2, an intermediate Upf that feeds them and carries the operator's MecHost, an anchor Upf, and a Ualcmp with its MecOrchestrator. The two anchor Upf nodes meet at a shared router, the only node the operators have in common. numUe_A and numUe_B NrUe terminals attach to operator A and B respectively, and numBgCells BackgroundCell cells can be added as interferers.

RnisTest network

The topology of SingleMecHost -- one gNodeB and one MecHost on a shared intermediate Upf, with a Ualcmp and a MecOrchestrator behind the anchor Upf -- without its playground size parameters. numUes NrUe terminals attach to the gNodeB.

SingleCell_Standalone network

One gNodeB served by a 5G core: the anchor Upf faces the data network (a router and a server), and an intermediate Upf sits between it and the gNodeB. numUe NrUe terminals attach to the gNodeB, and numBgCells BackgroundCell cells can be added around it as interferers.

SingleCell_Standalone_D2D network

SingleCell_Standalone with its UEs split into three vectors, so that a configuration can address cellular terminals (ueCell), D2D transmitters (ueD2DTx) and D2D receivers (ueD2DRx) separately. The rest of the topology is the same: one gNodeB behind an intermediate and an anchor Upf, with a router and a server on the data network, plus numBgCells BackgroundCell interferers.

SingleCell_withSecondaryEnb network

The mirror image of SingleCell_withSecondaryGnb: here the gNodeB is the master node and the eNodeB is its secondary, so the UE is anchored on its NR stack and its LTE stack carries the secondary cell group. All data-plane traffic enters at the gNodeB.

SingleCell_withSecondaryGnb network

An EN-DC topology: an eNodeB master paired over X2 with a gNodeB secondary. The eNodeB is the only node with a core-network link -- an EPC PgwStandard facing a router and a server -- so all data-plane traffic enters there, and the gNodeB contributes its radio leg alone. numUe NrUe terminals attach to both, and numBgCells BackgroundCell cells can be added as interferers.

SingleMecHost network

One gNodeB and one MecHost hung off the same intermediate Upf, behind an anchor Upf that carries the Ualcmp and, behind it, the MecOrchestrator. numUes NrUe terminals attach to the gNodeB.

UrbanNetwork network (no description)

Known subclasses

Name Type Description
NrCar compound module

Defines a LteCar node as an NR User Equipment (UE) with vehicular-like mobility. The latter is modeled by utilizing the Veins-Inet project.

Extends

Name Type Description
LteUe compound module

Models a User Equipment (UE) in a 4G LTE network. It is a host equipped with an LTE Network Interface Card (NIC), allowing the UE to connect to an eNodeB module via the Radio Access Network (RAN) of the LTE network and communicate with any other host in the system. In addition to a NIC submodule, this compound module includes all the higher layers of the protocol stack, from IP to application modules. It supports a configurable number of UDP and TCP applications. It also features an Ethernet interface, which is utilized in real-time emulation mode to connect the UE to the real network (outside the simulator) via a virtual Ethernet interface.

Parameters

Name Type Default value Description
numApps int 0
hasUdp bool firstAvailableOrEmpty("Udp") != ""
hasTcp bool firstAvailableOrEmpty("Tcp", "TcpLwip", "TcpNsc") != ""
hasSctp bool false
nodeType string "UE"
servingNodeId int 0

The initial serving eNodeB of the UE; 0 if none

macNodeId int 1025+simu5g_seq("LteUe_macNodeId")
hasD2D bool false
hasIpv4 bool true
hasIpv6 bool false
numEthInterfaces int 0
extHostAddress string ""
numLoInterfaces int 1
numPcapRecorders int 0
hasRniSupport bool false
nrServingNodeId int 0

The initial serving gNodeB of the UE; 0 if none

nrMacNodeId int 2049+simu5g_seq("NrUe_macNodeId")

Properties

Name Value Description
networkNode
display i=device/pocketpc;bgb=858,659

Gates

Name Direction Size Description
radioIn input

Connection to master

nrRadioIn input

Connection to master

Unassigned submodule parameters

Name Type Default value Description
interfaceTable.displayAddresses bool false

whether to display IP addresses on links

eth.bitrate double
at.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

at.forwardServiceRegistration bool true
at.forwardProtocolRegistration bool true
tn.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

tn.forwardServiceRegistration bool true
tn.forwardProtocolRegistration bool true
nl.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

nl.forwardServiceRegistration bool true
nl.forwardProtocolRegistration bool true
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.moduleNamePatterns string "wlan[*] eth[*] ppp[*]"

space-separated list of sibling module names to listen on

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"

Source code

//
// Models a User Equipment (UE) for a 5G/LTE network. It extends the ~LteUe module
// by implementing a ~NrNicUe as a Network Interface Card (NIC) module. This module can be
// used to model a device that can connect to either a 4G eNodeB or a 5G gNodeB, or both.
//
module NrUe extends LteUe
{
    parameters:
        cellularNic.typename = default(hasD2D ? "NrNicUeD2D" : "NrNicUe");

        int nrServingNodeId = default(0); // The initial serving gNodeB of the UE; 0 if none
        int nrMacNodeId = default(2049+simu5g_seq("NrUe_macNodeId"));

        cellularNic.nrMac.collectorModule = hasRniSupport ? "^.^.nrUeCollector" : "";
        cellularNic.rrc.nrHandoverController.hasCollector = hasRniSupport;
    gates:
        input nrRadioIn @directIn;     // Connection to master

    submodules:
        //# UeStatsCollector - for MEC
        nrUeCollector: NrUeStatsCollector if hasRniSupport {
            @display("p=127,506;is=s");
        }

    connections allowunconnected:

        cellularNic.nrRadioIn <-- nrRadioIn;
}
File: src/simu5g/nodes/NrUe.ned