LteNicBase

Package: simu5g.stack

LteNicBase

compound module

The LteNicBase module serves as the foundational building block for LTE networking in Simu5G. It integrates protocols for LTE communication, including PDCP, RLC, MAC, and PHY layers. This base module allows higher-level modules, such as User Equipment (UE) and eNodeB (evolved Node B), to configure and utilize these layers according to their specific requirements.

The PDCP and RLC entities are missing from the submodules on purpose: the RRC layer's BearerManagement creates them per bearer at run time.

pcapRecorder[numPcapRecorders] : PcapRecorder
[from inet] ↗

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 [from inet] ↗: This module interface is implemented by clock models.

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

IHandoverPacketHolder: Manages packet buffering/tunnelling during handover

Source:
handoverPacketHolder: <> like IHandoverPacketHolder {
    @display("p=440,50;is=s");
} ip2nic : like INetworkLayer2CellularNic

Ip2Nic: Bridges the IP network layer and the cellular protocol stack, handling bidirectional packet flow.

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

Source:
ip2nic: <default("Ip2Nic")> like INetworkLayer2CellularNic {
    nodeType = parent.nodeType;
    @display("p=310,120");
} rrc : like IRrc

Rrc: RRC (Radio Resource Control) layer for LTE/NR networks.

IRrc: Interface for the RRC (Radio Resource Control) layer of the LTE/NR Stack.

Source:
rrc: <default("Rrc")> like IRrc {
    @display("p=80,60,col;g=left");
} pdcpMux : like IPdcpMux

PdcpMux: Upper-layer PDCP packet dispatcher.

IPdcpMux: Module interface for the upper-layer PDCP packet dispatcher of a cellular NIC (see ~PdcpMux for the...

Source:
pdcpMux: <default("PdcpMux")> like IPdcpMux {
    @display("p=310,190;is=s");
} rlcMux : like IRlcMux

RlcMux: Lower-layer RLC packet dispatcher.

IRlcMux: Module interface for the lower-layer RLC packet dispatcher of a cellular NIC (see ~RlcMux for the...

Source:
rlcMux: <default("RlcMux")> like IRlcMux {
    @display("p=310,430;is=s");
} mac : like ILteMac

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

Source:
mac: <> like ILteMac {
    @display("p=310,510");
} phy : like IPhy

IPhy: Interface for the Physical (PHY) layer of the LTE/NR protocol stack.

Source:
phy: <> like IPhy {
    @display("p=310,600");
} channelModel[numCarriers] : like IChannelModel

IChannelModel: Provides the interface for modules implementing the model of the radio channel.

Source:
channelModel[numCarriers]: <channelModelType> like IChannelModel {
    @display("p=80,60,col;g=left");
} packetFlowObserver : like IPacketFlowObserver

Source:
packetFlowObserver: <default("")> like IPacketFlowObserver if hasRniSupport {
    @display("p=80,60,col;g=left");
}

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.

Known subclasses

Name Type Description
LteNicEnb compound module

The LteNicEnb module is a network interface that provides LTE connectivity within an eNodeB. It implements the data and signaling planes of the LTE stack, which includes the PDCP, RLC, MAC, and PHY layers. The parameters and submodules allow customization of the eNodeB's behavior, including whether it supports D2D communication, CoMP (Coordinated MultiPoint), or dual connectivity.

LteNicUe compound module

The LteNicUe module is a network interface that provides LTE connectivity within a UE (User Equipment). It implements the data and signaling planes of the LTE stack, which includes PDCP, RLC, MAC, and PHY layers. The parameters and submodules allow customization of the UE's behavior.

Extends

Name Type Description
NetworkInterface compound module

This module serves as the base module for all network interfaces.

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

channelModelType string "StochasticChannelModel"
dualConnectivityEnabled bool false
numCarriers int 1
address string "auto"

Properties

Name Value Description
networkInterface
lifecycleSupport
class NonlayoutingNetworkInterface
display i=block/ifcard;bgb=800,650;bgl=3

Gates

Name Direction Size Description
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.isNr bool
rlcMux.bearerManagementModule string
packetFlowObserver.macModule string
packetFlowObserver.pdcpModule string
packetFlowObserver.rlcModule string
packetFlowObserver.isNrObserver bool
packetFlowObserver.pfmType string

Source code

//
// The LteNicBase module serves as the foundational building block for LTE networking
// in Simu5G. It integrates protocols for LTE communication, including PDCP, RLC, MAC,
// and PHY layers. This base module allows higher-level modules, such as User Equipment (UE)
// and eNodeB (evolved Node B), to configure and utilize these layers according to their
// specific requirements.
//
// The PDCP and RLC entities are missing from the submodules on purpose: the RRC
// layer's ~BearerManagement creates them per bearer at run time.
//
module LteNicBase extends NetworkInterface like ICellularNic
{
    parameters:
        @class(NonlayoutingNetworkInterface);
        @display("i=block/ifcard;bgb=800,650;bgl=3");
        bool isWireless = true;
        string interfaceTableModule;
        string routingTableModule;

        bool hasRniSupport = default(false);

        string nodeType;
        double processingDelayIn @unit(s) = default(0s);   // Additional processing delay for incoming ip packets
        double processingDelayOut @unit(s) = default(0s);   // Additional processing delay for outgoing ip packets

        string channelModelType = default("StochasticChannelModel");

        bool dualConnectivityEnabled = default(false);
        int numCarriers = default(1);

        string address @mutable = default("auto");
        // The LTE leg's modules take their MacNodeId from the node
        phy.macNodeId = parent.macNodeId;
        mac.macNodeId = parent.macNodeId;
        *.interfaceTableModule = default(absPath(this.interfaceTableModule));
        *.routingTableModule = default(absPath(this.routingTableModule));
        **.dualConnectivityEnabled = default(this.dualConnectivityEnabled);

    gates:
        //# Gates connecting UE/eNB and LTE Stack
        //# Control Ports
        input upperLayerIn;
        output upperLayerOut;
        input radioIn @loose;  // To receive messages sent using sendDirect()
        input nrRadioIn @loose;// For NR support
        inout x2[] @loose;     // Optional X2 manager

    submodules:
        // handover helper, performs packet holding / forwarding
        handoverPacketHolder: <> like IHandoverPacketHolder {
            @display("p=440,50;is=s");
        }
        // bridge between radio nic and network layer
        ip2nic: <default("Ip2Nic")> like INetworkLayer2CellularNic {
            nodeType = parent.nodeType;
            @display("p=310,120");
        }
        // RRC Layer
        rrc: <default("Rrc")> like IRrc {
            @display("p=80,60,col;g=left");
        }
        // PDCP submodules (flattened from former PdcpLayer compound)
        pdcpMux: <default("PdcpMux")> like IPdcpMux {
            @display("p=310,190;is=s");
        }
        // RLC submodules (flattened from former LteRlc compound)
        rlcMux: <default("RlcMux")> like IRlcMux {
            @display("p=310,430;is=s");
        }
        // MAC Layer
        mac: <> like ILteMac {
            @display("p=310,510");
        }
        // PHY submodule
        phy: <> like IPhy {
            @display("p=310,600");
        }

        channelModel[numCarriers]: <channelModelType> like IChannelModel {
            @display("p=80,60,col;g=left");
        }

        //# Modules used to take trace of PDCP pkt flow
        packetFlowObserver: <default("")> like IPacketFlowObserver if hasRniSupport {
            @display("p=80,60,col;g=left");
        }

    connections allowunconnected:
        handoverPacketHolder.stackOut --> ip2nic.upperLayerIn;
        ip2nic.stackOut --> pdcpMux.upperLayerIn;
        ip2nic.stackIn <-- pdcpMux.upperLayerOut;

        //# Internal LTE Stack Connections

        //# RLC <-> MAC
        rlcMux.macOut --> mac.upperLayerIn;
        rlcMux.macIn <-- mac.upperLayerOut;

        //# Connections from LTE Stack to radio interface
        mac.phyOut --> phy.upperGateIn;
        mac.phyIn <-- phy.upperGateOut;

        //# external: lower connection
        radioIn --> phy.radioIn;
        ip2nic.upperLayerOut --> {  delay = parent.processingDelayOut; } --> upperLayerOut;
        upperLayerIn --> {  delay = parent.processingDelayIn; } --> handoverPacketHolder.upperLayerIn;
}

File: src/simu5g/stack/LteNicBase.ned