Skip to content

Commit f62ab85

Browse files
committed
WHATSNEW.md: add v1.5.0 release notes, update Version file
1 parent 9b9fa57 commit f62ab85

3 files changed

Lines changed: 2758 additions & 1 deletion

File tree

Version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.4.3
1+
1.5.0

WHATSNEW.md

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,185 @@
11
# What's New in Simu5G
22

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+
3183
## v1.4.3 (2026-02-18)
4184

5185
This release represents a major milestone in the complete overhaul of the Simu5G

0 commit comments

Comments
 (0)