Open5GS is an open-source 4G EPC and 5G Core, AGPL-licensed, installed natively (not containerised) on the COSMOS RAN images. It is the core behind every OCUDU (srsRAN) tutorial, from the zero-hardware soft-only cell to the O-RAN 7.2 split with a commercial radio. This page is the map: what the core is made of, which tutorials use it, and the operational facts that are not obvious from upstream documentation.
COSMOS runs Open5GS as a set of systemd services on the RAN host itself — there is no Kubernetes and no container runtime in the path. That is deliberate: it keeps the core out of the way when the interesting part of the experiment is the radio, and it means a soft-only 5G SA cell needs exactly one reserved node.
Where a core is a first-class object of study rather than a dependency, COSMOS also ships Aether SD-Core, which is Kubernetes-native and closer to a production deployment. The two are interchangeable from the gNB's point of view: same PLMN, same UE pool, same N2/N3 interfaces.
Open5GS implements the 3GPP service-based architecture as one process per network function. On the COSMOS images they are all present, all managed by systemd, and all configured from /etc/open5gs/.
| Component | Role | Unit | Config |
|---|---|---|---|
| AMF | Access & Mobility Management — terminates N2/NGAP from the gNB, handles registration and NAS | open5gs-amfd |
/etc/open5gs/amf.yaml |
| SMF | Session Management — PDU sessions, IP allocation, PFCP (N4) to the UPF | open5gs-smfd |
/etc/open5gs/smf.yaml |
| UPF | User Plane — the N3/GTP-U data path and the ogstun interface the UE's traffic leaves through |
open5gs-upfd |
/etc/open5gs/upf.yaml |
| NRF | NF Repository — service discovery; every other NF registers here | open5gs-nrfd |
/etc/open5gs/nrf.yaml |
| AUSF / UDM / UDR | Authentication and subscriber data (5G-AKA, Ki/OPc, subscription profiles) | open5gs-ausfd, -udmd, -udrd |
matching .yaml |
| PCF / NSSF / BSF | Policy, slice selection, binding support | open5gs-pcfd, -nssfd, -bsfd |
matching .yaml |
| SCP | Service Communication Proxy — indirect SBI routing between NFs | open5gs-scpd |
/etc/open5gs/scp.yaml |
| MongoDB | the subscriber database | mongod |
— |
| WebUI | browser subscriber editor (Node.js, port 9999) | open5gs-webui |
— |
The 4G EPC functions (open5gs-mmed, -sgwcd, -sgwud, -hssd, -pcrfd) are installed too, but none of the standardized COSMOS 5G SA tutorials use them.
Almost every core-side problem on this testbed comes down to one of these:
amf.yaml — the PLMN, the TAC, and the NGAP bind address. The gNB's plmn and tac must match what the AMF serves, or NG Setup is rejected.smf.yaml — the UE address pool and the DNN. COSMOS standardizes on 192.168.100.0/22 and an internet-capable DNN.upf.yaml — the N3 (GTP-U) bind address and the ogstun device. If the gNB and UPF are on different hosts, this is the address that must live on the data plane, not the management network.COSMOS provisions SIMs with cosmos-sim-gen open5gs, which writes the IMSI/Ki/OPc set straight into MongoDB. Use it rather than the WebUI for anything scripted — it is idempotent and it is what the tutorial bundles call.
⚠️ SIM data belongs on core servers only. Provision on the host running the core; never pass Ki/OPc through console parameters or bundle variables. Experiment bundles carry the IMSI only.
| Tutorial | RAN stack | Modality | Core runs on |
|---|---|---|---|
| OCUDU 5G SA soft-only — gNB + srsUE over ZMQ | OCUDU (srsRAN) | No radio | the same single host as the gNB |
OCUDU 5G SA over-the-air — cross-vendor gNB + modem and lteue |
OCUDU (srsRAN) | USRP, direct | the gNB host |
| OCUDU 5G SA over O-RAN 7.2 — Benetel, LiteOn & Foxconn O-RUs | OCUDU (srsRAN) | 7.2 split, commercial O-RU | the O-DU host |
| OCUDU 5G SA with a soft O-RU — ProtO-RU on a USRP N310 | OCUDU (srsRAN) | 7.2 split, soft O-RU | the O-DU host |
Duranta (OAI) tutorials use OAI CN5G instead, and Amarisoft ships its own integrated core — so Open5GS is specifically the OCUDU pairing.
These are measured on COSMOS and are not in the upstream documentation.
unknown-PLMN, gives up, and does not retry — it simply sits there disconnected with nothing further in its log.systemctl status is not evidence that the core works. Every NF can be active (running) while the AMF rejects NG Setup. The gate that means something is the gNB logging a successful NG Setup response.192.168.100.0/22 has to have a route toward the UPF host, or the PDU session establishes and no traffic returns — which looks like a radio problem and is not.open5gs-core. UE side: skill quectel-5g-modem.Author(s): COSMOS team · Last verified: 2026-09-21 (landing page; see each linked tutorial for its own verification date) · Tested image/release: ocudu.ndz · Tags: open5gs, 5gc, core, 5g, sa, overview