Skip to content

Commit 264af21

Browse files
committed
WHATSNEW.md: add v1.5.0 release notes, update Version file
1 parent 46a7d73 commit 264af21

2 files changed

Lines changed: 182 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.5
1+
1.5.0

WHATSNEW.md

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

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

5186
This release is a collection of bug fixes to the physical-layer error model

0 commit comments

Comments
 (0)