Skip to content

M5 — CU + coordinated scheduling (tools/ran-controller/) #259

Description

@josephnef

Part of the 5G-NR RAN EPIC #254. Phase B.

Goal: a CU owns the facility-wide slot map and coordinates cell-edge resources — the disaggregated-RAN control plane over the F1 backhaul.

5G mapping (terminology corrected from the review)

CU / DU split (the CU half); F1 interface = the DU↔CU control link (Xn is inter-gNB — used here for any direct DU↔DU coordination); coordinated scheduling / dynamic-TDD alignment (5G ICIC successor). This is an NR-inspired centralized facility scheduler, not a faithful 3GPP CU (it owns scheduling, not PDCP/RRC).

Deliverables (tools/ran-controller/ — the CU app; never touches the radio)

  • tools/ran-controller/ — collects per-DU UeRegistry + link quality over the F1 socket (UDP/gRPC over LAN), pushes per-DU grant maps back.
  • coordination planner — for an edge UE heard by two DUs, allocate disjoint time slots (cheapest, tight-sync tier only) or different channels via FastRetune (slots ≫ retune time); a coarse-sync (USB) DU is restricted to frequency separation, not same-channel time slots (M4 tiers).
  • each DU exposes a local F1 control socket (accepts a pushed grant map; publishes registry + link quality).
  • control-plane failure model (from the review) — a late CU update must never alter a frame already in progress. Grant distribution carries: a monotonically increasing schedule epoch/version, an effective_at network-frame number, a minimum control-plane lead time, DU acknowledgement of a staged schedule, stale-update rejection, and autonomous DU fallback on CU/backhaul outage.

Reuses

M1 grant map, FastRetune, SetCcaMode, M4's synced TSF (so a CU-assigned slot index means the same instant at every DU).

Dependencies

M4 (#254 tracks) — coordination is meaningless without a shared clock.

Test — tests/ran_coord.sh

An edge UE hearing both DUs: uncoordinated → collisions on the shared airtime; enable the CU coordination planner → the edge UE's airtime goes clean. Headless selftest: the planner's slot/channel-assignment logic in the selftests aggregate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions