The Intelligence Plane: CU-IP
CU-IP (CU Intelligence Plane) is a third CU functional split alongside CU-CP and CU-UP, introduced by CNS. Where the CU-CP holds the control plane's view of the network, CU-IP holds its learned view: a live graph of cells built from what UEs actually measure, and the Intelligence Functions that read that graph and decide. In Racora it is a plane of every gNB, deployed and operated like the other two.
In a Racora Cell
- Where it runs. The
cuipDeployment incentralized-unit, on the control node next to CU-CP and CU-UP. It requests one NVIDIA GPU (racora-cu.cuIp.gpuCount, default 1), runs under thenvidiaRuntimeClass and schedules only on a node labelledracora.io/gpu-ready=true; that is why the control node needs a GPU (Requirements). Like the other planes it is dormant at0replicas until the firstNRCellis declared. - What feeds it. The CU-CP's RANN-P export: the RANN-P forwarder sidecar ships the CU-CP's
measurement records to CU-IP's Arrow Flight endpoint (
cuipService, port8815). - What it holds. The substrate: a co-measurement graph of cells (which cells UEs report
together, how strongly), refreshed as reports stream in, served back over Flight. Its
update behavior is tunable through the chart (
racora-cu.cuIp.graphAlpha,streamGraphMode,streamHalfLifeS,reportsWindowSize). Cell geometry comes from theNRCell:spec.position.{xCoord,yCoord,heightM}(local Cartesian metres) andspec.azimuthDeg, which CU-IP reads with the position.spec.mechanicalTiltDegis reserved for CU-IP; no component reads it today. - What it decides. The Intelligence Functions enabled by
racora-cu.cuIp.engines(defaultpci,anr): PCI assignment and retune, and automatic neighbor relations. Each emits decisions with a reason and a confidence, served on/decisions/active; per-function tuning isracora-cu.cuIp.engineConfig. - How a decision becomes network state. The controller polls the decisions every
racora-controller.decisions.pollIntervalSand applies them per function: a PCI change behind a cell lock and a DU rollout, an ANR change as a live mobility push, with stabilization, confidence and verify-current gates, and an audit trail in the cell's status. That path is How Decisions Become Network State. - Its logs and traces.
kubectl logs -n centralized-unit deploy/cuipfor the live log; they also reach ClickHouse and Tempo, because its library defaults to the in-cluster collector when the chart sets no endpoint (Read Logs and Traces).
Extending It
An Intelligence Function reads the substrate over Flight and emits decisions back; the slot
is general, and adding a function is one of Racora's extension points
(Extending Racora).
Write an Intelligence Function is the step-by-step,
with the two shipping functions as worked examples, and
Run Your Own Intelligence Function puts yours into
a running Racora. The reference implementation's own
material lives in the cuip repository:
its overview,
the substrate
and its Flight API,
which together are the contract a function is written against. It is the same code CNS runs,
with site-specific antenna patterns and trained weights stripped out.