OCUDU is a permissively-licensed 5G CU/DU built on srsRAN Project: the gnb binary paired with a native Open5GS core. There is no license server and no per-seat cost. This page is the map: a short introduction to the framework, then the OCUDU tutorials, simplest to most advanced, and what each one measures.
Every OCUDU tutorial on COSMOS shares the same building blocks:
gnb (/opt/ocudu/build/apps/gnb/gnb) as the gNB or O-DU;/opt/open5gs);ocudu-<date>.ndz node image. The ocudu.ndz symlink always points at the newest one.What changes between tutorials is how the radio is attached. Nothing else about the stack changes:
srsue exchange IQ samples over ZMQ;nr-oru).All tutorials are standardized on test PLMN 00101 and UE pool 192.168.100.0/22 (gateway 192.168.100.1, with internet access). What you learn about the UE side in one tutorial carries into the next. For how OCUDU compares to COSMOS's other two 5G SA stacks, see the 5G SA platforms overview. The same three O-RUs driven by Duranta are covered in Duranta 5G SA — O-RAN 7.2 split.
| Component | Role | Where it lives |
|---|---|---|
gnb |
the CU+DU binary — gNB in the direct modalities, O-DU/O-CU in the 7.2 split | /opt/ocudu/build/apps/gnb/gnb |
srsue |
soft UE (from srsRAN_4G), used over ZMQ in the soft-only modality | on the same host |
| ProtO-RU | soft O-RU built on the OCUDU code base; takes the fronthaul and drives a USRP | separate host in the 7.2 soft-O-RU tutorial |
| Open5GS | the 5G core — native systemd services, not containerised | /opt/open5gs, config in /etc/open5gs/ |
| Aether SD-Core | alternative core — Kubernetes-native, for core-focused work | separate core host |
| YAML configs | srsRAN-Project format; the whole cell, fronthaul and core wiring | /root/ocudu/*.yml |
ocudu-<date>.ndz |
the node image; ocudu.ndz always points at the newest |
COSMOS image store |
srsRAN implements only the O-DU side of the 7.2 split and has no NETCONF/M-Plane client — so a commercial O-RU must be run standalone, from its own local configuration. That single fact drives most of the 7.2 setup differences against Duranta; see O-RAN on COSMOS.
| # | Tutorial | Modality | What it needs | Start here if… |
|---|---|---|---|---|
| 1 | Soft-only — gNB + srsUE + Open5GS over ZMQ | No radio (ZMQ) | any COSMOS server, ~20 min | …you want to see 5G SA register and pass traffic end to end with zero hardware to reserve. |
| 2 | Over-the-air — cross-vendor gNB + Open5GS + modem and lteue |
USRP, direct | sb1/grid + a USRP + a Quectel modem, ~60 min |
…you want real RF and a real commercial UE, without the O-RAN 7.2 split. |
| 3 | O-RAN 7.2 split, vendor O-RUs — Benetel, LiteOn & Foxconn | 7.2 split, commercial O-RU | an E810 server + a vendor O-RU + a Quectel modem, ~60–120 min | …you want the production shape: a real commercial radio over 7.2x. Benetel works three ways (CLI, Ansible, Jupyter). LiteOn works by the manual procedure. Foxconn does not attach yet. |
| — | Foxconn O-RU in detail | 7.2 split, commercial O-RU | as tutorial 3 | …you are working on the Foxconn path specifically. It is not attaching yet; the page records the status and what has been tried. |
| 4 | O-RAN 7.2 split, soft O-RU — ProtO-RU on a USRP N310 | 7.2 split, ProtO-RU + USRP | two E810 servers on sb1 + the N310 + a Quectel modem, ~60–90 min |
…you want to see both ends of the fronthaul: an O-RU in software, with its timing counters, driving an ordinary SDR. |
| 5 | Two-server split with Aether SD-Core — gNB + SD-Core over a 10 GbE data plane | USRP, direct — different core | two servers + a B210 or network N310/X310 + a Quectel modem, ~2–3 h | …you want the core to be the object of study: Kubernetes-native SD-Core on its own host, with N2/N3 on a real data plane. |
This table gives the best measured result for each modality on the three COSMOS server platforms, with the date and image of the measurement. The column to compare is the RAN server's CPU platform. Host names are deliberately left out. Each linked tutorial's own Performance section has every run and the method used.
| CPU platform | Cores / threads |
|---|---|
| A — 2× Intel Xeon Gold 6226 @ 2.70 GHz (Cascade Lake) | 24 cores / 24 threads (HT off) |
| B — 2× Intel Xeon Gold 6126 @ 2.60 GHz (Skylake-SP) | 24 cores / 48 threads (HT on) |
| C — 1× AMD EPYC 9355P (Zen 5) | 32 cores / 32 threads (SMT off), one NUMA node |
| Modality | Radio / UE | Platform | DL, Mbit/s | UL, Mbit/s | Date · image |
|---|---|---|---|---|---|
| Soft-only (ZMQ, band 3, 10 MHz) | srsue |
A | 26.2–26.6 | 4.62–4.82 | 2026-09-14 · ocudu-20260909b (three-mode parity) |
| B | 26.1–26.2 | 4.72–5.02 | 2026-09-14 · ocudu-20260909b (three-mode parity) |
||
| C | 27.2 | 5.03 | 2026-09-14 · ocudu-20260909b (three-mode parity) |
||
| Over-the-air (N310, n41 40 MHz) | Quectel RM520N-GL | A | 54.7–55.8 | 58.6–59.1 | 2026-09-17 · ocudu-20260916 (three-mode parity PASS) |
| B | not measured | — | — | ||
| C | not measured — rrail has no USRP of its own | — | — | ||
| O-RAN 7.2, vendor O-RU: Benetel RAN650 (100 MHz n78) | Quectel RM520N-GL | A | 106–123 | 78–79 | 2026-09-17 · ocudu-20260916 (two runs; one mode per run collapses to 37–54 DL at identical RSRP/SINR — under investigation) |
| B | 248 | 77.4 | 2026-09-09 · ocudu-20260909b |
||
| C | 104 | 79.8 | 2026-09-14 · ocudu-20260909b (tutorial bundle, Ansible mode) |
||
| O-RAN 7.2, vendor O-RU: LiteOn FlexFi (100 MHz n78) | Quectel RM520N-GL | A | 170–195 | 136–140 | 2026-09-14 · ocudu-20260909b (3 runs; DL BLER ~1 %) |
| B | 154 | 48.6 | 2026-09-14 · ocudu-20260909b (DL BLER ~70 % on this host — open) |
||
| C | 140–155 | 131–145 | 2026-09-14 · ocudu-20260909b (3 runs) |
||
| O-RAN 7.2, vendor O-RU: Foxconn RPQN-7801 | Quectel RM520N-GL | B | not measured — the UE does not attach yet | — | 2026-09-14 (status only) |
| O-RAN 7.2, soft O-RU: ProtO-RU + USRP N310 (40 MHz n41, 1×1) | Quectel RM520N-GL | A | 88–103 | 38–39 | 2026-09-15 · ocudu-20260915 (4 runs; UL bounded by DDDSU) |
Rows use different carriers (10 MHz soft-only, 40 MHz over the air, 100 MHz on the 7.2 rows), so compare within a modality, not across modalities. On the Benetel, platform B's extra hardware threads let 18 cores be isolated for the fronthaul and PHY instead of 9. That, not the clock speed, is the most likely reason for the roughly 2.4× DL difference. The two Benetel runs also differ in date and procedure, so a same-day A/B has not been done.
omf-ocudu. PHY/YAML reference: skill ocudu-gnb. Core: skill open5gs-core. UE: skill quectel-5g-modem.gitlab.com/ocudu/ocudu (development; github.com/ocudu/ocudu is a mirror) · docs at docs.ocudu.org, and srsRAN Project's configuration reference at docs.srsran.com.Author(s): COSMOS team · Last verified: 2026-09-14 (landing page; see each linked tutorial for its own verification date; the performance table is compiled from those tutorials' measurements) · Tested image/release: ocudu.ndz = ocudu-20260909b · Tags: ocudu, srsran, 5g, sa, oran, overview