This release continues the architectural overhaul of Simu5G. Major themes include consolidating Control Plane functions under the RRC module, adding QoS support via DRBs and the SDAP protocol, restructuring Ip2Nic and other modules for cleaner architecture, and improving type safety throughout the codebase.
Tested with INET-4.5.4 and OMNeT++ 6.3, compatible with INET-4.6.0 and OMNeT++ 6.1 through 6.4.
More explicit Control Plane modeling
Continuing the direction set in v1.4.3, code fragments that implement pieces of
the 3GPP Control Plane have been identified throughout the codebase and collected
under the Rrc module. Rrc is now a compound module with the following
submodules:
-
BearerManagement: The former simple
Rrcmodule, renamed and extended.
It now owns the lifecycle (creation, deletion, lookup) of all PDCP and RLC
entities. Previously, entity management was scattered across the monolithic
PDCP module and theLteRlcUm/LteRlcAmmodules. -
Registration: Node registration and deregistration logic, previously
embedded inIp2Nic, was moved here. -
HandoverController: Handover decision and execution logic was extracted
fromLtePhyUeinto this new module. This is architecturally more correct,
as handover is an RRC function, not PHY. The internal "handover packet"
misnomer was corrected to "beacon" (HANDOVERPKT->BEACONPKT,
broadcastMessageInterval->beaconInterval). Several parameters were
exposed as NED parameters (hysteresisFactor,handoverDetachmentTime,
isNr). -
D2DModeController: D2D mode selection was moved here from the former
stack/d2dModeSelection/directory, and D2D peer tracking from
LteRlcUmD2D.
QoS support: SDAP, DRBs and per-bearer PDCP/RLC entities
QoS (Quality of Service) support was added through Data Radio Bearers (DRBs)
and the SDAP (Service Data Adaptation Protocol) layer, which is part of the 5G
NR protocol stack. The code is based on a contribution by Mohamed Seliem
(University College Cork); see releases v1.4.1-sdap and v1.4.1-sdap-2 for
details. In this release, the code was substantially reworked and integrated
into the main codebase.
In accordance with the 3GPP architecture, the PDCP and RLC layers were
transformed so that they purely consist of per-DRB entities, created and
configured by BearerManagement (RRC). Each DRB has dedicated PDCP TX/RX and
RLC TX/RX entity modules, wired directly to each other via per-bearer gate
connections.
Details:
-
SDAP protocol layer: An SDAP implementation was added, providing
QFI-to-DRB routing with a JSON-configuredDrbTable. The SDAP layer is
optional in NR NICs (enabled viahasSdap=true). -
QFI propagation via GTP-U: QFI is set by the application via DSCP,
picked up byTrafficFlowFilter/UPF, carried in the GTP-U protocol header
(mirroring the 3GPP PDU Session Container extension header), and extracted
by the gNB for SDAP routing. -
QoS-aware proportional fairness scheduler: A
QoSAwareSchedulerwas
added to MAC, supporting QFI-based scheduling with configurable weight
constants. Enable withLteMacEnb.schedulingDisciplineDl/Ul = "QOS_PF". -
DRB configuration in JSON: DRB configuration is split between SDAP
(sdap.drbConfigfor QFI-to-DRB routing) and MAC (mac.drbQosConfigfor
QoS scheduler parameters), both in JSON format. -
Non-IP PDU session support: SDAP was generalized for non-IP PDU session
types, withPduSessionTypeenum andupperProtocolin DRB configuration. -
PDCP refactored into per-bearer entities: The former monolithic PDCP
module (which had six subclass variants for LTE/NR × UE/eNB/D2D) was
replaced with per-bearerPdcpTxEntityandPdcpRxEntitymodules, plus
PdcpMuxfor upper-layer routing andDcMuxfor Dual Connectivity X2
forwarding. Bypass entities handle the DC secondary leg. Entities communicate
via OMNeT++ gates, not C++ method calls. -
RLC refactored into per-bearer entities: The former
LteRlccompound
module (containingLteRlcUm/LteRlcUmD2D,LteRlcAm,LteRlcTm) was
replaced with per-bearer TX/RX entity modules for all three RLC modes (UM,
AM, TM), plusRlcMuxfor MAC↔entity routing. -
PDCP↔RLC directly wired: PDCP and RLC entities are connected directly
via per-bearer gates. All submodules now reside directly at NIC level -- the
formerPdcpLayerandLteRlccompound modules no longer exist. -
Example simulations:
simulations/nr/standalone_drb/with
multi-UE, multi-QFI configurations.
Ip2Nic decomposed, further module architecture improvements
The Ip2Nic module, which had accumulated various unrelated responsibilities
over time, was decomposed. Several code fragments were factored out into
separate modules:
-
analyzePacket()moved to Ip2Nic from PDCP: Packet classification
(fillingFlowControlInfotags) was moved to where it logically belongs --
at the IP-to-NIC boundary. TheIpFlowIndtag was eliminated. RLC type NED
parameters (conversationalRlc, etc.) also moved from PDCP toIp2Nic. -
HandoverPacketHolderUe/Enb: Handover packet buffering was factored out
ofIp2Nicinto separate modules. X2 tunneled packets are now received via
gates instead of C++ method calls. -
TechnologyDecision: Dual Connectivity technology selection logic was
extracted into a separate, configurable module that uses NED expressions.
Further module architecture improvements:
-
MAC turned into compound module: MAC is now a compound module with
AMC
and DL/ULScheduleras propercSimpleModulesubmodules (previously
created vianewin C++). They perform their own staged initialization. -
UPF and PgwStandard now derive from INET's
ApplicationLayerNodeBase. -
PacketFlowObserver refactored to use OMNeT++ signals: Direct C++ calls
from PDCP, RLC, and MAC intoPacketFlowObserverwere replaced with
OMNeT++ signals, fully decoupling the observer from protocol modules. -
Replaced method-call-based packet passing with gate connections in several
places:LteHandoverManager,DualConnectivityManager,Ip2Nic(X2 path).
Type safety improvements
-
Strong typedefs:
SIMU5G_STRONG_TYPEDEFmacro applied toMacNodeId,
DrbId,LogicalCid, andQfi, preventing accidental mixing of ID types. -
Direction enum:
LteControlInfo.directionchanged fromunsigned short
to a properDirectionenum. -
C++ types extracted: Types previously defined in
LteCommon.msgwere
moved into a dedicatedLteTypes.hheader. -
ROHC header: PDCP header compression now uses a proper ROHC header
representation instead of simply truncating the IP header. -
FlowControlInfo:lcidfield renamed todrbId.
Naming and layout cleanup
-
Gate renames throughout the NIC for clarity and consistency:
MAC_to_RLC/RLC_to_MAC->upperLayerIn/upperLayerOutand
macIn/macOut;MAC_to_PHY/PHY_to_MAC->phyOut/phyIn;
filterGate->dnPppg. Severalinoutgates split into separateinput
andoutputgates. -
Submodule renames:
pdcpUpperMux->pdcpMux,rlcLowerMux->rlcMux,
pppIf->dpPpp(in UPF/PGW). -
Module renames:
DualConnectivityManager->DcX2Forwarder,
LteHandoverManager->HandoverX2Forwarder. -
Improved NED layout of NIC internals for better visualization in Qtenv:
data-path modules arranged vertically, control-plane modules on the left
edge, dynamically created PDCP/RLC entities positioned between muxes.
Bug fixes
LteSchedulerEnb: Fixed multi-UE starvation in multi-DRB scheduling.
Other
-
Added
tilxfingerprints (resistant to module renames) to the fingerprint
test suite. Fingerprint test coverage for MEC simulations improved. -
SplitBearersTableturned intostd::ordered_map.