Give the radio
its orders.
The U-plane is cargo; the C-plane is the manifest that must arrive first. Here we read a real control message on the wire: the common header (when), the section header (which PRBs), and the section type — the 8-bit verb. We tour all twelve section types (0–11), the 32 section extensions, and trace one downlink slot end-to-end, bound to its U-plane by sectionId. Verbatim from O-RAN WG4 CUS.0 v21 §7.
The C-plane — sections, section types & the slot walkthrough
The player screen is a live animation stage — the common header assembles field by field, the twelve section types light up on a switchboard, the section extensions bolt on, and one downlink slot is traced from command to radiated beam, exactly as the narration reaches each idea. Karaoke subtitles EN + Persian, fullscreen.
Click every section type
Pick a section type 0–11. See its verbatim purpose, its direction on the fronthaul, whether any U-plane data rides behind it, and the section extensions it typically carries.
Section header (which) → sectionId·12 · rb·1 · startPrbc·10 · numPrbc·8 · beamId·15
Twelve section types — the verbs on the wire
CUS.0 v21 defines section types 0 through 11 (type 2 is reserved). Types 0–7 are largely O-DU→O-RU; types 8–11 flow up from the O-RU. "U-plane?" = whether IQ data rides behind the command.
| ST | Purpose (verbatim) | Direction | U-plane? | Clause |
|---|---|---|---|---|
| 0 | Unused resource blocks / symbols — idle or guard periods | O-DU → O-RU | no | §7.4.2 |
| 1 | Most downlink and uplink radio channels (the workhorse) | O-DU → O-RU | yes | §7.4.3 |
| 2 | reserved (for future use) | — | — | §7.4.4 |
| 3 | PRACH and mixed-numerology channels | O-DU → O-RU | yes | §7.4.5 |
| 4 | Slot configuration control (energy saving) — e.g. TIME_DOMAIN_BEAM_CONFIG | O-DU → O-RU | no | §7.2.9 / §7.4.6 |
| 5 | UE scheduling information (per-UE beamforming) | O-DU → O-RU | yes | §7.4.7 |
| 6 | Channel information for a specific ueId | O-DU → O-RU | no | §7.4.8 |
| 7 | LAA — listen-before-talk (LBT) procedure | both | no | §7.4.9 |
| 8 | ACK/NACK feedback + wake-up ready indication | O-RU → O-DU | no | §7.4.10 |
| 9 | Post-equalization SINR values (DMRS-BF-EQ) | O-RU → O-DU | no | §7.4.11 |
| 10 | RRM measurement reports | O-RU → O-DU | no | §7.4.12 |
| 11 | Request RRM measurements (e.g. IpN for unallocated PRBs) | O-DU → O-RU | no | §7.4.13 |
Older trains listed section types "0/1/3/5/6/7". CUS.0 v21 is ST 0–11 (ST2 reserved). ST4 is now Slot Configuration Control (the energy-saving hook that M8's rApp reaches), and ST8–ST11 add a full uplink feedback conversation — ACK/NACK, SINR and RRM — from the O-RU back to the O-DU.
One command, field by field
Every C-plane message = a common header (when) + one or more sections (which resources). The sectionId is the label the matching U-plane data points back to.
| Part | Field | Bits | Answers |
|---|---|---|---|
| Common header | frameId | 8 | radio frame number |
| subframeId | 4 | subframe within the frame | |
| slotId | 6 | slot within the subframe | |
| startSymbolId | 6 | first OFDM symbol it applies to | |
| Section header | sectionId | 12 | the C↔U glue — U-plane carries the same value |
| rb | 1 | resource-block indicator (every / every-other) | |
| startPrbc | 10 | first PRB of this section | |
| numPrbc | 8 | number of contiguous PRBs | |
| beamId | 15 | which beam to point at those PRBs |
The sectionId binds a C-plane command to its U-plane data. The O-RU matches cargo to manifest by sectionId, section by section. Get it wrong and the IQ arrives with no instructions — dropped. Also note the section type field is 8 bits; it is the verb that selects one of the twelve behaviours in the table above.
Thirty-two bolt-ons that refine a section
A section type sets the verb; a section extension (SE) adds the adverbs. You look up the one a scenario needs — here are the ones you will actually meet.
| SE | Name (verbatim) | You use it for… |
|---|---|---|
| 1 | Beamforming weights | carrying the actual BF weight vector |
| 2 | Beamforming attributes | BF by attributes instead of raw weights |
| 3 | DL precoding parameters | downlink precoding config |
| 4 | Modulation compression parameters | mod-comp — ties to M4 |
| 5 | Modulation compression additional params | mod-comp extras |
| 6 | Non-contiguous PRB allocation (time+freq) | scattered PRBs |
| 7 | eAxC mask | address a group of eAxC in one section |
| 10 | Group configuration of multiple ports | configure many ports at once |
| 11 | Flexible beamforming weights | flexible BF weight delivery |
| 12 | Non-contiguous PRB with frequency ranges | range-based scattered PRBs |
| 20 | Dedicated puncturing | blank specific resource elements |
| 24 | PUSCH DMRS configuration | uplink DMRS setup |
SE 1–32 also include DSS (SE 9), frequency hopping (SE 13), nulling-layer info (SE 14), uplink transmission management (SE 18), variable PRB-group size (SE 21), ACK/NACK request (SE 22), symbol reordering for DMRS-BF (SE 25), MCS information (SE 31) and rank/TPMI measurement request (SE 32). Know they exist; look up the exact one.
🛠 Engineer detail block — what you'll actually meet in the field
- Debug by expected ST/SE. Beamformed PDSCH → ST1 + SE1/SE11. Random access → ST3 on PRACH numerology. Idle guard → ST0, no U-plane behind it. If the capture disagrees, that is your bug.
- sectionId is the first thing to check when U-plane data "arrives but nothing radiates." A C-plane/U-plane sectionId mismatch drops the IQ silently — no alarm, no radiation.
- C-plane must land early. The command has to arrive inside its reception window before the U-plane data (Chapter 7). Late C-plane = dropped samples that look like coverage holes.
- ST4 is the energy-saving hook. When an rApp puts a cell to sleep (M8), it ultimately becomes a Section Type 4 slot-configuration command (TIME_DOMAIN_BEAM_CONFIG / TRX control) on the wire.
- ST8–11 are the O-RU talking back. ACK/NACK, SINR and RRM reports flow up. If you only think of C-plane as downlink orders, you will miss half the conversation.