Repository navigation
cell M6: the conditional handover — a source lost before the command - #574
Conversation
…566) RAN_CHO=1 (F1 v18, HoIe v4, HoCommand.h ChoCondition): the CU prepares the move early (the A3 or RAN_HO_FORCE), the target grants the UE from the command, and the UE switches on its own condition: its serving beacons absent RAN_CHO_LOST_SF superframes, or its own measurement of the target ahead by RAN_CHO_MARGIN_DB for RAN_CHO_TTT_MS. None by the expiry: the UE stays, the target releases. Gaps go on through a conditional preparation; the DAPS visits run from it. Rig (testrig m6_cho.sh, 2 runs per case, cross-channel): source killed after the preparation, the UE moves 4 superframes after its last serving beacon with its DL intact (1.007-1.008 of UE2's PDUs, 0-1 uplinks lost); without it the UE is stranded (0.30-0.33). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
PR Summary by QodoAdd conditional handover before source loss
AI Description
Diagram
High-Level Assessment
Files changed (6)
|
Code Review by Qodo
1.
|
…a fresh target level only; commit on a beacon of the new cell; the source releases a silent conditional UE; the CU needs a post-command target sample Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
All five findings were valid. Fixed in
Rig, on
ctest: 95/95 pass. |
#566 item: a UE whose source fades before the handover command loses what it misses before the cross-channel DAPS visits begin.
The problem, measured first. A command reaches the UE only through its source's beacon. With cell 2 on another channel and DU1 killed before any command, UE1 was stranded: no switch, and no DL for the rest of the run (30–33 % of what UE2 got over the same run).
What this adds. A conditional handover,
RAN_CHO=1, on F1 v18, HoIe v4 andHoCommand.hChoCondition.RAN_HO_FORCEprepares the move. The command's instant becomes the expiry (RAN_CHO_WINDOW_SF[300]), and the command carries the UE's condition:RAN_CHO_LOST_SF[4],RAN_CHO_MARGIN_DB[3] andRAN_CHO_TTT_MS[640].ran.ho_donefires when the target hears the UE, at any time before the expiry.source_lost(no serving beacon for N superframes) ortarget_better(its own filtered level of the target ahead by the margin for the hold time), loggingcell.ue.cho_exec. Without either by the expiry it stays (cell.ue.cho_expired). Measurement gaps continue during a conditional preparation, and the DAPS visits run from the preparation.cell_m6covers the v4 IE round-trip and tamper check,ChoCondition(margin, hold, restart, loss threshold) and the F1 v18 round-trip.docs/cell-m6.mdsection "The conditional handover"; the "Not covered yet" list is updated.Rig (testrig
scripts/m6_cho.sh, 2 runs per case, cross-channel, all pass)source_lost, 4 sf after its last serving beacontarget_better, 8–9 sf after the preparationBetween the kill and the move, the visits kept every uplink on the target and its answers carried the DL. The remaining 205–248 ms silence is the stream's own cadence.
Not settled here: the rig forces the preparation. No policy for the A3 preparation offset, or for re-preparing after a lapse, has been tuned.
ctest: 95/95 pass.
🤖 Generated with Claude Code