Licensing
rk runs without a licence file. With no file it uses the community allowance. A signed licence file from dflux unlocks more protocols, features and limits.
What runs without a licence
The community allowance grants:
- Protocols: NGAP as a gNB (client side), SBI, REST.
- Machine-readable reports:
-output jsonand-output junit. - Limits: 100 flow starts per second, 1000 subscribers, 1000 concurrent user-plane sessions.
- Always available: user-plane traffic over GTP-U, and
rk subscriber generate.
It doesn't grant Diameter, PFCP, a GTP-U-only gNB, the AMF side of NGAP or any other server-mode flow, suites, Prometheus metrics, fuzzing, the DPDK datapath, or daemon mode. A run that needs one of these stops before it starts (exit code 5) and names what it needs.
Where rk looks for the licence
There is no command-line flag for the licence. rk uses the first of these that's set or exists:
- the file named by
$D3X_LICENSE_FILE ~/.dflux/d3x.lic~/.dflux/runik.lic/etc/dflux/d3x.lic/etc/dflux/runik.lic
If none of them exists, rk uses the community allowance and prints a notice saying so.
rk fails closed. It refuses to run, rather than falling back to the community allowance, when:
- the file can't be read;
- the signature doesn't verify;
D3X_LICENSE_FILEnames a file that doesn't exist.
Expiry
A licence has an expiry date, followed by a 30-day grace period:
- During the grace period,
rkruns and prints a warning. - After it,
rkrefuses to start.
Long-running processes (rk daemon, rk server) re-check the licence every 24 hours and only warn. Once its licence is past the grace period, rk daemon refuses new jobs; a job already running finishes.
To load a new licence, replace the file. rk daemon re-reads it on SIGHUP. If the new file doesn't load, the daemon keeps the old one and logs an error.
Features, editions and limits
Features
| Feature | Unlocks | Edition | Community |
|---|---|---|---|
proto.rest | REST transports and flows (HTTP/JSON vendor and admin APIs). | Standard and up | yes |
proto.sbi | SBI transports and flows (5G HTTP/2 service-based interfaces). | Standard and up | yes |
report.machine | Machine-readable reports: -output json and -output junit. | Standard and up | yes |
proto.ngap | NGAP over SCTP (N2). The community allowance covers the gNB side; the AMF side also needs server.mode. | Pro and up | yes |
proto.diameter | Diameter (S6a, Gx, Rx). | Pro and up | |
proto.pfcp | PFCP over UDP (N4). | Pro and up | |
proto.gtpu | GTP-U transports: an N3-only gNB and the UPF reflector. | Pro and up | |
server.mode | Answering inbound traffic: the AMF side of NGAP, server SBI, REST and PFCP, a Diameter listener. | Pro and up | |
suites | Rk run-suite. | Pro and up | |
obs.prometheus | Prometheus metrics: -metrics-port. | Pro and up | |
robustness.fuzz | Fuzzing: flows with a fuzz: block, and rk fuzz. | Pro and up | |
datapath.dpdk | The DPDK user plane, and rk server dpdk. | Enterprise | |
fleet.worker | Rk daemon: a worker for Runik Control. | Enterprise | |
diameter.custom_dict | Custom Diameter AVP dictionaries (diameter_dictionary_path). Also grants proto.diameter. | Enterprise |
Editions include everything below them: Enterprise includes Pro, and Pro includes Standard.
Limits
| Limit | What it caps | Community | Standard | Pro | Enterprise |
|---|---|---|---|---|---|
max_rate | Flow starts per second. | 100 | 10 | 100 | unlimited |
max_concurrent_connections | Concurrent user-plane sessions. | 1,000 | 100 | 10,000 | unlimited |
max_subscribers | Subscribers. | 1,000 | 100 | 10,000 | unlimited |
max_dpdk_cores | CPU cores for the DPDK user plane. | 0 | 0 | 0 | unlimited |
max_repetitions | Flow starts per run. | unlimited | 100 | unlimited | unlimited |
max_flows | Flows in the template catalog. | unlimited | 100 | unlimited | unlimited |
Always available, with or without a licence: uplane.traffic, uplane.gtp, subscriber.generate.
How each limit is counted:
- Rate: the run's highest start rate. For a load run, that's its fastest step.
- Starts: the run's planned flow starts. An unbounded run (
-repetitions 0) is refused under any cap. - Subscribers: the larger of the number of subscribers in
-sand the numberrkgenerates (one per start with-gen-subscriberor-subscriber-seed). - Suites: each step is checked against the limits on its own.
A run over a limit stops before it starts, with exit code 5 and a message such as license (edition pro) caps max_rate at 100 starts/s, but 400 requested. Every violation is listed at once.
Check a configuration against your licence
rk validate -flow <name> -templates <dir> -c <env.yaml> reports whether your licence allows the flow and environment, without running anything.