Skip to content

Environment configuration

!-- Generated from the source code by make docs-gen. -->

Every key, from the Go source. A key is optional unless its description says otherwise.

nfs

Type: list of objects.

The inventory of network functions in this environment: those simulated by this daemon (gNB / AMF / MME / PGW / AF) and remote NFs reached over SBI (UDM / AUSF / …). Names are unique within the env.

KeyTypeDescription
nfs[].namestringName identifies the NF in this environment; flows and logs refer to it. Unique.
nfs[].rolestringThe kind of network function: gnb, amf, smf, ausf, udm, pcf, nrf, upf, mme, pgw, af, pcrf, hss, bsf, nssf, udr, nef, or external (a non-3GPP REST peer). One of: gnb, amf, smf, ausf, udm, pcf, nrf, upf, mme, pgw, af, pcrf, hss, external, bsf, nssf, udr, nef.
nfs[].plmnobjectThe NF's network: MCC and MNC. Diameter roles need it.
nfs[].plmn.mccstringThe mobile country code: three digits.
nfs[].plmn.mncstringThe mobile network code: two or three digits.
nfs[].transportstringThe key, under transports:, of the wire this NF uses.
nfs[].gnbobjectThe gNB identity the NGAP TX/RX pipeline needs that's not part of the wire (LocalSCTP/peers live on the NGAP transport).
nfs[].gnb.global_idobjectThe gNB's Global RAN Node ID, sent in NG Setup. gnb_id is required for a gNB on NGAP.
nfs[].gnb.global_id.plmnobjectThe gNB's PLMN.
nfs[].gnb.global_id.plmn.mccstringThe mobile country code: three digits.
nfs[].gnb.global_id.plmn.mncstringThe mobile network code: two or three digits.
nfs[].gnb.global_id.gnb_idstringThe gNB ID, as a decimal string.
nfs[].gnb.global_id.bit_lengthintegerThe gNB ID's length in bits (22-32).
nfs[].gnb.supported_taslist of objectsThe tracking areas the gNB serves, with their PLMNs and slices, sent in NG Setup.
nfs[].gnb.supported_tas[].tacintegerThe tracking area code.
nfs[].gnb.supported_tas[].plmnslist of objectsThe PLMNs broadcast in this tracking area, each with its slices.
nfs[].gnb.supported_tas[].plmns[].plmnobjectThe broadcast PLMN.
nfs[].gnb.supported_tas[].plmns[].plmn.mccstringThe mobile country code: three digits.
nfs[].gnb.supported_tas[].plmns[].plmn.mncstringThe mobile network code: two or three digits.
nfs[].gnb.supported_tas[].plmns[].sliceslist of objectsThe S-NSSAIs supported for this PLMN.
nfs[].gnb.supported_tas[].plmns[].slices[].sstintegerThe slice/service type (0-255).
nfs[].gnb.supported_tas[].plmns[].slices[].sdstringThe slice differentiator: six hex digits. Empty means none.
nfs[].gnb.paging_drxintegerThe gNB's default paging DRX cycle, in radio frames (32, 64, 128 or 256), sent in NG Setup.
nfs[].gnb.uplaneobjectUplane configures the gNB's user plane: the datapath and the traffic it sends. See the user-plane docs.
nfs[].gnb.uplane.typestringThe datapath: USPACE (kernel sockets), DPDK (full build, licence feature datapath.dpdk) or MOCK (sends nothing).
nfs[].gnb.uplane.protocolstringThe traffic inside the tunnel: 1 ICMP echo, 2 UDP, 3 TCP. One of: 0, 1, 2, 3.
nfs[].gnb.uplane.modestringPassed to the DPDK helper (--mode). Required for DPDK.
nfs[].gnb.uplane.cpuintegerThe first CPU the DPDK helper runs on.
nfs[].gnb.uplane.payload_sizeintegerThe payload of each packet, in bytes.
nfs[].gnb.uplane.durationstringHow long traffic runs, a duration (for example 5s). uplane_start's duration overrides it.
nfs[].gnb.uplane.concurrent_connectionsintegerHow many sessions the DPDK helper keeps open at once. Counts against the licence limit on concurrent user-plane sessions.
nfs[].gnb.uplane.keep_alivestringPassed to the DPDK helper (--keepalive).
nfs[].gnb.uplane.connections_per_secondintegerHow many connections the DPDK helper opens per second.
nfs[].gnb.uplane.lport_range_minintegerLportRangeMin and LportRangeMax bound the DPDK helper's local ports. Both required for DPDK.
nfs[].gnb.uplane.lport_range_maxintegerLportRangeMin and LportRangeMax bound the DPDK helper's local ports. Both required for DPDK.
nfs[].gnb.uplane.listen_port_startintegerListenPortStart and ListenPortNum are the ports the DPDK helper listens on: the first and how many. One of them is required for DPDK.
nfs[].gnb.uplane.listen_port_numintegerListenPortStart and ListenPortNum are the ports the DPDK helper listens on: the first and how many. One of them is required for DPDK.
nfs[].gnb.uplane.port_pcistringThe NIC the DPDK helper drives: a PCI address, or af_packet:ifname>. Required for DPDK.
nfs[].gnb.uplane.port_addrstringThe DPDK NIC's IP address. Required for DPDK.
nfs[].gnb.uplane.port_gatewaystringThe DPDK NIC's gateway. Required for DPDK.
nfs[].gnb.uplane.target_addrstringThe data-network host IPv4 traffic goes to (the inner destination). Required for traffic from an IPv4 UE.
nfs[].gnb.uplane.target_addr6stringThe IPv6 data-network host an IPv6 / IPv4v6 PDU session's user plane sends to (uplane_ipv6.go): the inner destination of its ICMPv6 echo / UDP probes. Empty = the IPv6 half of a session sends nothing past its Router Solicitation.
nfs[].gnb.uplane.local_gtpu_addrstringThis gNB's N3 address. Overrides the transport's local_gtpu or gtpu.local.
nfs[].gnb.uplane.remote_gtpu_addrstringThe core's N3 address. Overrides the gtpu transport's peer.
nfs[].gnb.uplane.gtpu_rcvbufintegerThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.gtpu_sndbufintegerThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.gtpu_readersintegerThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.gtpu_writersintegerThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.gtpu_batchintegerThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.gtpu_no_gsobooleanThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.gtpu_no_grobooleanThe USPACE executor's GTP-U socket (uplane_uspace_sock.go), shared by every UE on this N3 address. GtpuRcvBuf / GtpuSndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max unless rk has CAP_NET_ADMIN). GtpuReaders is how many goroutines read it, each in recvmmsg on its own descriptor of the socket (default 2 with 4 or more CPUs, else 1: a second reader drains a downlink burst while the first is waking). GtpuWriters is how many writer shards send the probes, each tunnel on one of them, each on its own descriptor (uplane_uspace_writer.go; default half of GOMAXPROCS, which -cpus sets to the CPUs rk is pinned to). GtpuBatch is the recvmmsg / sendmmsg batch (default 64). GtpuNoGso / GtpuNoGro turn off UDP GSO on the writers and UDP GRO on the readers (udp_mmsg.go; both on by default where the kernel has them).
nfs[].gnb.uplane.tx_burstintegerThe DPDK helper's TX burst, the packets it hands the NIC in one rte_eth_tx_burst (runik-dpdk-c --tx_burst; default dpdkTxBurstDefault, 1..1024).
nfs[].gnb.uplane.dpdk_lcoresintegerHow many worker lcores (and NIC queue pairs) the DPDK helper runs, on CPUs Cpu .. Cpu+DpdkLcores-1 (0 or 1: one, on Cpu). Each worker sends and receives its own share of the UEs' tunnels; the one whose NIC queue a G-PDU arrives on hands it to the tunnel's owner (runik-dpdk-c work_space.h). 1..dpdkLcoresMax.
nfs[].gnb.auto_replyobjectAutoReply makes the gNB answer some requests by itself, without a flow transition.
nfs[].gnb.auto_reply.handover_requestbooleanHandoverRequest answers an NGAP Handover Request with a Handover Request Acknowledge.
nfs[].gnb.ueobjectWhat this gNB's UEs ask the core for when a flow's send does not say: the DNN and S-NSSAI of a PDU session request, the SUCI scheme of a registration. A core's env profile sets it once instead of every template naming its DNN.
nfs[].gnb.ue.dnnstringThe data network name each UE asks for. Default internet.
nfs[].gnb.ue.snssaiobjectThe slice each UE asks for. Default SST 1 with no SD.
nfs[].gnb.ue.snssai.sstintegerThe slice/service type (0-255).
nfs[].gnb.ue.snssai.sdstringThe slice differentiator: six hex digits. Empty means none.
nfs[].gnb.ue.suciobjectSUCI sets how each UE conceals its SUPI. Default: the null scheme.
nfs[].gnb.ue.suci.protection_schemeintegerThe SUCI protection scheme: 0 null (the default), 1 profile A, 2 profile B.
nfs[].gnb.ue.suci.hn_pubkeystringThe home network public key, in hex. Required for schemes 1 and 2; not allowed with 0.
nfs[].gnb.ue.suci.hn_pubkey_idintegerThe home network public key identifier (0-254).
nfs[].amfobjectThe AMF identity for AMF-mode (server-side) NGAP. The listen endpoint lives on the NGAP transport; this block carries what the AMF advertises in NGSetupResponse and which gNBs it admits.
nfs[].amf.served_guamiobjectThe GUAMI the AMF serves: PLMN, region, set and pointer, sent in the NG Setup Response.
nfs[].amf.served_guami.plmnobjectThe GUAMI's PLMN.
nfs[].amf.served_guami.plmn.mccstringThe mobile country code: three digits.
nfs[].amf.served_guami.plmn.mncstringThe mobile network code: two or three digits.
nfs[].amf.served_guami.amf_region_idintegerThe AMF Region ID (0-255).
nfs[].amf.served_guami.amf_set_idintegerThe AMF Set ID (10 bits).
nfs[].amf.served_guami.amf_pointerintegerThe AMF Pointer (6 bits).
nfs[].amf.relative_capacityintegerThe AMF's relative capacity (0-255), sent in the NG Setup Response.
nfs[].amf.allowed_gnbslist of objectsAllowedGNBs limits which gNBs may set up, by RAN node name. Empty accepts any gNB.
nfs[].amf.allowed_gnbs[].namestringThe gNB's RAN node name, as sent in its NG Setup Request.
nfs[].amf.allowed_gnbs[].global_idobjectThe gNB's Global RAN Node ID.
nfs[].amf.allowed_gnbs[].global_id.plmnobjectThe gNB's PLMN.
nfs[].amf.allowed_gnbs[].global_id.plmn.mccstringThe mobile country code: three digits.
nfs[].amf.allowed_gnbs[].global_id.plmn.mncstringThe mobile network code: two or three digits.
nfs[].amf.allowed_gnbs[].global_id.gnb_idstringThe gNB ID, as a decimal string.
nfs[].amf.allowed_gnbs[].global_id.bit_lengthintegerThe gNB ID's length in bits (22-32).

transports

Type: map of objects.

The wire map. Keys are transport IDs that NFs reference via NF.Transport. Each entry declares one protocol stack (NGAP / Diameter / SBI) plus the local + peer details that protocol needs. Multiple NFs may reference the same Transport ID when they share a wire (e.g. two MME NFs on one Diameter peer pool).

KeyTypeDescription
transports.<name>.protocolstringThe wire protocol: ngap, diameter, sbi, rest, pfcp or gtpu. Exactly the matching block below must be present.
transports.<name>.ngapobjectNGAP configures an NGAP over SCTP (N2) transport.
transports.<name>.ngap.modestringMode selects "client" (gNB-side: dial AMFs in Peers) or "server" (AMF-side: bind LocalSCTP and accept inbound gNBs). Empty defaults to "client" when Peers is non-empty, "server" when Peers is empty.
transports.<name>.ngap.local_sctpstringThe local SCTP endpoint: one address or, multi-homed (RFC 4960 §6.4), several (a list, or comma-separated; see SCTPAddrs). The gNB binds all of them for its dials (the port is not used: the kernel picks one); the AMF listens on all of them.
transports.<name>.ngap.local_gtpustringLocalSCTP is the local SCTP endpoint: one address or, multi-homed (RFC 4960 §6.4), several (a list, or comma-separated; see SCTPAddrs). The gNB binds all of them for its dials (the port is not used: the kernel picks one); the AMF listens on all of them.
transports.<name>.ngap.peerslist of objectsLocalSCTP is the local SCTP endpoint: one address or, multi-homed (RFC 4960 §6.4), several (a list, or comma-separated; see SCTPAddrs). The gNB binds all of them for its dials (the port is not used: the kernel picks one); the AMF listens on all of them.
transports.<name>.ngap.peers[].addressstringThe AMF's address or, for a multi-homed AMF, its addresses (a list, or comma-separated; bare hosts, the port is Port). The gNB's association is set up with all of them at once (sctp_connectx), so it reaches the AMF through whichever answers and fails over between them.
transports.<name>.ngap.peers[].portintegerAddress is the AMF's address or, for a multi-homed AMF, its addresses (a list, or comma-separated; bare hosts, the port is Port). The gNB's association is set up with all of them at once (sctp_connectx), so it reaches the AMF through whichever answers and fails over between them.
transports.<name>.ngap.peers[].primarystringPrimary, optional, is the AMF address the association sends new data to while it is reachable (SCTP_PRIMARY_ADDR), set once the association is up. One of Address. Absent, the kernel's choice: the address the association was set up through.
transports.<name>.ngap.sctpobjectSCTP tunes every N2 association of this transport: the gNB's dials in client mode, the listener (and so every accepted association) in server mode. Absent, the kernel's defaults and 16 streams each way.
transports.<name>.ngap.sctp.rto_initialstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.ngap.sctp.rto_minstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.ngap.sctp.rto_maxstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.ngap.sctp.heartbeat_intervalstringHB.interval (RFC 4960 §8.3).
transports.<name>.ngap.sctp.path_max_retransintegerPath.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535.
transports.<name>.ngap.sctp.assoc_max_retransintegerPathMaxRetrans is Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535.
transports.<name>.ngap.sctp.sndbufintegerSndBuf and RcvBuf are SO_SNDBUF / SO_RCVBUF in bytes (the kernel doubles them and caps them at net.core.wmem_max / rmem_max).
transports.<name>.ngap.sctp.rcvbufintegerSndBuf and RcvBuf are SO_SNDBUF / SO_RCVBUF in bytes (the kernel doubles them and caps them at net.core.wmem_max / rmem_max).
transports.<name>.ngap.sctp.out_streamsintegerThe number of outbound streams asked for in the INIT, InStreams the cap on the peer's (SCTP_INITMSG). 1..65535; 0 is 16. On N2, stream 0 carries non-UE-associated NGAP and the rest UE streams (TS 38.412 §7), so 1 puts everything on stream 0.
transports.<name>.ngap.sctp.in_streamsintegerOutStreams is the number of outbound streams asked for in the INIT, InStreams the cap on the peer's (SCTP_INITMSG). 1..65535; 0 is 16. On N2, stream 0 carries non-UE-associated NGAP and the rest UE streams (TS 38.412 §7), so 1 puts everything on stream 0.
transports.<name>.diameterobjectDiameter configures a Diameter transport: local identity, peers and routes.
transports.<name>.diameter.localobjectRunik's own Diameter identity and listener.
transports.<name>.diameter.local.origin_hoststringRunik's Origin-Host. Required.
transports.<name>.diameter.local.origin_realmstringRunik's Origin-Realm. Required.
transports.<name>.diameter.local.vendor_idintegerThe Vendor-Id in CER/CEA. Default 10415 (3GPP).
transports.<name>.diameter.local.product_namestringThe Product-Name in CER/CEA. Default rk.
transports.<name>.diameter.local.application_idslist of integersThe Diameter applications Runik advertises. At least one.
transports.<name>.diameter.local.watchdog_intervalstringThe DWR interval, a duration. Default 30s.
transports.<name>.diameter.local.listenobjectListen makes Runik accept peers: over SCTP, TCP, TLS or DTLS.
transports.<name>.diameter.local.listen.transportstring"sctp", "tcp", "tls", or "dtls"
transports.<name>.diameter.local.listen.addrstringThe address to listen on; over SCTP it may list several (multi-homed, see SCTPAddrs; bare hosts), all bound.
transports.<name>.diameter.local.listen.portintegerAddr is the address to listen on; over SCTP it may list several (multi-homed, see SCTPAddrs; bare hosts), all bound.
transports.<name>.diameter.local.listen.cert_filestringCertFile and KeyFile are the listener certificate, required when Transport is "tls" or "dtls". CAFile, when set, is the trust anchor for the peer certificate and the listener requires one.
transports.<name>.diameter.local.listen.key_filestringCertFile and KeyFile are the listener certificate, required when Transport is "tls" or "dtls". CAFile, when set, is the trust anchor for the peer certificate and the listener requires one.
transports.<name>.diameter.local.listen.ca_filestringCertFile and KeyFile are the listener certificate, required when Transport is "tls" or "dtls". CAFile, when set, is the trust anchor for the peer certificate and the listener requires one.
transports.<name>.diameter.local.listen.max_versionstringThe highest TLS version this listener offers, as "1.0", "1.1", "1.2", or "1.3". Empty leaves the transport default, TLS 1.2 or newer. "1.0" and "1.1" also pin the minimum to that version.
transports.<name>.diameter.local.listen.addresseslist of stringsAdditional local IPs for an SCTP or DTLS listener. Addr stays the first listen address. Empty leaves Addr alone.
transports.<name>.diameter.local.listen.sctpobjectSCTP tunes the associations the listener accepts (transport sctp only). The listener takes the RTO, heartbeat and stream settings; path_max_retrans, assoc_max_retrans, sndbuf and rcvbuf are refused here (the Diameter node's listener has no hook for them).
transports.<name>.diameter.local.listen.sctp.rto_initialstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.diameter.local.listen.sctp.rto_minstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.diameter.local.listen.sctp.rto_maxstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.diameter.local.listen.sctp.heartbeat_intervalstringHB.interval (RFC 4960 §8.3).
transports.<name>.diameter.local.listen.sctp.path_max_retransintegerPath.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535.
transports.<name>.diameter.local.listen.sctp.assoc_max_retransintegerPathMaxRetrans is Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535.
transports.<name>.diameter.local.listen.sctp.sndbufintegerSndBuf and RcvBuf are SO_SNDBUF / SO_RCVBUF in bytes (the kernel doubles them and caps them at net.core.wmem_max / rmem_max).
transports.<name>.diameter.local.listen.sctp.rcvbufintegerSndBuf and RcvBuf are SO_SNDBUF / SO_RCVBUF in bytes (the kernel doubles them and caps them at net.core.wmem_max / rmem_max).
transports.<name>.diameter.local.listen.sctp.out_streamsintegerThe number of outbound streams asked for in the INIT, InStreams the cap on the peer's (SCTP_INITMSG). 1..65535; 0 is 16. On N2, stream 0 carries non-UE-associated NGAP and the rest UE streams (TS 38.412 §7), so 1 puts everything on stream 0.
transports.<name>.diameter.local.listen.sctp.in_streamsintegerOutStreams is the number of outbound streams asked for in the INIT, InStreams the cap on the peer's (SCTP_INITMSG). 1..65535; 0 is 16. On N2, stream 0 carries non-UE-associated NGAP and the rest UE streams (TS 38.412 §7), so 1 puts everything on stream 0.
transports.<name>.diameter.local.responderobjectResponder tunes how Runik answers requests as a server.
transports.<name>.diameter.local.responder.timeoutstringHow long a server flow may take to answer a request. Default 30s.
transports.<name>.diameter.local.drop_ceabooleanDropCEA accepts a CER and does not write the CEA. The peer then closes on its own timer.
transports.<name>.diameter.local.drop_cea_countintegerDropCEACount drops that many CEAs and then answers the next CER with Result-Code 2001. DropCEA, when set, drops every CEA and this count is not consulted.
transports.<name>.diameter.local.cea_resultintegerCEAResult, when set to anything other than 2001, is the Result-Code in the CEA. The connection is closed after that answer.
transports.<name>.diameter.local.drop_dwabooleanDropDWA accepts a DWR and does not write the DWA.
transports.<name>.diameter.local.drop_dwa_countintegerDropDWACount drops that many DWAs and then answers the next DWR with Result-Code 2001. DropDWA, when set, drops every DWA.
transports.<name>.diameter.local.send_dprbooleanSendDPR writes one Disconnect-Peer-Request with cause 0 after the handshake and leaves the association up to read the DPA.
transports.<name>.diameter.local.drop_appbooleanDropApp logs an application message and does not answer it.
transports.<name>.diameter.local.control_filestringA lab hook. When the file contents change, the adaptor applies one command: delay-dwa-once duration>, drop-dwa, answer-dwa, drop-app, answer-app, pause-sends, resume-sends, or remove-sctp-addr ip>. Empty leaves the hook off.
transports.<name>.diameter.peerslist of objectsThe Diameter peers Runik connects to or accepts. At least one.
transports.<name>.diameter.peers[].namestringName identifies the peer; routes refer to it.
transports.<name>.diameter.peers[].transportstring"sctp" or "tcp"
transports.<name>.diameter.peers[].addrstringThe peer's address; over SCTP it may list several (multi-homed, see SCTPAddrs; bare hosts): the association is set up with all of them. The first is the peer's identity (its aaa:// URI).
transports.<name>.diameter.peers[].portintegerThe peer's Diameter port. Required (3868 is usual).
transports.<name>.diameter.peers[].local_addrstringLocalAddr, optional and SCTP only, is the local address or addresses the association to this peer binds (multi-homed when several). Absent, any address.
transports.<name>.diameter.peers[].sctp_ppidintegerThe SCTP payload protocol identifier. Default 46.
transports.<name>.diameter.peers[].destination_hoststringThe Destination-Host for requests to this peer.
transports.<name>.diameter.peers[].destination_realmstringThe Destination-Realm for requests to this peer.
transports.<name>.diameter.peers[].connection_modestringConnectionMode describes the local node's role on the connection to this peer (Oracle DSR vocabulary). One of: "initiator" (default; we dial), "responder" (we wait for them to dial), "both" (we dial and accept: RFC 6733 §5.6.4 election resolves dupes).
transports.<name>.diameter.peers[].tlsbooleanTLS dials this peer over TLS (RFC 6733 §13.1: TLS from the start of the connection, before CER). Transport tcp only: Diameter over SCTP is secured with DTLS, which Runik accepts on local.listen but does not dial. The peer's certificate is verified against ca_file (else the system roots) for server_name (else the peer's addr). TLS 1.2 or newer.
transports.<name>.diameter.peers[].ca_filestringThe CA the peer's certificate is verified against (PEM), with tls: true. Absent, the system roots.
transports.<name>.diameter.peers[].cert_filestringCertFile and KeyFile are the client certificate Runik presents to the peer (PEM), with tls: true; set both or neither.
transports.<name>.diameter.peers[].key_filestringCertFile and KeyFile are the client certificate Runik presents to the peer (PEM), with tls: true; set both or neither.
transports.<name>.diameter.peers[].server_namestringThe name the peer's certificate must carry, with tls: true. Absent, the peer's addr.
transports.<name>.diameter.peers[].sctpobjectSCTP tunes the association Runik dials to this peer (transport sctp only).
transports.<name>.diameter.peers[].sctp.rto_initialstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.diameter.peers[].sctp.rto_minstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.diameter.peers[].sctp.rto_maxstringRtoInitial, RtoMin, RtoMax are RTO.Initial/Min/Max (RFC 4960 §6.3.1, SCTP_RTOINFO). Set on the socket before connecting, they govern the INIT retransmissions too.
transports.<name>.diameter.peers[].sctp.heartbeat_intervalstringHB.interval (RFC 4960 §8.3).
transports.<name>.diameter.peers[].sctp.path_max_retransintegerPath.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535.
transports.<name>.diameter.peers[].sctp.assoc_max_retransintegerPathMaxRetrans is Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535.
transports.<name>.diameter.peers[].sctp.sndbufintegerSndBuf and RcvBuf are SO_SNDBUF / SO_RCVBUF in bytes (the kernel doubles them and caps them at net.core.wmem_max / rmem_max).
transports.<name>.diameter.peers[].sctp.rcvbufintegerSndBuf and RcvBuf are SO_SNDBUF / SO_RCVBUF in bytes (the kernel doubles them and caps them at net.core.wmem_max / rmem_max).
transports.<name>.diameter.peers[].sctp.out_streamsintegerThe number of outbound streams asked for in the INIT, InStreams the cap on the peer's (SCTP_INITMSG). 1..65535; 0 is 16. On N2, stream 0 carries non-UE-associated NGAP and the rest UE streams (TS 38.412 §7), so 1 puts everything on stream 0.
transports.<name>.diameter.peers[].sctp.in_streamsintegerOutStreams is the number of outbound streams asked for in the INIT, InStreams the cap on the peer's (SCTP_INITMSG). 1..65535; 0 is 16. On N2, stream 0 carries non-UE-associated NGAP and the rest UE streams (TS 38.412 §7), so 1 puts everything on stream 0.
transports.<name>.diameter.routeslist of objectsRoutes send requests by realm and application to peers.
transports.<name>.diameter.routes[].realmstringThe Destination-Realm this route matches.
transports.<name>.diameter.routes[].application_idslist of integersThe applications this route matches.
transports.<name>.diameter.routes[].local_actionstringWhat Runik does with a matching request: relay (the default), local, proxy or redirect.
transports.<name>.diameter.routes[].peerslist of objectsWhere matching requests go, by peer name and rating.
transports.<name>.diameter.routes[].peers[].namestringA peer's name from peers:.
transports.<name>.diameter.routes[].peers[].ratingintegerRating orders the peers: a higher rating is tried first.
transports.<name>.sbiobjectSBI configures a 5G service-based interface (HTTP/2) transport.
transports.<name>.sbi.base_urlstringThe NF's URL (http or https): Runik calls it as a client. Exactly one of base_url and listen.
transports.<name>.sbi.nf_typestringThe NF type Runik presents on this interface, for example AMF or SMF.
transports.<name>.sbi.nf_instance_idstringThe NF instance ID Runik presents on this interface.
transports.<name>.sbi.tlsobjectTLS configures HTTPS. A server without a tls: block serves cleartext HTTP/2 (h2c).
transports.<name>.sbi.tls.ca_filestringCAFile verifies the other side: the server's certificate as a client, client certificates as a server.
transports.<name>.sbi.tls.cert_filestringRunik's certificate (PEM). Set with key_file; a server needs both.
transports.<name>.sbi.tls.key_filestringThe key for cert_file (PEM).
transports.<name>.sbi.tls.client_authstringServer-mode only: "require" | "request" | "none" (see HTTPClientAuthRequire). Empty → "require" when ca_file is set, "none" otherwise: a listener given a client CA enforces mTLS unless told not to.
transports.<name>.sbi.oauth2objectOAuth2 makes the client fetch and send an OAuth2 access token.
transports.<name>.sbi.oauth2.enabledbooleanEnabled turns OAuth2 on for this transport.
transports.<name>.sbi.oauth2.token_urlstringWhere the token is requested (the NRF's token endpoint). Required.
transports.<name>.sbi.oauth2.client_idstringThe OAuth2 client ID. Required unless nf_instance_id is set.
transports.<name>.sbi.oauth2.client_secret_envstringClientSecretEnv names the environment variable that holds the client secret. The secret is never in the file.
transports.<name>.sbi.oauth2.nf_instance_idstringThe consumer's own NF instance id (nfInstanceId). The NRF issues tokens only to an instance that is registered.
transports.<name>.sbi.oauth2.nf_typestringThe consumer's own NF type (nfType). The NRF refuses a type other than the one the instance registered as.
transports.<name>.sbi.oauth2.target_nf_typestringThe producer's NF type (targetNfType). When empty, the binding's sbi.nf_type is used.
transports.<name>.sbi.oauth2.scopestringScope lists the NF service names the token must grant, separated by spaces.
transports.<name>.sbi.listenobjectListen makes Runik serve this NF itself (server flows answer on it). Exactly one of base_url and listen.
transports.<name>.sbi.listen.addrstringThe address to listen on.
transports.<name>.sbi.listen.portintegerThe port to listen on.
transports.<name>.sbi.serverobjectServer tunes the server side: answer and header-read timeouts.
transports.<name>.sbi.server.answer_timeoutstringAnswerTimeout caps how long the listener handler blocks on the FSM to produce a response payload before returning 504. Empty → 10s.
transports.<name>.sbi.server.read_header_timeoutstringForwarded to http.Server.ReadHeaderTimeout. Empty → 30s.
transports.<name>.sbi.http1booleanHTTP1 forces the client onto HTTP/1.1. A request-target that HTTP/2 rejects (100%, a space, a fragment) is still the path this role checks.
transports.<name>.sbi.nofollow_redirectsbooleanNoFollowRedirects returns a 3xx to the flow. The default client follows it, which hides the status this role is checking.
transports.<name>.restobjectREST configures a plain HTTP REST transport, for non-3GPP APIs.
transports.<name>.rest.base_urlstringThe API's URL (http or https): Runik calls it as a client. Exactly one of base_url and listen.
transports.<name>.rest.listenobjectListen makes Runik serve the API itself (server flows answer on it). Exactly one of base_url and listen.
transports.<name>.rest.listen.addrstringThe address to listen on.
transports.<name>.rest.listen.portintegerThe port to listen on.
transports.<name>.rest.tlsobjectTLS configures HTTPS. A server without a tls: block serves cleartext HTTP/2 (h2c).
transports.<name>.rest.tls.ca_filestringCAFile verifies the other side: the server's certificate as a client, client certificates as a server.
transports.<name>.rest.tls.cert_filestringRunik's certificate (PEM). Set with key_file; a server needs both.
transports.<name>.rest.tls.key_filestringThe key for cert_file (PEM).
transports.<name>.rest.tls.client_authstringServer-mode only; same values and default as SBITLSConfig.ClientAuth.
transports.<name>.rest.authobjectAuth adds client authentication: basic, bearer, api_key or none. Secrets come only from environment variables.
transports.<name>.rest.auth.typestringOne of "basic" | "bearer" | "api_key" | "none".
transports.<name>.rest.auth.username_envstringbasic: HTTP Basic auth: both env vars are required.
transports.<name>.rest.auth.password_envstringbasic: HTTP Basic auth: both env vars are required.
transports.<name>.rest.auth.token_envstringbearer: static Authorization: Bearer token>.
transports.<name>.rest.auth.headerstringapi_key: arbitrary header name + env-sourced value.
transports.<name>.rest.auth.value_envstringapi_key: arbitrary header name + env-sourced value.
transports.<name>.rest.serverobjectServer tunes the server side: answer and header-read timeouts.
transports.<name>.rest.server.answer_timeoutstringHow long a server flow may take to answer a request, a duration. Default 10s.
transports.<name>.rest.server.read_header_timeoutstringReadHeaderTimeout bounds reading a request's headers, a duration. Default 30s.
transports.<name>.rest.http1booleanHTTP1 forces an HTTP/1.1 client transport instead of the default (h2 over TLS / h2c over plain http). Needed for client-mode bindings that target plain-HTTP/1.1 endpoints which don't speak h2c: e.g. a Prometheus /metrics handler. No effect on server-mode bindings.
transports.<name>.pfcpobjectPFCP configures a PFCP (N4) transport.
transports.<name>.pfcp.modestring"client" | "server"
transports.<name>.pfcp.localstringhost:port; "0.0.0.0:0" for client
transports.<name>.pfcp.peerobjectclient mode
transports.<name>.pfcp.peer.addrstringThe peer's PFCP address.
transports.<name>.pfcp.peer.portintegerThe peer's PFCP port (8805 is usual). Required.
transports.<name>.pfcp.node_idobjectlocal NodeID (CP/UP) advertised in IEs
transports.<name>.pfcp.node_id.typestring"ipv4" | "ipv6" | "fqdn"
transports.<name>.pfcp.node_id.valuestringThe Node ID: an IPv4 or IPv6 address, or an FQDN, per type.
transports.<name>.gtpuobjectGTPU configures a GTP-U (N3) transport: an N3-only gNB, or a UPF reflector.
transports.<name>.gtpu.localstringThe address the gNB binds for N3 and names to the core as the downlink tunnel endpoint ({{gnb.n3_addr}}). The gNB's own uplane.local_gtpu_addr, when set, wins: same precedence as an ngap transport's local_gtpu.
transports.<name>.gtpu.peerstringThe UPF's N3 address. Optional: a flow that learns it from the wire passes it per window as uplane_start's remote_addr. When both are absent uplane_start fails naming the missing input. The gNB's own uplane.remote_gtpu_addr, when set, wins.
transports.<name>.gtpu.reflectorobjectReflector makes this transport the UPF side of N3 instead of a gNB's: a GTP-U reflector on Local:2152 that answers every uplink G-PDU on the downlink TEID its table names (gtpu_reflector.go). The NF on it is role upf, and a server flow with protocol: gtpu runs it. Peer is not used in this mode (the reflector's own peer: overrides where downlink goes).
transports.<name>.gtpu.reflector.tunnelslist of objectsThe static uplink→downlink TEID map.
transports.<name>.gtpu.reflector.tunnels[].ul_teidintegerThe uplink TEID this entry matches (the first, with count).
transports.<name>.gtpu.reflector.tunnels[].dl_teidintegerThe downlink TEID the reflector answers on (the first, with count).
transports.<name>.gtpu.reflector.tunnels[].countintegerCount makes the entry a range: UL..UL+count-1 maps to DL..DL+count-1.
transports.<name>.gtpu.reflector.tunnels[].peerstringPeer overrides the reflector's downlink destination for these tunnels.
transports.<name>.gtpu.reflector.unknown_teidstringWhat a G-PDU on a TEID with no tunnel gets: error_indication (default; TS 29.281 §7.3.1), drop, or mirror (answer on the same TEID and learn the tunnel).
transports.<name>.gtpu.reflector.peerstringPeer, when set, is where every downlink G-PDU goes (IPv4, port 2152). Unset, a downlink goes back to the address the uplink came from, which is the gNB's N3 endpoint.
transports.<name>.gtpu.reflector.socketsintegerThe SO_REUSEPORT group size (default 1).
transports.<name>.gtpu.reflector.workersintegerThe number of reader goroutines per socket, all reading. Unset, a socket gets one per CPU (up to 8) of which only the first reads until it saturates (gtpu_reflector_workers.go): below that every extra reader is woken for the same datagrams, and measured on a 42k pps load two readers cost 69% of a core where one cost 43%.
transports.<name>.gtpu.reflector.batchintegerThe recvmmsg/sendmmsg batch size (default 64).
transports.<name>.gtpu.reflector.max_teidsintegerMaxTeids bounds the tunnel table (default 65536).
transports.<name>.gtpu.reflector.report_teidsintegerReportTeids bounds the per-TEID rows in the report (default 1024).
transports.<name>.gtpu.reflector.idle_timeoutstringHow long after the last G-PDU a server flow is told the traffic is over (ReflectorIdle). Default 2s.
transports.<name>.gtpu.reflector.error_indication_rateintegerErrorIndicationRate caps Error Indications per second (unset: 100; 0: none are sent, unknown-TEID G-PDUs are only counted).
transports.<name>.gtpu.reflector.echo_response_rateintegerEchoResponseRate caps Echo Responses per second the same way (unset: 100; 0: Echo Requests are counted and not answered). An Echo Request costs the sender 12 octets and the reflector a reply, so an unbounded answer is an amplifier for anyone who can reach 2152.
transports.<name>.gtpu.reflector.rcvbufintegerRcvBuf / SndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max).
transports.<name>.gtpu.reflector.sndbufintegerRcvBuf / SndBuf are SO_RCVBUF / SO_SNDBUF in bytes (default 4 MiB; the kernel caps them at net.core.{r,w}mem_max).

diameter_dictionary_path

Type: string.

DiameterDictionaryPath optionally extends the embedded d3xproto/diameter dictionary with custom AVPs from an XML file. The upstream embedded dictionary already covers S6a / Gx / Rx; only set this when a deployment needs additional AVPs. Process-wide; applies to every Diameter transport in the env.