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:
| Parameter | What it sets |
|---|---|
remote_teid, remote_addr | the core's tunnel end |
local_teid | the gNB's tunnel end (not zero) |
ue_ip | the UE address |
target_addr, target_addr6 | where traffic goes; needed for an IPv4 UE |
duration | how long to send |
qfi | 1–63; by default, the QFI the core granted |
protocol | icmp, udp or tcp |
pps | packets per second, 1–1,000,000 |
payload_size | 1–65507 bytes, USPACE only |
df | set the don't-fragment bit, USPACE only |
udp_dn | ul, dl or bidir |
Datapaths
The gNB's uplane.type picks how packets are sent:
| Type | How | Build and licence |
|---|---|---|
USPACE | kernel sockets | every build, no licence feature |
DPDK | a DPDK helper process with its own NIC | the full build, Linux amd64, the licence feature datapath.dpdk, and enough max_dpdk_cores for dpdk_lcores |
MOCK | sends nothing | for 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:
modeandprotocol;lport_range_minandlport_range_max;port_pci: a PCI address, oraf_packet:<ifname>;port_addr,port_gatewayandtarget_addr;listen_port_startorlisten_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 needsCAP_NET_RAWor root.rk server dn: a data-network endpoint. With-gtpu, it terminates N3 itself on port 2152, with no core in between.-allowlimits which UE addresses it answers (by default10.45.0.0/16).rk server dpdk: a DPDK reflector. Needs the full build anddatapath.dpdk;-gtpand-gtpu-teidmake it a GTP-U endpoint.
rk server -h lists each backend's flags.