Skip to content

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 json and -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:

  1. the file named by $D3X_LICENSE_FILE
  2. ~/.dflux/d3x.lic
  3. ~/.dflux/runik.lic
  4. /etc/dflux/d3x.lic
  5. /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_FILE names a file that doesn't exist.

Expiry

A licence has an expiry date, followed by a 30-day grace period:

  • During the grace period, rk runs and prints a warning.
  • After it, rk refuses 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

FeatureUnlocksEditionCommunity
proto.restREST transports and flows (HTTP/JSON vendor and admin APIs).Standard and upyes
proto.sbiSBI transports and flows (5G HTTP/2 service-based interfaces).Standard and upyes
report.machineMachine-readable reports: -output json and -output junit.Standard and upyes
proto.ngapNGAP over SCTP (N2). The community allowance covers the gNB side; the AMF side also needs server.mode.Pro and upyes
proto.diameterDiameter (S6a, Gx, Rx).Pro and up
proto.pfcpPFCP over UDP (N4).Pro and up
proto.gtpuGTP-U transports: an N3-only gNB and the UPF reflector.Pro and up
server.modeAnswering inbound traffic: the AMF side of NGAP, server SBI, REST and PFCP, a Diameter listener.Pro and up
suitesRk run-suite.Pro and up
obs.prometheusPrometheus metrics: -metrics-port.Pro and up
robustness.fuzzFuzzing: flows with a fuzz: block, and rk fuzz.Pro and up
datapath.dpdkThe DPDK user plane, and rk server dpdk.Enterprise
fleet.workerRk daemon: a worker for Runik Control.Enterprise
diameter.custom_dictCustom Diameter AVP dictionaries (diameter_dictionary_path). Also grants proto.diameter.Enterprise

Editions include everything below them: Enterprise includes Pro, and Pro includes Standard.

Limits

LimitWhat it capsCommunityStandardProEnterprise
max_rateFlow starts per second.10010100unlimited
max_concurrent_connectionsConcurrent user-plane sessions.1,00010010,000unlimited
max_subscribersSubscribers.1,00010010,000unlimited
max_dpdk_coresCPU cores for the DPDK user plane.000unlimited
max_repetitionsFlow starts per run.unlimited100unlimitedunlimited
max_flowsFlows in the template catalog.unlimited100unlimitedunlimited

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 -s and the number rk generates (one per start with -gen-subscriber or -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.