Part of the 5G-NR RAN EPIC #254. Phase A.
Goal: make the scheduled cell reliable — per-UE hardware ACK (or a decided fallback), HARQ retransmission, and per-UE link adaptation of rate/power.
5G mapping
HARQ retransmission; per-UE link adaptation feeding the DCI grant (rate/pwr fields).
ACK framing corrected (from the architecture review)
The old "multi-MACID" framing was wrong: one ACK-responder MAC per physical node is normally sufficient — the AP has one BSSID and ACKs all UE uplinks addressed to it; each UE adapter ACKs its own downlinks. Multiple responder MACs are only needed if one adapter emulates several logical stations. The real capability question — does an injected unicast descriptor to an arbitrary UE request ACK, and does TxReport report the outcome? — is validated in M0 (#261), contract 3. M2 consumes that result.
Deliverables (into src/cell/)
Reuses
SetAckResponder, SetAmpduMode, TxReport (state/retries/sw_define), M0's per-UE attribution.
Dependencies
M0 (#261) (ACK/TxReport matrix + per-UE attribution) and M1 (#255).
Test — tests/cell_reliability.sh
Attenuate one UE → HARQ recovers the flow vs a no-HARQ baseline; that UE's grant rate steps down (link adaptation); the other UE is untouched. Headless selftest: HARQ state machine (seq/PID, NACK/timeout, dedup) + link-adapt rate-step logic in the selftests aggregate.
Part of the 5G-NR RAN EPIC #254. Phase A.
Goal: make the scheduled cell reliable — per-UE hardware ACK (or a decided fallback), HARQ retransmission, and per-UE link adaptation of rate/power.
5G mapping
HARQ retransmission; per-UE link adaptation feeding the DCI grant (rate/pwr fields).
ACK framing corrected (from the architecture review)
The old "multi-MACID" framing was wrong: one ACK-responder MAC per physical node is normally sufficient — the AP has one BSSID and ACKs all UE uplinks addressed to it; each UE adapter ACKs its own downlinks. Multiple responder MACs are only needed if one adapter emulates several logical stations. The real capability question — does an injected unicast descriptor to an arbitrary UE request ACK, and does
TxReportreport the outcome? — is validated in M0 (#261), contract 3. M2 consumes that result.Deliverables (into
src/cell/)src/cell/Harq.h— software HARQ with an explicit UE-feedback protocol. A no-ACK/broadcastTxReport"TX complete" only proves the frame aired, not that a UE received it — so HARQ requires: sequence number + HARQ process ID, cumulative-ACK/bitmap feedback, NACK + timeout rules, retransmission deadline + attempt limit, and receiver-side duplicate suppression. Hardware-ACK'd unicast can useTxReport(SW_DEFINE-matched) directly; the no-ACK path uses the feedback protocol.src/cell/LinkAdapt.h— per-UE rate/power from the per-UE RX-quality window (M0 contract 4; NOT device-wideGetRxQuality) + retry rate, written into the grant map.Reuses
SetAckResponder,SetAmpduMode,TxReport(state/retries/sw_define), M0's per-UE attribution.Dependencies
M0 (#261) (ACK/
TxReportmatrix + per-UE attribution) and M1 (#255).Test —
tests/cell_reliability.shAttenuate one UE → HARQ recovers the flow vs a no-HARQ baseline; that UE's grant rate steps down (link adaptation); the other UE is untouched. Headless selftest: HARQ state machine (seq/PID, NACK/timeout, dedup) + link-adapt rate-step logic in the
selftestsaggregate.