|
1 | 1 | # What's New in Simu5G |
2 | 2 |
|
| 3 | +## v1.5.1 (2026-07-28) |
| 4 | + |
| 5 | +This release continues the architectural overhaul of Simu5G, focusing on the |
| 6 | +PDCP and RLC layers: per-bearer protocol entities are now packaged into |
| 7 | +compound modules, DRBs are established as bidirectional (duplex) bearers, and |
| 8 | +the Dual Connectivity split-bearer data path was restructured. |
| 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 | +### Per-bearer PDCP and RLC compound entity modules |
| 14 | + |
| 15 | +v1.5.0 transformed the PDCP and RLC layers into dynamically created per-bearer |
| 16 | +TX/RX entity modules. This release packages the two sides of each bearer into |
| 17 | +one compound module per bearer, following the 3GPP model of one PDCP/RLC |
| 18 | +entity per bearer (for RLC AM explicitly with a transmitting and a receiving |
| 19 | +side): |
| 20 | + |
| 21 | +- **RLC**: Each bearer's TX and RX entities now live in an `RlcTmEntity`, |
| 22 | + `RlcUmEntity` or `RlcAmEntity` compound module. In AM, the internal control |
| 23 | + paths are now explicit gate connections between the RX and TX submodules, |
| 24 | + replacing C++ registry-lookup calls between the two simple modules: |
| 25 | + `feedbackOut` -> `feedbackIn` carries the STATUS PDUs received from the peer |
| 26 | + into the TX side's ARQ, and `statusOut` -> `statusIn` hands the locally |
| 27 | + generated status reports to the TX side for transmission. |
| 28 | + |
| 29 | +- **PDCP**: Each bearer's TX and RX entities now live in a `PdcpEntity` |
| 30 | + compound module. Variants are subclasses overriding the entity typenames |
| 31 | + (`NrPdcpEntity`); a mixed entity (e.g. an EN-DC master eNB, which runs an NR |
| 32 | + TX side with an LTE RX side) overrides just `tx.typename` or `rx.typename`. |
| 33 | + |
| 34 | +- **PdcpRelayEntity**: At a Dual Connectivity secondary node, which only |
| 35 | + tunnels already-processed PDUs between the master (over X2) and its own RLC, |
| 36 | + the two per-bearer bypass modules were packaged into a `PdcpRelayEntity` |
| 37 | + compound module, which stands in place of the bearer's PDCP entity; |
| 38 | + `BypassTxPdcpEntity`/`BypassRxPdcpEntity` were renamed to |
| 39 | + `PdcpDownlinkRelay`/`PdcpUplinkRelay`. |
| 40 | + |
| 41 | +- New module interfaces (`ITxPdcpEntity`, `IRxPdcpEntity`, `IRlcTxEntity`, |
| 42 | + `IRlcRxEntity`, `IRlcAmTxEntity`, `IRlcAmRxEntity`) make the entity |
| 43 | + implementations replaceable: every compound binds its two sides with the |
| 44 | + standard `tx.typename`/`rx.typename` submodule typename assignment, which a |
| 45 | + configuration or a subclass of the compound can override. The ten per-side |
| 46 | + entity-type parameters of `BearerManagement` were consolidated into five |
| 47 | + per-compound ones (`pdcpEntityModuleType`, `pdcpRelayEntityModuleType`, |
| 48 | + `rlcTm/Um/AmEntityModuleType`). |
| 49 | + |
| 50 | +### DRBs established as duplex (bidirectional) bearers |
| 51 | + |
| 52 | +Per TS 38.331, a DRB is bidirectional; Simu5G so far established each |
| 53 | +direction as an independent unidirectional bearer with its own |
| 54 | +locally-assigned DRB id. RLC AM fundamentally needs the reverse path of the |
| 55 | +same bearer for its STATUS PDUs, which the old model could only provide via |
| 56 | +on-demand reverse entities created from inside packet processing. Now: |
| 57 | + |
| 58 | +- `Binder::establishDataConnection()` (renamed from |
| 59 | + `establishUnidirectionalDataConnection()`) creates both directions of a |
| 60 | + unicast bearer at once; multicast bearers remain unidirectional. |
| 61 | + |
| 62 | +- DRB ids are allocated by the `Binder` with a counter per node pair, so the |
| 63 | + two ends of a bearer see the same DRB id, and DRB ids are peer-scoped |
| 64 | + (per-UE identities, as in the spec) rather than node-unique. |
| 65 | + |
| 66 | +- Reverse application traffic resolves to the reverse leg of the existing |
| 67 | + bearer instead of allocating a second bearer. |
| 68 | + |
| 69 | +This may change results in simulations where request and response flows |
| 70 | +between the same node pair previously used two separate bearers: they now |
| 71 | +share one duplex bearer, which changes logical channel ids and can change |
| 72 | +scheduling order under contention. |
| 73 | + |
| 74 | +### Dual Connectivity split-bearer data path restructured |
| 75 | + |
| 76 | +A DC split bearer is one PDCP entity -- one sequence number space -- whose |
| 77 | +PDUs are steered per-packet across two RLC legs. The `PdcpEntity` compound now |
| 78 | +reflects this: its lower boundary is a `legOut[]`/`legIn[]` gate vector. A |
| 79 | +plain bearer has one leg, and the TX/RX entities connect straight to it; a |
| 80 | +split bearer routes the TX side through a `DcPdcpLegSplitter` (per-PDU leg |
| 81 | +dispatch, per-leg DC id mapping and statistics) and merges both legs through a |
| 82 | +`PdcpLegJoiner` into the single RX entity, whose one reordering window |
| 83 | +restores sequence order across the legs. The per-packet leg steering policy |
| 84 | +itself remains in `TechnologyDecision`; the splitter only executes it. |
| 85 | + |
| 86 | +### MAC prepared for NR RLC framing |
| 87 | + |
| 88 | +The MAC and the schedulers can now accommodate an RLC that emits one SDU or |
| 89 | +segment per PDU without concatenation (the NR model of TS 38.322), in addition |
| 90 | +to LTE's single concatenated PDU per grant: for such flows, the schedulers |
| 91 | +plan one PDU per SDU/segment to fill the grant, the MAC issues one SDU request |
| 92 | +per planned PDU and multiplexes them into the MAC PDU, and exact per-PDU RLC |
| 93 | +header sizes are computed (octet-aligned, per SN length and segment state). |
| 94 | +This is inert by default (`soFraming=false` keeps the LTE path) and is |
| 95 | +groundwork for an upcoming standards-compliant NR RLC implementation. |
| 96 | + |
| 97 | +### Beacon emission control at the eNB/gNB |
| 98 | + |
| 99 | +- Beacon broadcasting was decoupled from `enableHandover`: the new |
| 100 | + `enableBeacons` parameter (default: `enableHandover`) controls it, so that |
| 101 | + radio link monitoring can later work without handover enabled. |
| 102 | + `enableHandover=true` now requires beacons to actually flow. |
| 103 | + |
| 104 | +- A non-positive `beaconInterval` is now an initialization error instead of |
| 105 | + silently disabling beacons; beacons are switched off with |
| 106 | + `enableBeacons=false`. |
| 107 | + |
| 108 | +### Module architecture improvements |
| 109 | + |
| 110 | +- **isNr as parameter**: `LteMacUe`, `LtePhyUe` and `LteDlFeedbackGenerator` |
| 111 | + no longer determine whether they are the NR leg of the UE by string-matching |
| 112 | + their own module name ("nrMac", "nrPhy", "nrDlFbGen"); they now have a |
| 113 | + `bool isNr` parameter, set by `NrNicUe`. |
| 114 | + |
| 115 | +- **Parametrized module references**: Hardcoded `getSubmodule()` walks inside |
| 116 | + the NIC were replaced with NED module-path parameters (11 new parameters |
| 117 | + across `BearerManagement`, `HandoverController`, `DcMux`, `LteMacEnb` and |
| 118 | + `TechnologyDecision`), and foreign-node lookups now go through `Binder` |
| 119 | + helper methods. |
| 120 | + |
| 121 | +- **IHandoverPacketHolder**: The `hoManagerOut` gate was added to the module |
| 122 | + interface, so that custom holder implementations can be substituted |
| 123 | + (contributed by Mohamed Seliem). |
| 124 | + |
| 125 | +### Bug fixes |
| 126 | + |
| 127 | +- **Crash on interleaved Dual Connectivity leg handovers**: Fixed a |
| 128 | + long-standing crash (also present in v1.4.3..v1.4.5) triggered when the LTE |
| 129 | + leg of an NR UE hands over while its NR leg is detached: per-UE state |
| 130 | + provisioned at the old master's secondary gNB was left orphaned, and |
| 131 | + re-establishment collided with the leftovers when the UE later returned. |
| 132 | + Handover cleanup now also covers the old serving node's secondary. In |
| 133 | + addition, PDCP entity teardown at NR UEs is now keyed by peer node, so an |
| 134 | + NR-leg detach no longer deletes the LTE leg's entities as well. |
| 135 | + |
| 136 | +- **MAC**: `macSduRequest()` no longer underflows when the scheduler allocates |
| 137 | + a grant smaller than the MAC header, which surfaced as a misleading |
| 138 | + "configured queueSize too low" error with many DRBs under `QOS_PF` |
| 139 | + contention (contributed by Mohamed Seliem). |
| 140 | + |
| 141 | +- **NrPhyUe**: D2D DATA frames arriving while the UE is detached during |
| 142 | + handover are now dropped, as `LtePhyUeD2D` already did, instead of crashing |
| 143 | + on already-deleted HARQ buffers. |
| 144 | + |
| 145 | +- **HandoverController**: Removed a redundant second detach/attach of the D2D |
| 146 | + direction on the AMC during NR UE handover. |
| 147 | + |
| 148 | +- **LtePhyEnb**: Corrected copy-pasted class names in `requestFeedback()` |
| 149 | + error messages. |
| 150 | + |
| 151 | +### Other |
| 152 | + |
| 153 | +- **Fingerprint tests**: The simulation-time intervals of configurations |
| 154 | + involving events like handover or D2D mode switching were extended so that |
| 155 | + the fingerprint window actually covers those events, and fingerprints were |
| 156 | + re-recorded for the architectural changes above. |
| 157 | + |
| 158 | + |
3 | 159 | ## v1.5.0 (2026-07-13) |
4 | 160 |
|
5 | 161 | This release continues the architectural overhaul of Simu5G. Major themes |
|
0 commit comments