O-RAN breaks the monolithic base station into separately-sourced pieces joined by open interfaces, so a radio from one vendor can be driven by a baseband stack from another. COSMOS runs this for real: commercial O-RUs from three vendors, two open O-DU stacks, and software O-RUs, all interchangeable. This page explains the architecture, names the parts, and points at the tutorials for each.
A classic gNB is one box. O-RAN splits it into:
┌─────────┐ E2 ┌───────────────┐
│ O-CU │◄────────────►│ near-RT RIC │◄──── A1 ──── non-RT RIC / SMO
└────┬────┘ └───────────────┘
│ F1
┌────▼────┐
│ O-DU │ high PHY, MAC, RLC
└────┬────┘
│ Open Fronthaul (eCPRI over Ethernet) ← the 7.2x split
┌────▼────┐
│ O-RU │ low PHY + RF
└─────────┘
COSMOS work concentrates on the 7.2x split — the O-DU ↔ O-RU boundary — because that is where the multi-vendor interoperability actually gets tested, and where it actually breaks.
| Piece | What it does | On COSMOS |
|---|---|---|
| O-RU | Low PHY + RF. Converts frequency-domain IQ to radio. | Commercial: Benetel RAN650, LiteOn FlexFi, Foxconn RPQN-7801. Software: OAI nr-oru, ProtO-RU. |
| O-DU | High PHY, MAC, RLC. Drives the fronthaul. | OCUDU (srsRAN) and Duranta (OAI). |
| O-CU | PDCP, RRC, SDAP; talks N2/N3 to the core. | Same two stacks; usually run combined with the O-DU. |
| near-RT RIC | Closed-loop control on 10 ms–1 s timescales, over E2. | Not part of the standardized 5G SA tutorials; see the O-RAN/ONAP pages below. |
| non-RT RIC / SMO | Policy, orchestration, > 1 s loops, over A1/O1. | Building an ONAP/O-RAN SMO image · O-RAN/ONAP deployment. |
Everything between O-DU and O-RU is eCPRI over Ethernet — usually on a dedicated VLAN, with jumbo frames. It carries four distinct "planes", and confusing them is the single most common source of lost time:
| Plane | Carries | Notes |
|---|---|---|
| U-plane | the IQ samples themselves | compressed, typically BFP at 9 bits |
| C-plane | per-slot scheduling commands that tell the O-RU what to expect | the O-DU requests a PRACH window here |
| S-plane | synchronisation — PTP (IEEE 1588) + SyncE | non-negotiable; without lock, nothing else works |
| M-plane | management — NETCONF/YANG over port 830 | optional, and this is where the stacks differ |
Every U-plane and C-plane flow is tagged with an eAxC identifier that says which antenna and which channel it belongs to. The O-DU config lists them explicitly — dl_port_id, ul_port_id, prach_port_id in srsRAN, eAxC_offset in OAI.
⭐ The eAxC map is a property of the radio's current configuration, not of the vendor. Measured on COSMOS 2026-09-21: putting the same Benetel RAN650 into M-Plane mode moves PRACH from eAxC 4,5,6,7 to 8,9. A DU configured for the other mode then requests PRACH on identifiers the radio is not listening to, receives nothing, and every counter still reads healthy — a clean fronthaul, zero drops, and no PRACH. Always confirm the map against the wire, and note that a capture tells you which eAxC carries traffic, never what that traffic is.
| Stack | M-Plane | Consequence |
|---|---|---|
| Duranta (OAI) | nr-softmodem is a NETCONF client — it provisions the O-RU and must hold the session |
Under O-RAN supervision the O-RU stops transmitting once no subscribed client remains |
| OCUDU (srsRAN) | no NETCONF client at all | The O-RU must run standalone, configured from its own local file |
So the same radio needs opposite management modes depending on which O-DU drives it — and, as above, the mode also changes the eAxC map. This is the first thing to check when a previously-working 7.2 rig stops working.
Learned the hard way, and all of them are invisible in the obvious places:
tcpdump still shows every frame, because a capture tap sits before protocol demux.| Tutorial | O-DU stack | O-RUs | Status |
|---|---|---|---|
| OCUDU 5G SA over O-RAN 7.2 — Benetel, LiteOn & Foxconn | OCUDU (srsRAN) | Benetel, LiteOn, Foxconn | Benetel and LiteOn working; Foxconn not attaching |
| Duranta 5G SA over O-RAN 7.2 — Benetel, LiteOn & Foxconn | Duranta (OAI) | Benetel, LiteOn, Foxconn | Benetel and LiteOn working; Foxconn blocked |
| OCUDU over a commercial Foxconn O-RU | OCUDU (srsRAN) | Foxconn RPQN-7801 | status page — partly unblocked |
Both ends of the fronthaul in software, which is the best way to see the interface — the O-RU's own timing counters become observable.
| Tutorial | O-DU stack | Soft O-RU |
|---|---|---|
Duranta 5G SA with a soft O-RU — nr-oru on a USRP |
Duranta (OAI) | OAI nr-oru |
| OCUDU 5G SA with a soft O-RU — ProtO-RU on a USRP N310 | OCUDU (srsRAN) | ProtO-RU |
| Tutorial | About |
|---|---|
| Building an ONAP/O-RAN SMO image on COSMOS | Build a Kubernetes SMO environment from bare Ubuntu with the O-RAN SMO package. |
| O-RAN / ONAP deployment (pre-built image) | Deploy a pre-built O-RAN + ONAP snapshot and verify the pods. |
| 5G O-RAN split 7.2 end-to-end with OAI / Amarisoft and O-RUs | The earlier combined walkthrough on SB1 with LiteOn, Jabil and Benetel. |
Author(s): COSMOS team · Last verified: 2026-09-21 (introduction page; see each linked tutorial for its own verification date) · Tags: oran, o-ran, 7.2, fronthaul, ecpri, o-du, o-ru, ric, smo, overview