Skip to content

User plane

Besides signalling, rk sends and measures user-plane traffic over GTP-U, through the UPF under test.

How traffic starts

A flow starts traffic with the uplane_start action, usually once the PDU session is up:

  • it takes the tunnel from the session: the core's TEID and N3 address, the UE's IP and the QFI;
  • it sends for duration;
  • the flow continues when traffic completes, and the result is in the report's uplane_report.

uplane_start can override the session values:

ParameterWhat it sets
remote_teid, remote_addrthe core's tunnel end
local_teidthe gNB's tunnel end (not zero)
ue_ipthe UE address
target_addr, target_addr6where traffic goes; needed for an IPv4 UE
durationhow long to send
qfi1–63; by default, the QFI the core granted
protocolicmp, udp or tcp
ppspackets per second, 1–1,000,000
payload_size1–65507 bytes, USPACE only
dfset the don't-fragment bit, USPACE only
udp_dnul, dl or bidir

Datapaths

The gNB's uplane.type picks how packets are sent:

TypeHowBuild and licence
USPACEkernel socketsevery build, no licence feature
DPDKa DPDK helper process with its own NICthe full build, Linux amd64, the licence feature datapath.dpdk, and enough max_dpdk_cores for dpdk_lcores
MOCKsends nothingfor testing flows only; measures nothing

The community build has no DPDK code. Asking it for DPDK stops the run with exit code 4 and a message pointing to the full build.

USPACE tuning: gtpu_rcvbuf and gtpu_sndbuf (4 MiB by default; capped without CAP_NET_ADMIN), gtpu_readers, gtpu_writers, gtpu_batch (64), gtpu_no_gso, gtpu_no_gro.

DPDK needs these uplane fields:

  • mode and protocol;
  • lport_range_min and lport_range_max;
  • port_pci: a PCI address, or af_packet:<ifname>;
  • port_addr, port_gateway and target_addr;
  • listen_port_start or listen_port_num.

Optional: tx_burst (32 by default, 1–1024) and dpdk_lcores (1–64).

gNBs that share an N3 address share one socket. They must use the same type and protocol.

The far end: rk server

rk server answers the traffic rk sends, so you control both ends:

  • rk server uspace: a kernel-socket echo server. Needs -protocol; ICMP needs CAP_NET_RAW or root.
  • rk server dn: a data-network endpoint. With -gtpu, it terminates N3 itself on port 2152, with no core in between. -allow limits which UE addresses it answers (by default 10.45.0.0/16).
  • rk server dpdk: a DPDK reflector. Needs the full build and datapath.dpdk; -gtp and -gtpu-teid make it a GTP-U endpoint.

rk server -h lists each backend's flags.