Skip to main content

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 cuip Deployment in centralized-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 the nvidia RuntimeClass and schedules only on a node labelled racora.io/gpu-ready=true; that is why the control node needs a GPU (Requirements). Like the other planes it is dormant at 0 replicas until the first NRCell is 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 (cuip Service, port 8815).
  • 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 the NRCell: spec.position.{xCoord,yCoord,heightM} (local Cartesian metres) and spec.azimuthDeg, which CU-IP reads with the position. spec.mechanicalTiltDeg is reserved for CU-IP; no component reads it today.
  • What it decides. The Intelligence Functions enabled by racora-cu.cuIp.engines (default pci,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 is racora-cu.cuIp.engineConfig.
  • How a decision becomes network state. The controller polls the decisions every racora-controller.decisions.pollIntervalS and 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/cuip for 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.