Run the core natively
Start NRF, DPF, UPF, and DMF as plain host processes and wire them together on localhost.
What you are starting
A working core comes up in a fixed order: the NRF first (everyone registers with it), then the DPF (subscribers and policy), the UPF (user plane), and finally the DMF (AMF + SMF), which dials the DPF, NRF, and UPF it was told about. The flag sets below retarget the canonical deploy/lab/docker-compose.yml topology at localhost. Optional NSSF and SMSF are not required for this bring-up.
38412. SCTP is a kernel feature that is available on Linux but not on macOS, so attaching a gNB to a natively-run DMF only works on a Linux host. On macOS use the Docker lab instead. The SBI and PFCP paths run natively anywhere.d3x-core-nrf, and so
on). Compose files keep the short names because the lab image entrypoint expects
command: ["nrf", …].Install first
These commands assume the four required NF binaries are on your PATH. If they are not, install the binaries first.
Four terminals, in order
Open four terminals and start each required NF in its own. Wait for the NRF to be up before launching the rest.
Terminal 1 — NRF
The NRF listens for SBI registrations on :8080. Note its -plmn takes comma-separated mcc,mnc, unlike the dash form the DMF and DPF use.
Terminal 2 — DPF (seeded)
-seed installs the built-in test subscribers into the in-memory store so you have something to register with. -rate-disable turns off per-IP rate limiting, which is convenient in a lab. See Provision subscribers for persistent stores and the seeded vectors.
Terminal 3 — UPF
The UPF defaults to the stub datapath, which accepts PFCP sessions and does the full control-plane dance but does not forward real packets. That is the right choice for verifying registration and session establishment. To forward actual traffic you switch to -datapath userspace (which opens a TUN and needs CAP_NET_ADMIN) — see the UPF datapath guide.
Terminal 4 — DMF (AMF + SMF)
DMF and UPF both default to UDP :8805 for PFCP. On one host, bind the DMF's N4 listener on :8806 and point -upf at the UPF's address.
The DMF ties the core together: -dpf for authentication and subscriber data, -nrf for registration and discovery, and one or more repeatable -upf flags naming the UPF's PFCP address. -pfcp-ip is the IPv4 the DMF advertises in its PFCP F-SEID; on localhost set it to 127.0.0.1 so the UPF replies to the right address. The -plmn, -tac, and -sst values must match what your gNB advertises — see Connect a gNB.
-nrf URL or starting out of order. Stop, fix, and restart from the NRF down.Where to go next
- Attach a RAN: Connect a gNB or RAN simulator.
- Prefer containers? The Docker lab tutorial brings the same topology up with one command (and also starts optional NSSF and SMSF).
- Full flags per binary: d3x-core-dmf, d3x-core-dpf, d3x-core-nrf, and d3x-core-upf.