Skip to main content

NRCell (racora.io/v1alpha1)

Generated at build time from charts/racora-crds/files/nrcell-crd.yaml, the single source of the NRCell schema; edit the source, not this page.

An NRCell is the operator surface of a Racora cell: you declare the radio-facing fields under spec, the controller assigns the cell's identity and reports what it did under status. Every field's description below is the schema's own (kubectl explain nrcell.spec shows the same text on a cluster). The one example cell is what a first declaration looks like; real-radio declarations, written out in YAML, are in Deploy Cells and Connect a Radio.

racora.io/v1alpha1​

Resource Types:

NRCell​

↩ Parent

Name Type Description Required
apiVersion string racora.io/v1alpha1 true
kind string NRCell true
metadata object Refer to the Kubernetes API documentation for the fields of the `metadata` field. true
spec object
false
status object
false

NRCell.spec​

↩ Parent

Name Type Description Required
band integer NR operating band number (OCUDU cell_cfg.band), e.g. 3 (FDD) or 78 (TDD)
true
channelBandwidthMHz integer Channel bandwidth in MHz (OCUDU cell_cfg.channel_bandwidth_MHz)

Enum: 5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100
true
commonScs integer Subcarrier spacing in kHz

Enum: 15, 30, 60, 120
true
dlArfcn integer Downlink ARFCN of the carrier centre (OCUDU cell_cfg.dl_arfcn); the uplink follows the band's duplex spacing
true
plmn string PLMN identity (MCC+MNC)
true
tac integer Tracking Area Code the cell broadcasts (OCUDU cell_cfg.tac); the core must serve it
true
adminState enum Administrative intent for the cell at the CU-CP. Locked = the cell is gracefully stopped (bar, UE release, deactivate) and kept dormant across DU restarts until set back to Unlocked. Applied live over the CU-CP runtime commands and recorded in the boot overlay's logical_cells whitelist. While Locked, the controller also withholds its post-decision reactivation unlock.

Enum: Unlocked, Locked
Default: Unlocked
false
azimuthDeg number Boresight azimuth in degrees (0 = north, 90 = east, clockwise); read by CU-IP with position
false
cellBarred boolean Intended MIB cellBarred state: the cell stays on air but UEs may not camp on it. Tracked independently of adminState by the CU-CP.

Default: false
false
duAssignment object Placement of this cell's DU pod. A uhd backend always requires a racora.io/rf-ready node; this narrows it further.
false
mechanicalTiltDeg number Mechanical antenna downtilt in degrees. Reserved for CU-IP; no component reads it today

Default: 8
false
mobility object This cell's contribution to the CU-wide mobility configuration. reportConfigs are unioned by reportCfgId across all cells (define each id once, on one cell, or identically on all — differing definitions of the same id resolve to the lexicographically-first cell name and raise a ReportConfigConflict condition on the others). Controller defaults for ids 1 (periodical) and 2 (A3) remain unless overridden here and are never removable. Field names mirror the OCUDU cu_cp.mobility report_configs keys (camelCase); the controller applies changes to the running CU-CP over the runtime command surface and bakes them into the boot overlay.
false
neighbors []object Directional neighbor relations from this cell (declare the reverse relation on the other cell). Pushed live to the running CU-CP and baked into its boot overlay; the applied state, with provenance, is mirrored under status.neighbors.
false
pci integer Physical Cell ID visible to UEs. Optional — when absent, the controller assigns the next available PCI from the temp pool (1002-1007) and the auto-retune workflow replaces it with a non-temp PCI as soon as the cell appears in the substrate graph and CU-IP emits a RANN-D decision. See status.pciSource for assignment provenance.

Minimum: 0
Maximum: 1007
false
pdcch object Passed through verbatim as OCUDU cell_cfg.pdcch — any key the pinned gNB image accepts; not validated by the API server
false
pdsch object Passed through verbatim as OCUDU cell_cfg.pdsch (see pdcch)
false
periodicReportCfgId integer Report config id for this cell's serving-cell periodical measurement report (OCUDU periodic_report_cfg_id). Must reference a periodical config; the controller default id 1 reports every 1024 ms.

Default: 1
false
position object Antenna position in a local Cartesian frame (metres). Read by CU-IP's NRCell watcher for the substrate graph geometry, never by the gNB.
false
prach object Passed through verbatim as OCUDU cell_cfg.prach (see pdcch)
false
pusch object Passed through verbatim as OCUDU cell_cfg.pusch (see pdcch)
false
radioBackend object The radio the DU drives and its parameters. ruType selects the backend; only the matching sub-object is read.
false

NRCell.spec.duAssignment​

↩ Parent

Placement of this cell's DU pod. A uhd backend always requires a racora.io/rf-ready node; this narrows it further.

Name Type Description Required
nodeName string Pin this cell's DU to a specific Kubernetes node (by hostname), for a multi-node cluster where the cell's radio is on a particular box. Merged with the rf-ready nodeSelector via the scheduler (not a raw pod nodeName bind), so the node must still be rf-ready with a free radio. Omit to let the scheduler place it on any eligible node.
false

NRCell.spec.mobility​

↩ Parent

This cell's contribution to the CU-wide mobility configuration. reportConfigs are unioned by reportCfgId across all cells (define each id once, on one cell, or identically on all — differing definitions of the same id resolve to the lexicographically-first cell name and raise a ReportConfigConflict condition on the others). Controller defaults for ids 1 (periodical) and 2 (A3) remain unless overridden here and are never removable. Field names mirror the OCUDU cu_cp.mobility report_configs keys (camelCase); the controller applies changes to the running CU-CP over the runtime command surface and bakes them into the boot overlay.

Name Type Description Required
reportConfigs []object Measurement report configurations this cell contributes to the CU-wide set (see mobility)
false

NRCell.spec.mobility.reportConfigs[index]​

↩ Parent

Name Type Description Required
reportCfgId integer Identifier of this report configuration, referenced from neighbors[].reportConfigs and periodicReportCfgId

Minimum: 1
Maximum: 63
true
reportType enum periodical: serving-cell reports every reportIntervalMs. event_triggered: a 3GPP A-event evaluated on a neighbor relation. cond_trigger: a conditional-handover trigger (eventTriggeredReportType d1, d2 or t1; no report interval).

Enum: periodical, event_triggered, cond_trigger
true
eventTriggeredReportType enum The RRC event (3GPP TS 38.331) for event_triggered and cond_trigger configs. a1-a6 are the measurement events; a3 (neighbor better than serving by measTriggerQuantityOffsetDb) is the handover default. d1/d2 (distance-based) and t1 (time-based) are accepted only with reportType cond_trigger.

Enum: a1, a2, a3, a4, a5, a6, d1, d2, t1
false
hysteresisDb integer Hysteresis in dB applied to the event condition (OCUDU hysteresis_db)

Minimum: 0
Maximum: 15
false
measTriggerQuantity enum Quantity the event evaluates (OCUDU meas_trigger_quantity)

Enum: rsrp, rsrq, sinr
false
measTriggerQuantityOffsetDb integer Offset in dB for events A3/A6 — how much better the neighbor must measure (OCUDU meas_trigger_quantity_offset_db)

Minimum: -15
Maximum: 15
false
measTriggerQuantityThreshold2Db integer Second threshold in dB for event A5 (OCUDU meas_trigger_quantity_threshold_2_db)
false
measTriggerQuantityThresholdDb integer Threshold in dB for events A1/A2/A4/A5 (OCUDU meas_trigger_quantity_threshold_db)
false
periodicHoRsrpOffsetDb integer RSRP offset for triggering a handover from periodical reports, in field units of 0.5 dB; -1 disables handover from periodical measurements (OCUDU periodic_ho_rsrp_offset_db).

Minimum: -1
Maximum: 30
false
reportIntervalMs integer Interval between reports once triggered (OCUDU report_interval_ms); mandatory for periodical and event_triggered configs

Enum: 120, 240, 480, 640, 1024, 2048, 5120, 10240, 20480, 40960, 60000, 360000, 720000, 1800000
false
t312 integer T312 in ms: started by the UE on an event-triggered report while T310 (out-of-sync) is running; on expiry the UE declares radio-link failure to re-establish on another cell sooner (OCUDU t312).

Enum: 0, 50, 100, 200, 300, 400, 500, 1000
false
timeToTriggerMs integer How long the condition must hold before the UE reports (OCUDU time_to_trigger_ms)

Enum: 0, 40, 64, 80, 100, 128, 160, 256, 320, 480, 512, 640, 1024, 1280, 2560, 5120
false

NRCell.spec.neighbors[index]​

↩ Parent

Name Type Description Required
nrCellRef string Name of the neighbor NRCell (same namespace)
true
reportConfigs []integer Report config ids attached to this relation. Must reference event-triggered configs — the CU-CP rejects periodical configs on neighbor relations.

Default: [2]
false

NRCell.spec.position​

↩ Parent

Antenna position in a local Cartesian frame (metres). Read by CU-IP's NRCell watcher for the substrate graph geometry, never by the gNB.

Name Type Description Required
heightM number Antenna height above ground in meters
false
xCoord number East coordinate in meters (local Cartesian)
false
yCoord number North coordinate in meters (local Cartesian)
false

NRCell.spec.radioBackend​

↩ Parent

The radio the DU drives and its parameters. ruType selects the backend; only the matching sub-object is read.

Name Type Description Required
dummyProcessingDelay integer For ruType dummy — the dummy RU's downlink processing delay in slots (OCUDU ru_dummy.dl_processing_delay)

Default: 1
false
ruType enum Radio backend: zmq | dummy (virtual) | uhd (USRP); other backends are not accepted

Enum: zmq, dummy, uhd
Default: dummy
false
uhd object Parameters for ruType uhd — a USRP over UHD (OCUDU ru_sdr with device_driver uhd)
false
zmq object Parameters for ruType zmq — a virtual radio exchanging IQ samples over ZeroMQ with a UE simulator (OCUDU ru_sdr with device_driver zmq). The controller exposes the DU's port 2000 as a Service.
false

NRCell.spec.radioBackend.uhd​

↩ Parent

Parameters for ruType uhd — a USRP over UHD (OCUDU ru_sdr with device_driver uhd)

Name Type Description Required
clockSource enum Clock source (internal for single cell, gpsdo for sync)

Enum: internal, external, gpsdo
Default: internal
false
deviceArgs string UHD device args (e.g., type=b200,serial=3591266)

Default: type=b200
false
otwFormat string UHD over-the-wire sample format (sc12 halves USB bandwidth on a B210; sc16 is UHD's default)

Default: sc12
false
rxGain integer RX gain in dB (0-76)

Default: 75
false
srate number Sample rate in MHz

Default: 23.04
false
syncSource enum TIME synchronization source (OCUDU ru_sdr `sync`). Defaults to clockSource when that is gpsdo/external. Frame-time alignment across cells (required for connected-mode neighbor measurement and A3 handover) needs a time-capable source with lock on every cell — a disciplined clock alone does not align frames.

Enum: internal, external, gpsdo
false
txGain integer TX gain in dB (0-89)

Default: 75
false

NRCell.spec.radioBackend.zmq​

↩ Parent

Parameters for ruType zmq — a virtual radio exchanging IQ samples over ZeroMQ with a UE simulator (OCUDU ru_sdr with device_driver zmq). The controller exposes the DU's port 2000 as a Service.

Name Type Description Required
baseSrate string Base sample rate in Hz, as a string (device_args base_srate); must match the UE simulator's

Default: 23.04e6
false
rxGain integer RX gain in dB (ru_sdr.rx_gain)

Default: 75
false
rxPort string ZMQ endpoint the DU receives samples from (device_args rx_port); default tcp://srsue..svc.cluster.local:2001, a UE simulator in the controller's ueNamespace
false
srate number Sample rate in MHz (OCUDU ru_sdr.srate)

Default: 23.04
false
txGain integer TX gain in dB (ru_sdr.tx_gain); no physical effect on a virtual radio

Default: 75
false
txPort string ZMQ endpoint the DU transmits samples on (device_args tx_port); default tcp://0.0.0.0:2000
false

NRCell.status​

↩ Parent

Name Type Description Required
conditions []object Kubernetes-style conditions the controller sets: IdentityAllocated (False: SectorIdSpaceExhausted), PCIAllocated (False: TempPCIPoolExhausted), ConfigGenerated (False: UnsupportedRadioBackend, PlmnNotServed or TacNotServed — the cell's plmn/tac are not in the network identity the core serves and the CU-CP advertises; True: Generated once corrected) and ReportConfigConflict (True: DuplicateReportCfgId; False: Resolved).
false
gnbDuId integer Controller-assigned gNB-DU ID (unique per DU; F1AP identity)
false
gnbId integer CU-wide gNodeB ID assigned by the controller
false
identitySource enum Provenance of the identity fields (always controller-assigned)

Enum: controller
false
lastApplied map[string]object Per-function record of the most recent CU-IP decision applied to this cell, keyed by decision function name (pci, anr): the apply time and the decision id. The controller's verify-current gate reads it before applying the next decision of that function.
false
lastRetune object Audit record of the most recent PCI retune applied by the controller
false
nci string Computed NCI (hex)
false
nciDecimal integer The NCI as a decimal integer (what the CU-CP's runtime commands take)
false
neighbors []object Applied neighbor relations with provenance (manual = declared in spec; anr = written by a CU-IP ANR decision).
false
pciAssignedAt string When the current spec.pci value was last assigned/changed

Format: date-time
false
pciSource enum Provenance of the current spec.pci value: spec - explicit value provided in NRCell spec controller-temp - controller-assigned temp PCI from the 1002-1007 pool (transient — auto-retune workflow will replace it) controller-retuned - controller-applied recommendation from a CU-IP RANN-D decision (terminal until the next retune)

Enum: spec, controller-temp, controller-retuned
false
phase enum Pending (temp PCI allocated, reconcile pending), ConfigGenerated (identity resolved, DU generated), Error (see conditions)

Enum: Pending, ConfigGenerated, Error
false
sectorId integer Controller-assigned sector ID (unique per cell)
false

NRCell.status.conditions[index]​

↩ Parent

Name Type Description Required
lastTransitionTime string When the condition last changed

Format: date-time
false
message string Human-readable detail
false
reason string Machine-readable cause: SectorIdSpaceExhausted, TempPCIPoolExhausted, UnsupportedRadioBackend, PlmnNotServed, TacNotServed, Generated, DuplicateReportCfgId or Resolved
false
status enum Whether the condition holds

Enum: True, False, Unknown
false
type string IdentityAllocated, PCIAllocated, ConfigGenerated or ReportConfigConflict
false

NRCell.status.lastApplied[key]​

↩ Parent

One entry per intelligence function

Name Type Description Required
decisionId string The applied decision's decision_id
false
ts string When the decision was applied

Format: date-time
false

NRCell.status.lastRetune​

↩ Parent

Audit record of the most recent PCI retune applied by the controller

Name Type Description Required
decisionId string RANN-D decision_id that triggered this retune (format: 'pci:{cell}:spec.pci')
false
from integer Previous PCI value
false
reason string RANN-D decision reason tags (e.g. 'temp', 'confused', 'temp,confused')
false
to integer New PCI value applied
false
ts string When the retune was applied

Format: date-time
false

NRCell.status.neighbors[index]​

↩ Parent

Name Type Description Required
appliedAt string When the relation was first applied; kept across later ANR applies

Format: date-time
false
nci string Neighbor NCI (hex)
false
nrCellRef string Name of the neighbor NRCell
false
reportConfigs []integer Report config ids attached to the relation
false
source enum manual = declared in spec.neighbors; anr = written by a CU-IP ANR decision (ANR only ever removes relations it created)

Enum: manual, anr
false