Overview
dflux Runner is a 5G/4G protocol load and conformance tester — one Go binary that simulates network elements such as gNB, AMF, MME, UDM, AUSF, and SMF/UPF. It drives deterministic procedures over NGAP, Diameter, SBI, REST, and PFCP, plus GTP-U user-plane traffic on N3, against real or simulated cores.
It is for the test/integration engineer who needs to gate a build with a registration smoke run, lean on an AMF for an hour with a hundred concurrent UEs, exercise a vendor's policy plane via Diameter Gx and Rx, or terminate user-plane traffic on a clean receiver and read the throughput back.
What ships
- Five wire protocols — NGAP/SCTP (3GPP TS 38.413), Diameter S6a/Gx/Rx (RFC 6733; 3GPP TS 29.272/29.212/29.214), SBI HTTP/2 (3GPP TS 29.500-series), REST HTTP/2, PFCP (3GPP TS 29.244)
- {flows} ready-to-run flows and {suites} suites across NGAP, SBI, REST, PFCP, and Diameter — browse the flow catalog, or read the source YAML in the templates repository
- A declarative YAML schema for authoring custom flows as state machines — action types including
send,check,extract,uplane_start,ngap_realloc,ngap_handover_swap,parallel_send, andcmd(the last is off unless you pass-allow-cmd-actions); check operators;{{...}}template expressions - Suite runner with per-step workload,
stop_on_failuregating,always_runcleanup steps, and JSON reports for CI gating - NF roles for gNB, AMF, SMF, AUSF, UDM, PCF, NRF, UPF, MME, PGW, AF, plus
externalfor non-3GPP peers - Server-mode flows — auto-spawn on first inbound message; ship for AMF, UDM, AUSF, UPF, Edge-admin
- GTP-U user-plane via embedded DPDK or kernel-socket userspace receiver
- Single static binary — no runtime dependencies
How it's used
Two front-ends, same engine underneath:
- CLI one-shot —
d3x-run run-flow -flow registration -c lab.yaml. File-driven, deterministic.run-flowexits0on verdictpass,1on fail,3onunsupported. The mode CI gates plug into. No control plane required. - Agent mode —
d3x-run daemon -console <addr>. The runner registers with the control plane, executes jobs in memory, streams events and the report back, and holds nothing between jobs. Use this for a continuous test plane.
Both share the same flow catalog, the same protocol stacks, the same FSM dispatcher, and the same JSON report shape.
What it's not
dflux Runner is intentionally not a 3GPP simulator. It does not implement the full state machine of any NF. It implements the FSM model the test author declares — which is exactly what a tester wants for conformance and load work and exactly what a simulator wants to avoid.
If you need a working AMF, run an AMF; the shipped registration_amf flow is a wiring stub, not a replacement.
The runner itself is a stateless execution engine. Durable state — catalogs, report history, schedules, subscriber pools — lives in the control plane when you run agents continuously. The CLI path never needs that.
Where to go next
- Why dflux Runner — when to pick it, what it replaces, where its limits are
- Quickstart — build, run a flow, read a report (10 minutes)
- Concepts overview — flow, FSM, suite, environment in depth
- Flow catalog — every shipped flow and suite