Repository navigation
cell M6: RACH re-join after a DU restart; Kestrel StopBeacon clears the TBTT protection - #538
Conversation
…on clears the TBTT protection A UE that joined through the RACH holds an id a restarted DU instance does not know: after re-attaching it was in no map. Now a joined UE that the authentic map in force has not granted for CELL_UE_REJOIN_SF (30) superframes — its DU restarted or released it — drops the id and joins again (cell.ue.rejoin): uplink beacon off, ACK responder cleared, the old id's DL HARQ space gone, a new RACH client with a FRESH nonce (a DU answers a repeated (MAC, nonce) request from its cache: the old id). Not mid-handover; static UEs never re-join. Kestrel driver fix found by it: StopBeacon cleared BCNTX_EN but left the TBTT protection StartBeacon turns on (TBTT_PROHIB_EN, BRK_SETUP); the port kept holding injected frames to its old beacon grid, so every re-join msgA arrived ~29.9 ms into the superframe, past the RACH slot (an A/B with the beacon left on landed in slot). stop_beacon now clears both. Rig (testrig scripts/m6_rejoin.sh, keyed, 3/3): re-attach, one re-join, the second join 4-8 attempts, the new id heard 100 % in slot by the restarted DU; with CELL_UE_REJOIN_SF=0 never heard. Regression for StopBeacon: inter-frequency handover 2 + fallback 1, measurement gaps 2, clock fit 1+1, handover 1 — all pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
PR Summary by QodoRe-join RACH UEs after DU restart and clear Kestrel TBTT protection
AI Description
Diagram
High-Level Assessment
Files changed (4)
|
Code Review by Qodo
1.
|
…ext pass, logged once) instead of a RACH beside the old beacon Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Qodo review addressed in f046721: a failed stop leaves stale beacons airing — the re-join now requires the old id's beacon to be stopped first. A failed |
|
CI green; Qodo's bug resolved (f046721). The remaining item is the high-level alternative (persist DU join state across restarts), for which Qodo recommends this PR's UE-side absence rule (it covers restart and release without DU state persistence). Merging with skip-qodo-gate. |
M6 (#260, EPIC #254): a UE that joined through the RACH re-joins after its DU restarts. Closes the open item from #536. It also includes a Kestrel driver fix that this work turned up.
Why
A RACH-joined UE holds an id that a restarted DU instance doesn't know. After re-attaching (#536), the UE was in no map and was never heard again.
What
examples/cell): a joined UE that the authentic map in force has not granted forCELL_UE_REJOIN_SF(30) superframes drops its id and joins again, logged ascell.ue.rejoin. That covers both a DU that restarted and one that released it.HalKestrel::stop_beacon):StopBeaconcleared the beacon-TX enable but left the TBTT protection thatStartBeaconturns on (TBTT_PROHIB_EN,BRK_SETUP). The port kept holding injected frames to its old beacon grid.stop_beaconnow clears both bits. The value of the ~13 ms hold, presumablyBCN_HOLD, is not separately established.docs/cell-m6.mdgains a section on re-joining through the RACH, and theStopBeaconcontract note indocs/scheduled-mac.mdcovers Kestrel.Rig (testrig
scripts/m6_rejoin.sh, keyed, 3/3 pass)UE1 joins cell 1 through the RACH, and DU1 is killed and restarted under it 35 s in.
Counterfactual (
CELL_UE_REJOIN_SF=0): the UE keeps a dead id and is never heard.Regression for the
StopBeaconchange:All pass.
🤖 Generated with Claude Code