NRCell Status and Conditions
The spec of an NRCell is yours; its status is the controller's. This page lists what
the controller writes there and what each value means. The field-by-field schema is the
NRCell API; what to do when a cell is stuck is
Troubleshoot.
What kubectl get nrcell Shows
NAME PCI PCI-SOURCE SECTOR DU-ID NCI BAND PHASE AGE
nr-n78-b210 1 spec 0 0 0x66C000 78 ConfigGenerated 3m
| Column | Field |
|---|---|
PCI | spec.pci, which the controller fills in when you leave it out |
PCI-SOURCE | status.pciSource |
SECTOR, DU-ID, NCI | status.sectorId, status.gnbDuId, status.nci |
BAND | spec.band |
PHASE | status.phase |
Phase
status.phase | Meaning |
|---|---|
Pending | the cell had no spec.pci; the controller assigned a temporary one and the reconcile that generates the DU follows |
ConfigGenerated | the identity is resolved and the DU configuration is generated; the DU Deployment exists |
Error | the reconcile stopped; the conditions say why, and no DU is generated or updated; a DU that already exists keeps running its last configuration |
Identity
Assigned once, on the cell's first reconcile, and stable for the life of the cell. You never
set these; a legacy sectorId in a cell's spec is ignored.
| Field | Value |
|---|---|
sectorId | the lowest free sector id under the gNB, from 0 up to 16383; a gap left by a deleted cell is refilled before the range extends |
gnbDuId | equal to sectorId (one DU per cell) |
gnbId | the CU-wide gNB id the controller is configured with (racora-controller chart value gnbId, default 411) |
nci | the NR Cell Identity computed from gnbId and sectorId, as hex |
nciDecimal | the same value as an integer, which the CU-CP's runtime commands take |
identitySource | always controller |
Two cells declared in one apply get distinct identities: allocation is serialised in the controller.
PCI Provenance
| Field | Value |
|---|---|
pciSource | spec when you set spec.pci; controller-temp when the controller filled it from the temporary pool 1002 to 1007; controller-retuned once a CU-IP decision replaced it |
pciAssignedAt | when the controller assigned or retuned the PCI |
lastRetune | the most recent retune the controller applied: from, to, ts, the decision's reason tags and its decisionId |
Both fields are written on the first reconcile, on a temporary allocation and on a CU-IP
retune; editing spec.pci by hand later refreshes neither. A cell with
pciSource: controller-temp keeps that PCI until the Intelligence Plane runs and a PCI
decision arrives (the decision loop).
Decisions and Neighbors
| Field | Value |
|---|---|
lastApplied.<function> | per Intelligence Function (pci, anr): the ts and decisionId of the last decision applied to this cell; the controller reads it before applying the next one |
neighbors[] | the relations in effect: nrCellRef, the neighbor's nci, its reportConfigs, its source (manual for a relation declared in spec.neighbors, anr for one written by an ANR decision; ANR only ever removes relations it created) and appliedAt, kept across later applies |
Conditions
The controller writes a condition only when something needs saying: a cell that reconciles
cleanly from the start carries none. Each condition has type, status, reason,
message and lastTransitionTime. Only ConfigGenerated and ReportConfigConflict are
maintained afterwards; a cell that recovered from PCIAllocated=False or
IdentityAllocated=False keeps that condition on the object.
| Condition | Status | Reason | Meaning |
|---|---|---|---|
PCIAllocated | False | TempPCIPoolExhausted | the cell has no spec.pci and all six temporary PCIs (1002 to 1007) are held by other cells; phase Error |
IdentityAllocated | False | SectorIdSpaceExhausted | every sector id under the gNB is assigned; phase Error |
ConfigGenerated | False | PlmnNotServed | spec.plmn is not the network identity's PLMN (global.network.plmn); phase Error, and a Warning Event on the cell |
ConfigGenerated | False | TacNotServed | spec.tac is not one of the network identity's tracking areas; phase Error, and a Warning Event on the cell |
ConfigGenerated | False | UnsupportedRadioBackend | spec.radioBackend.ruType is one the DU generator cannot produce; phase Error. The CRD's enum rejects any value but uhd, zmq and dummy at apply time, so this is reached only when the schema and the controller disagree |
ConfigGenerated | True | Generated | written when a cell that carried a ConfigGenerated=False condition is corrected and its DU is generated |
ReportConfigConflict | True | DuplicateReportCfgId | another cell already defines one of this cell's mobility.reportConfigs ids differently; the lexicographically first definition is in effect |
ReportConfigConflict | False | Resolved | the conflict this cell carried is gone |
The Events the controller posts for an identity mismatch are visible with
kubectl -n racora-system describe nrcell <name>.