This group is a course in building and measuring private 5G Standalone networks on COSMOS. It starts
from the concepts a Linux-literate reader needs (what a 5G network is made of, how a phone attaches,
how O-RAN splits the base station), helps you choose among three RAN stacks and three cores, and then
walks through hands-on tutorials in order: a network entirely in software, then real radios over the
air, then the O-RAN 7.2 fronthaul with software and commercial radio units, a cloud-native core, RAN
intelligence over E2, and finally measurement at scale. Every stack uses the same test network
(PLMN 00101), the same UE address pool (192.168.100.0/22, with internet) and the same commercial
UE, so what you learn in one tutorial carries into the next.
Figure — Read the foundations, choose a stack, then work through the seven tutorial stages in order. Each stage adds one new thing that can fail on its own: a radio, a fronthaul, a second server, a controller.
Work through the course in this order:
Every tutorial runs in one of three modalities: soft-only (no radio), over the air with a
software-defined radio, or split at O-RAN 7.2 with a separate radio unit.
Figure — The three modalities side by side. The protocol stack is the same in all three; only what stands between the gNB and the UE changes.
Concept pages. They explain why; the tutorials assume them.
| Page | What it teaches |
|---|---|
| 5G SA fundamentals | UE, RAN and core; the core's network functions and interfaces; the radio protocol stack; numerology, bands, TDD patterns, SSB and PRACH; identities and SIMs; the attach story from cell search to an IP address; the three COSMOS modalities. |
| O-RAN architecture and the 7.2x fronthaul | Why the RAN is disaggregated; O-RU, O-DU, O-CU, RICs and their interfaces; split options and why 7.2x; the four fronthaul planes, eAxC, compression and timing windows; M-Plane and O-RU management modes; the golden O-RU rule. |
| Real-time host preparation | Preparing a server to run a real-time RAN: CPU isolation, hyperthread siblings, IRQ pinning, hugepages, SR-IOV and DPDK, PTP, MTU. |
| Commercial UE: the Quectel modem | The Quectel RM520N-GL as a 5G UE: SIMs, SA-only mode, AT and QMI, registration, data bring-up, routing, recovery. |
| O-RAN radio units | The COSMOS O-RU pool: which radios exist, their bands and management modes, which stack drives which, power control, the shared-RF-space rule. |
Overview pages. Each one says what the component is, how it runs on COSMOS, when to choose it, its
tutorials in order, and its measured performance by CPU platform.
RAN platforms
| Page | What it is | Choose it when | Components at a glance |
|---|---|---|---|
| 5G SA platforms | the comparison page | you have not chosen yet | modality × platform matrix, UE options |
| OCUDU (srsRAN) | open-source 5G CU/DU, srsRAN Project | you want the widest O-RU support and a built-in E2 agent for RIC work | gnb · srsue · ProtO-RU (soft O-RU) · Open5GS |
| Duranta (OAI) | open-source 5G CU/DU, OpenAirInterface fork | you need the O-RAN M-Plane client, or OAI's own soft O-RU and soft UE | nr-softmodem · nr-uesoftmodem · nr-oru (soft O-RU) · M-Plane client · OAI CN5G |
| Amarisoft | commercial 4G/5G reference stack | you want a known-good reference, 4G as well as 5G, or many simulated UEs at once | lteenb · ltemme · lteue (multi-UE) · floating licence |
5G cores
| Page | What it is | Choose it when | Components at a glance |
|---|---|---|---|
| Open5GS | open 5G core running natively under systemd | you want the simplest core — one host, no Kubernetes, quick to restart | AMF · SMF · UPF · NRF · AUSF/UDM/UDR · PCF/NSSF/BSF · MongoDB |
| OAI CN5G | the OpenAirInterface core, run as Docker containers | you are using Duranta, whose images ship it | AMF · SMF · UPF · NRF · AUSF · UDM · UDR · MySQL · ext-dn |
| SD-Core (Aether) | open 5G core, Kubernetes-native (Helm on RKE2); hands-on: Deploy Aether SD-Core | you want a cloud-native core, slicing, or the Aether/OnRamp tooling | AMF · SMF · UPF (BESS dataplane) · NRF · simapp · MongoDB · Kafka |
In learning-path order. Within a stage the tutorials are alternatives: pick the one for your stack.
| Stage | Tutorial | Platform | Modality · where | Status |
|---|---|---|---|---|
| 1 — Soft-only | OCUDU 5G SA Soft-Only — gNB + srsUE + Open5GS over ZMQ | OCUDU | Soft-only · any server | working — three ways |
| Duranta 5G SA Soft-Only — gNB + nrUE + OAI CN5G over RFsim | Duranta | Soft-only · any server | working — three ways | |
| Duranta 5G NTN — a Satellite Link (GEO and LEO) over RFsim | Duranta | Soft-only, simulated satellite · any server | working — three ways (optional branch after stage 1) | |
| 2 — Over the air | OCUDU 5G SA Over-the-Air — Cross-Vendor gNB + Open5GS + Modem and lteue | OCUDU | OTA · sb1 | working — three ways |
| Duranta 5G SA Over-the-Air — gNB + OAI CN5G + Commercial Modem | Duranta | OTA · sb1 / grid | working — three ways | |
| Amarisoft 5G SA Over-the-Air — gNB + Core + Soft UE on a USRP | Amarisoft | OTA · sb1 / grid | working (last verified 2026-07-15) | |
| 3 — O-RAN 7.2, soft O-RU | OCUDU 5G SA with a Soft O-RU — O-DU ↔ ProtO-RU on a USRP N310 | OCUDU | 7.2 split, soft O-RU · sb1 | working end to end |
| Duranta 5G SA with a Soft O-RU — O-DU ↔ nr-oru on a USRP | Duranta | 7.2 split, soft O-RU · osc (B210) | working end to end | |
| 4 — O-RAN 7.2, commercial O-RU | OCUDU 5G SA over O-RAN 7.2 — Benetel, LiteOn & Foxconn O-RUs | OCUDU | 7.2 split, commercial O-RU · sb1 / osc | Benetel three ways and LiteOn manual working; Foxconn not yet |
| Duranta 5G SA over O-RAN 7.2 — Benetel, LiteOn & Foxconn O-RUs | Duranta | 7.2 split, commercial O-RU · osc | Benetel and LiteOn working; Foxconn blocked | |
| Amarisoft 5G SA over O-RAN 7.2 — LiteOn FlexFi O-RU | Amarisoft | 7.2 split, LiteOn O-RU · osc | working (manual procedure, 30 MHz 4T4R; verified 2026-10-10) | |
| OCUDU 5G SA over a Commercial Foxconn O-RU | OCUDU | 7.2 split, Foxconn O-RU · osc | status page — partly unblocked, not attaching yet | |
| 5 — Cloud-native core | Deploy Aether SD-Core — a Kubernetes-Native 5G Core on One COSMOS Server | Aether SD-Core | core only, one server · osc / sb1 | working (last verified 2026-09-19) |
| Two-Server 5G SA — OCUDU gNB + SD-Core over a 10 GbE Data Plane | OCUDU + Aether SD-Core | OTA, two servers · sb1 / grid | working end to end | |
| 6 — RAN intelligence | Near-RT RIC + OCUDU — E2 KPM Monitoring of a Live 5G SA Rig | OCUDU + O-RAN SC RIC | E2/KPM on soft, LiteOn and Benetel rigs · osc | monitoring working; E2SM-RC control rejected by this OCUDU build |
| Aether SD-RAN with RANSim — Deploy the ONOS near-RT RIC on the SD-Core Cluster and Read KPM | Aether SD-RAN (+ SD-Core cluster) | E2/KPM with a simulated RAN · osc | working with RANSim (2026-09-22); real-gNB E2 Setup open | |
| 7 — Scale and measurement | Amarisoft controlled cell: UE capacity sweep and performance — three ways | Amarisoft | OTA, 1–64 soft UEs · osc + sb1 RAN server | working — three ways |
"Three ways" means the tutorial ships the same experiment as manual commands, an Ansible playbook
and a Jupyter notebook, and a parity harness checks that all three agree.
A near-real-time RAN Intelligent Controller (RIC) watches and steers a live RAN over the E2
interface without sitting in the data path; the Service Management and Orchestration (SMO) layer
with its non-real-time RIC sets policy above it. Both are optional: every tutorial above works
without them.
| Page | What it is | Components at a glance |
|---|---|---|
| Near-RT RIC (O-RAN SC RIC) | what a near-RT RIC is, E2 and its service models; the O-RAN SC RIC that COSMOS uses with its real radios | e2term · e2mgr · submgr · E2SM-KPM · E2SM-RC · Python xApps |
| SD-RAN (Aether) | the ONOS-based near-RT RIC on Kubernetes, deployed on the SD-Core cluster; works with its RAN simulator | onos-e2t · onos-topo · onos-uenib · onos-kpimon · RANSim |
| O-RAN SMO | O-RAN SC SMO, N release, on one server: non-RT RIC (A1 policy, rApps), SDN-R/ODLUX (O1), TEIV topology; load smo-20260925.ndz or build it from scratch |
A1 · O1 · non-RT RIC · rApps · SDN-R |
The best result measured on each platform so far. The per-platform pages have every modality on each server platform, including the gaps: 2× Xeon Gold 6226, 2× Xeon Gold 6126 and a single-socket AMD EPYC 9355P. On the EPYC, Duranta's soft-only cell runs at about 3× the Xeons (DL 447 / UL 201 Mbit/s).
UDP is the rate the receiver got at the highest offered load (the cell's ceiling; the loss at that load is the price). TCP is the best single iperf3 run over 1, 4 and 8 parallel streams. All rows use one UE.
| Platform | Configuration | UE | RAN server CPU platform | DL UDP, Mbit/s | DL TCP, Mbit/s | UL UDP, Mbit/s | UL TCP, Mbit/s | Date · image |
|---|---|---|---|---|---|---|---|---|
| OCUDU (srsRAN) | O-RAN 7.2 split, Benetel RAN650 O-RU, n78, 100 MHz, 2 DL layers | SIMCom SIM8200 on USB 3 | 2× Intel Xeon Gold 6126 @ 2.60 GHz, 24 cores / 48 threads | 571 (lossless up to 314) | 198 | 81.9 | 80.3 | 2026-09-28 · ocudu-20260928 |
| OCUDU (srsRAN) + ACC100 | as above, Intel ACC100 LDPC offload | SIMCom SIM8200 on USB 3 | 1× AMD EPYC 9355P, 32 cores / 32 threads | 572 (lossless up to 314) | 214 | 72.9 | 75.9 | 2026-09-29 · ocudu-20260928 |
| Duranta (OAI) | O-RAN 7.2 split, Benetel RAN650 O-RU, n78, 100 MHz, 4 DL layers | SIMCom SIM8200 on USB 3 | 1× AMD EPYC 9355P, 32 cores / 32 threads | 830 (601 at 1.5 % loss) | 221 | 63 | 62 | 2026-09-25 · duranta-20260925 + CSI-RS; TCP 221 on duranta-w39-20260928 (2026-09-29) |
| Duranta (OAI) + ACC100 | as above, 1 DL layer, Intel ACC100 LDPC offload | SIMCom SIM8200 on USB 3 | 2× Intel Xeon Gold 6126 @ 2.60 GHz, 24 cores / 48 threads | 367 | 221 | 59.2 | 52.2 | 2026-09-27 · duranta-20260927 |
| Amarisoft | 5G SA over the air, n41, 40 MHz TDD | lteue, 1 UE |
2× Intel Xeon Gold 6126 @ 2.60 GHz, 24 cores / 48 threads | 76 (median of 5 runs: 57) | not measured | 21 (median 4.4) | not measured | 2026-09-13 · amarisoft-20260904 |
TCP stops near 200 Mbit/s on every row, whatever the cell's UDP ceiling: a single UE's TCP is limited by the modem and the round trip, not by the RAN, so compare cells by UDP. Earlier single-stream TCP peaks of 248 (OCUDU, 2026-09-09) and 268 Mbit/s (Duranta, 2026-09-07) were measured with a Quectel RM520N-GL and no UDP run.
CPU decides Duranta's layers. On the 2× Xeon Gold 6126 servers Duranta runs one DL layer (UDP 348, TCP 208, UL 61 / 53 on duranta-20260927); multi-layer needs more real-time CPU than that server leaves, and duranta.ndz picks the layer count from the host automatically. OCUDU runs 2 layers on the same Xeon.
ACC100 moves LDPC encoding and decoding onto an Intel ACC100 card in the same server. At one UE the throughput is set by the radio, so the gain shows as CPU (Duranta's DU uses about 0.5 core less during downlink). Both stacks ran a 40-minute full-load ACC100 soak without a single error on the Supermicro AMD EPYC server. ⚠️ Not on the HPE DL380 Gen10 servers (2× Xeon Gold 6126): there OCUDU's offload reset the server under load through an uncorrectable PCIe error on the card's slot, so ocudu-gnb --acc100 refuses to start on HPE hardware; Duranta's offload has not reset one.
The Amarisoft row uses a 40 MHz carrier and the others 100 MHz, so its figures are not directly comparable. Amarisoft also runs over O-RAN 7.2 with the LiteOn (DL 161–168 / UL 5 Mbit/s on a 30 MHz cell, the widest its licence allows with 4 antenna ports; see the 7.2 tutorial). Amarisoft measured ≈ 132 / 24 Mbit/s on a 100 MHz N310 cell on 2026-07-15, but that run predates recording the CPU platform.
With the rig's golden O-RU state restored (2026-09-22, same CPU platform), the Benetel measures
OCUDU DL 209–220 / UL 78 and Duranta DL 186–218 / UL 57–61 Mbit/s; the per-platform pages list every
row.
omf load; the simple names (ocudu.ndz,duranta.ndz, amarisoft.ndz) point at the newest promoted build.Kept for reference. They predate the course, are not part of the learning path, and have not been
re-verified; each carries a status note at the top.
| Tutorial | About |
|---|---|
| Amarisoft 4G/5G Network in the Weeks Hall Domain | Set up and test a 4G/5G cellular network in the weeks.cosmos domain using Amarisoft software on a USRP-2974 (eNB/gNB + MME) and a COSMOS node with a Waveshare SIM8200 modem as the UE. |
| Getting Started with InterDigital 5G NR Performance System | Set up a 5G NR over-the-air link on COSMOS Sandbox 1 using the InterDigital 5G-NR Performance Platform, route IP traffic end-to-end through the mmWave link, and measure throughput with iperf3. |
| InterDigital EdgeLink mmWave Mesh Transport System | Demonstrate the InterDigital EdgeLink mmWave Mesh Transport System on COSMOS sandbox 1, configuring the mesh network controller, ONOS SDN controller, and the Orchestrator to establish and provision mmWave mesh links between Gateway and non-Gateway nodes. |
| LTE eNB and UE with OpenAirInterface (No-S1 Mode) | Run an OpenAirInterface LTE softmodem eNB and UE on two COSMOS nodes with USRP radios, establish an over-the-air link without an EPC (no-S1 mode), and verify end-to-end IP connectivity between the two nodes. |
Author(s): COSMOS team · Last reviewed: 2026-09-24 (course map; see each linked page for its own verification date) · Tags: 5g, 4g, lte, sa, oran, cellular, course, index
Part of the COSMOS Tutorials collection.