|
1 | 1 | # What's New in Simu5G |
2 | 2 |
|
| 3 | +## v1.5.0 (2026-04-16) |
| 4 | + |
| 5 | +This release continues the architectural overhaul of Simu5G. Major themes |
| 6 | +include consolidating Control Plane functions under the RRC module, adding QoS |
| 7 | +support via DRBs and the SDAP protocol, restructuring Ip2Nic and other modules |
| 8 | +for cleaner architecture, and improving type safety throughout the codebase. |
| 9 | + |
| 10 | +Tested with INET-4.5.4 and OMNeT++ 6.3. |
| 11 | + |
| 12 | +### More explicit Control Plane modeling |
| 13 | + |
| 14 | +Continuing the direction set in v1.4.3, code fragments that implement pieces of |
| 15 | +the 3GPP Control Plane have been identified throughout the codebase and collected |
| 16 | +under the `Rrc` module. `Rrc` is now a compound module with the following |
| 17 | +submodules: |
| 18 | + |
| 19 | +- **BearerManagement**: The former simple `Rrc` module, renamed and extended. |
| 20 | + It now owns the lifecycle (creation, deletion, lookup) of all PDCP and RLC |
| 21 | + entities. Previously, entity management was scattered across the monolithic |
| 22 | + PDCP module and the `LteRlcUm`/`LteRlcAm` modules. |
| 23 | + |
| 24 | +- **Registration**: Node registration and deregistration logic, previously |
| 25 | + embedded in `Ip2Nic`, was moved here. |
| 26 | + |
| 27 | +- **HandoverController**: Handover decision and execution logic was extracted |
| 28 | + from `LtePhyUe` into this new module. This is architecturally more correct, |
| 29 | + as handover is an RRC function, not PHY. The internal "handover packet" |
| 30 | + misnomer was corrected to "beacon" (`HANDOVERPKT` → `BEACONPKT`, |
| 31 | + `broadcastMessageInterval` → `beaconInterval`). Several parameters were |
| 32 | + exposed as NED parameters (`hysteresisFactor`, `handoverDetachmentTime`, |
| 33 | + `isNr`). |
| 34 | + |
| 35 | +- **D2DModeController**: D2D mode selection was moved here from the former |
| 36 | + `stack/d2dModeSelection/` directory, and D2D peer tracking from |
| 37 | + `LteRlcUmD2D`. |
| 38 | + |
| 39 | +### QoS support: SDAP, DRBs and per-bearer PDCP/RLC entities |
| 40 | + |
| 41 | +QoS (Quality of Service) support was added through Data Radio Bearers (DRBs) |
| 42 | +and the SDAP (Service Data Adaptation Protocol) layer, which is part of the 5G |
| 43 | +NR protocol stack. The code is based on a contribution by Mohamed Seliem |
| 44 | +(University College Cork); see releases v1.4.1-sdap and v1.4.1-sdap-2 for |
| 45 | +details. In this release, the code was substantially reworked and integrated |
| 46 | +into the main codebase. |
| 47 | + |
| 48 | +In accordance with the 3GPP architecture, the PDCP and RLC layers were |
| 49 | +transformed so that they purely consist of per-DRB entities, created and |
| 50 | +configured by `BearerManagement` (RRC). Each DRB has dedicated PDCP TX/RX and |
| 51 | +RLC TX/RX entity modules, wired directly to each other via per-bearer gate |
| 52 | +connections. |
| 53 | + |
| 54 | +Details: |
| 55 | + |
| 56 | +- **SDAP protocol layer**: An SDAP implementation was added, providing |
| 57 | + QFI-to-DRB routing with a JSON-configured `DrbTable`. The SDAP layer is |
| 58 | + optional in NR NICs (enabled via `hasSdap=true`). |
| 59 | + |
| 60 | +- **QFI propagation via GTP-U**: QFI is set by the application via DSCP, |
| 61 | + picked up by `TrafficFlowFilter`/UPF, carried in the GTP-U protocol header |
| 62 | + (mirroring the 3GPP PDU Session Container extension header), and extracted |
| 63 | + by the gNB for SDAP routing. |
| 64 | + |
| 65 | +- **QoS-aware proportional fairness scheduler**: A `QoSAwareScheduler` was |
| 66 | + added to MAC, supporting QFI-based scheduling with configurable weight |
| 67 | + constants. Enable with `LteMacEnb.schedulingDisciplineDl/Ul = "QOS_PF"`. |
| 68 | + |
| 69 | +- **DRB configuration in JSON**: DRB configuration is split between SDAP |
| 70 | + (`sdap.drbConfig` for QFI-to-DRB routing) and MAC (`mac.drbQosConfig` for |
| 71 | + QoS scheduler parameters), both in JSON format. |
| 72 | + |
| 73 | +- **Non-IP PDU session support**: SDAP was generalized for non-IP PDU session |
| 74 | + types, with `PduSessionType` enum and `upperProtocol` in DRB configuration. |
| 75 | + |
| 76 | +- **PDCP refactored into per-bearer entities**: The former monolithic PDCP |
| 77 | + module (which had six subclass variants for LTE/NR × UE/eNB/D2D) was |
| 78 | + replaced with per-bearer `PdcpTxEntity` and `PdcpRxEntity` modules, plus |
| 79 | + `PdcpMux` for upper-layer routing and `DcMux` for Dual Connectivity X2 |
| 80 | + forwarding. Bypass entities handle the DC secondary leg. Entities communicate |
| 81 | + via OMNeT++ gates, not C++ method calls. |
| 82 | + |
| 83 | +- **RLC refactored into per-bearer entities**: The former `LteRlc` compound |
| 84 | + module (containing `LteRlcUm`/`LteRlcUmD2D`, `LteRlcAm`, `LteRlcTm`) was |
| 85 | + replaced with per-bearer TX/RX entity modules for all three RLC modes (UM, |
| 86 | + AM, TM), plus `RlcMux` for MAC↔entity routing. |
| 87 | + |
| 88 | +- **PDCP↔RLC directly wired**: PDCP and RLC entities are connected directly |
| 89 | + via per-bearer gates. All submodules now reside directly at NIC level — the |
| 90 | + former `PdcpLayer` and `LteRlc` compound modules no longer exist. |
| 91 | + |
| 92 | +- **Example simulations**: `simulations/nr/standalone/omnetpp_drb.ini` with |
| 93 | + multi-UE, multi-QFI configurations. |
| 94 | + |
| 95 | +### Ip2Nic decomposed, further module architecture improvements |
| 96 | + |
| 97 | +The `Ip2Nic` module, which had accumulated various unrelated responsibilities |
| 98 | +over time, was decomposed. Several code fragments were factored out into |
| 99 | +separate modules: |
| 100 | + |
| 101 | +- **`analyzePacket()` moved to Ip2Nic from PDCP**: Packet classification |
| 102 | + (filling `FlowControlInfo` tags) was moved to where it logically belongs — |
| 103 | + at the IP-to-NIC boundary. The `IpFlowInd` tag was eliminated. RLC type NED |
| 104 | + parameters (`conversationalRlc`, etc.) also moved from PDCP to `Ip2Nic`. |
| 105 | + |
| 106 | +- **HandoverPacketHolderUe/Enb**: Handover packet buffering was factored out |
| 107 | + of `Ip2Nic` into separate modules. X2 tunneled packets are now received via |
| 108 | + gates instead of C++ method calls. |
| 109 | + |
| 110 | +- **TechnologyDecision**: Dual Connectivity technology selection logic was |
| 111 | + extracted into a separate, configurable module that uses NED expressions. |
| 112 | + |
| 113 | +Further module architecture improvements: |
| 114 | + |
| 115 | +- **MAC turned into compound module**: MAC is now a compound module with `AMC` |
| 116 | + and DL/UL `Scheduler` as proper `cSimpleModule` submodules (previously |
| 117 | + created via `new` in C++). They perform their own staged initialization. |
| 118 | + |
| 119 | +- **UPF and PgwStandard** now derive from INET's `ApplicationLayerNodeBase`. |
| 120 | + |
| 121 | +- **PacketFlowObserver refactored to use OMNeT++ signals**: Direct C++ calls |
| 122 | + from PDCP, RLC, and MAC into `PacketFlowObserver` were replaced with |
| 123 | + OMNeT++ signals, fully decoupling the observer from protocol modules. |
| 124 | + |
| 125 | +- Replaced method-call-based packet passing with gate connections in several |
| 126 | + places: `LteHandoverManager`, `DualConnectivityManager`, `Ip2Nic` (X2 path). |
| 127 | + |
| 128 | +### Type safety improvements |
| 129 | + |
| 130 | +- **Strong typedefs**: `SIMU5G_STRONG_TYPEDEF` macro applied to `MacNodeId`, |
| 131 | + `DrbId`, `LogicalCid`, and `Qfi`, preventing accidental mixing of ID types. |
| 132 | + |
| 133 | +- **Direction enum**: `LteControlInfo.direction` changed from `unsigned short` |
| 134 | + to a proper `Direction` enum. |
| 135 | + |
| 136 | +- **C++ types extracted**: Types previously defined in `LteCommon.msg` were |
| 137 | + moved into a dedicated `LteTypes.h` header. |
| 138 | + |
| 139 | +- **ROHC header**: PDCP header compression now uses a proper ROHC header |
| 140 | + representation instead of simply truncating the IP header. |
| 141 | + |
| 142 | +- `FlowControlInfo`: `lcid` field renamed to `drbId`. |
| 143 | + |
| 144 | +### Naming and layout cleanup |
| 145 | + |
| 146 | +- Gate renames throughout the NIC for clarity and consistency: |
| 147 | + `MAC_to_RLC`/`RLC_to_MAC` → `upperLayerIn`/`upperLayerOut` and |
| 148 | + `macIn`/`macOut`; `MAC_to_PHY`/`PHY_to_MAC` → `phyOut`/`phyIn`; |
| 149 | + `filterGate` → `dnPppg`. Several `inout` gates split into separate `input` |
| 150 | + + `output` gates. |
| 151 | + |
| 152 | +- Submodule renames: `pdcpUpperMux` → `pdcpMux`, `rlcLowerMux` → `rlcMux`, |
| 153 | + `pppIf` → `dpPpp` (in UPF/PGW). |
| 154 | + |
| 155 | +- Module renames: `DualConnectivityManager` → `DcX2Forwarder`, |
| 156 | + `LteHandoverManager` → `HandoverX2Forwarder`. |
| 157 | + |
| 158 | +- Improved NED layout of NIC internals for better visualization in Qtenv: |
| 159 | + data-path modules arranged vertically, control-plane modules on the left |
| 160 | + edge, dynamically created PDCP/RLC entities positioned between muxes. |
| 161 | + |
| 162 | +### Bug fixes |
| 163 | + |
| 164 | +- MEC: Fixed uninitialized variables, `MecOrchestrator` contextId counter |
| 165 | + never being incremented, missing return after failure path causing |
| 166 | + end-iterator dereference, `MecAppBase` undisposed objects, |
| 167 | + `MecResponseApp`/`MecRTVideoStreamingReceiver` missing `localUePort`, |
| 168 | + `RniService` incomplete CamelCase renaming. |
| 169 | + |
| 170 | +- `LteSchedulerEnb`: Fixed multi-UE starvation in multi-DRB scheduling. |
| 171 | + |
| 172 | +- `QoSAwareScheduler`: Fixed QoS lookup failure for UEs beyond the first, |
| 173 | + integer division in PF score computation, rate units mismatch. |
| 174 | + |
| 175 | +### Other |
| 176 | + |
| 177 | +- Added `tilx` fingerprints (resistant to module renames) to the fingerprint |
| 178 | + test suite. Fingerprint test coverage for MEC simulations improved. |
| 179 | + |
| 180 | +- `SplitBearersTable` turned into `std::ordered_map`. |
| 181 | + |
| 182 | + |
3 | 183 | ## v1.4.3 (2026-02-18) |
4 | 184 |
|
5 | 185 | This release represents a major milestone in the complete overhaul of the Simu5G |
|
0 commit comments