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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions