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.
| Key | Type | Description |
|---|---|---|
nfs[].name | string | Name identifies the NF in this environment; flows and logs refer to it. Unique. |
nfs[].role | string | The 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[].plmn | object | The NF's network: MCC and MNC. Diameter roles need it. |
nfs[].plmn.mcc | string | The mobile country code: three digits. |
nfs[].plmn.mnc | string | The mobile network code: two or three digits. |
nfs[].transport | string | The key, under transports:, of the wire this NF uses. |
nfs[].gnb | object | The 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_id | object | The gNB's Global RAN Node ID, sent in NG Setup. gnb_id is required for a gNB on NGAP. |
nfs[].gnb.global_id.plmn | object | The gNB's PLMN. |
nfs[].gnb.global_id.plmn.mcc | string | The mobile country code: three digits. |
nfs[].gnb.global_id.plmn.mnc | string | The mobile network code: two or three digits. |
nfs[].gnb.global_id.gnb_id | string | The gNB ID, as a decimal string. |
nfs[].gnb.global_id.bit_length | integer | The gNB ID's length in bits (22-32). |
nfs[].gnb.supported_tas | list of objects | The tracking areas the gNB serves, with their PLMNs and slices, sent in NG Setup. |
nfs[].gnb.supported_tas[].tac | integer | The tracking area code. |
nfs[].gnb.supported_tas[].plmns | list of objects | The PLMNs broadcast in this tracking area, each with its slices. |
nfs[].gnb.supported_tas[].plmns[].plmn | object | The broadcast PLMN. |
nfs[].gnb.supported_tas[].plmns[].plmn.mcc | string | The mobile country code: three digits. |
nfs[].gnb.supported_tas[].plmns[].plmn.mnc | string | The mobile network code: two or three digits. |
nfs[].gnb.supported_tas[].plmns[].slices | list of objects | The S-NSSAIs supported for this PLMN. |
nfs[].gnb.supported_tas[].plmns[].slices[].sst | integer | The slice/service type (0-255). |
nfs[].gnb.supported_tas[].plmns[].slices[].sd | string | The slice differentiator: six hex digits. Empty means none. |
nfs[].gnb.paging_drx | integer | The gNB's default paging DRX cycle, in radio frames (32, 64, 128 or 256), sent in NG Setup. |
nfs[].gnb.uplane | object | Uplane configures the gNB's user plane: the datapath and the traffic it sends. See the user-plane docs. |
nfs[].gnb.uplane.type | string | The datapath: USPACE (kernel sockets), DPDK (full build, licence feature datapath.dpdk) or MOCK (sends nothing). |
nfs[].gnb.uplane.protocol | string | The traffic inside the tunnel: 1 ICMP echo, 2 UDP, 3 TCP. One of: 0, 1, 2, 3. |
nfs[].gnb.uplane.mode | string | Passed to the DPDK helper (--mode). Required for DPDK. |
nfs[].gnb.uplane.cpu | integer | The first CPU the DPDK helper runs on. |
nfs[].gnb.uplane.payload_size | integer | The payload of each packet, in bytes. |
nfs[].gnb.uplane.duration | string | How long traffic runs, a duration (for example 5s). uplane_start's duration overrides it. |
nfs[].gnb.uplane.concurrent_connections | integer | How many sessions the DPDK helper keeps open at once. Counts against the licence limit on concurrent user-plane sessions. |
nfs[].gnb.uplane.keep_alive | string | Passed to the DPDK helper (--keepalive). |
nfs[].gnb.uplane.connections_per_second | integer | How many connections the DPDK helper opens per second. |
nfs[].gnb.uplane.lport_range_min | integer | LportRangeMin and LportRangeMax bound the DPDK helper's local ports. Both required for DPDK. |
nfs[].gnb.uplane.lport_range_max | integer | LportRangeMin and LportRangeMax bound the DPDK helper's local ports. Both required for DPDK. |
nfs[].gnb.uplane.listen_port_start | integer | ListenPortStart 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_num | integer | ListenPortStart 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_pci | string | The NIC the DPDK helper drives: a PCI address, or af_packet:ifname>. Required for DPDK. |
nfs[].gnb.uplane.port_addr | string | The DPDK NIC's IP address. Required for DPDK. |
nfs[].gnb.uplane.port_gateway | string | The DPDK NIC's gateway. Required for DPDK. |
nfs[].gnb.uplane.target_addr | string | The data-network host IPv4 traffic goes to (the inner destination). Required for traffic from an IPv4 UE. |
nfs[].gnb.uplane.target_addr6 | string | The 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_addr | string | This gNB's N3 address. Overrides the transport's local_gtpu or gtpu.local. |
nfs[].gnb.uplane.remote_gtpu_addr | string | The core's N3 address. Overrides the gtpu transport's peer. |
nfs[].gnb.uplane.gtpu_rcvbuf | integer | The 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_sndbuf | integer | The 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_readers | integer | The 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_writers | integer | The 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_batch | integer | The 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_gso | boolean | The 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_gro | boolean | The 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_burst | integer | The 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_lcores | integer | How 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_reply | object | AutoReply makes the gNB answer some requests by itself, without a flow transition. |
nfs[].gnb.auto_reply.handover_request | boolean | HandoverRequest answers an NGAP Handover Request with a Handover Request Acknowledge. |
nfs[].gnb.ue | object | What 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.dnn | string | The data network name each UE asks for. Default internet. |
nfs[].gnb.ue.snssai | object | The slice each UE asks for. Default SST 1 with no SD. |
nfs[].gnb.ue.snssai.sst | integer | The slice/service type (0-255). |
nfs[].gnb.ue.snssai.sd | string | The slice differentiator: six hex digits. Empty means none. |
nfs[].gnb.ue.suci | object | SUCI sets how each UE conceals its SUPI. Default: the null scheme. |
nfs[].gnb.ue.suci.protection_scheme | integer | The SUCI protection scheme: 0 null (the default), 1 profile A, 2 profile B. |
nfs[].gnb.ue.suci.hn_pubkey | string | The home network public key, in hex. Required for schemes 1 and 2; not allowed with 0. |
nfs[].gnb.ue.suci.hn_pubkey_id | integer | The home network public key identifier (0-254). |
nfs[].amf | object | The 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_guami | object | The GUAMI the AMF serves: PLMN, region, set and pointer, sent in the NG Setup Response. |
nfs[].amf.served_guami.plmn | object | The GUAMI's PLMN. |
nfs[].amf.served_guami.plmn.mcc | string | The mobile country code: three digits. |
nfs[].amf.served_guami.plmn.mnc | string | The mobile network code: two or three digits. |
nfs[].amf.served_guami.amf_region_id | integer | The AMF Region ID (0-255). |
nfs[].amf.served_guami.amf_set_id | integer | The AMF Set ID (10 bits). |
nfs[].amf.served_guami.amf_pointer | integer | The AMF Pointer (6 bits). |
nfs[].amf.relative_capacity | integer | The AMF's relative capacity (0-255), sent in the NG Setup Response. |
nfs[].amf.allowed_gnbs | list of objects | AllowedGNBs limits which gNBs may set up, by RAN node name. Empty accepts any gNB. |
nfs[].amf.allowed_gnbs[].name | string | The gNB's RAN node name, as sent in its NG Setup Request. |
nfs[].amf.allowed_gnbs[].global_id | object | The gNB's Global RAN Node ID. |
nfs[].amf.allowed_gnbs[].global_id.plmn | object | The gNB's PLMN. |
nfs[].amf.allowed_gnbs[].global_id.plmn.mcc | string | The mobile country code: three digits. |
nfs[].amf.allowed_gnbs[].global_id.plmn.mnc | string | The mobile network code: two or three digits. |
nfs[].amf.allowed_gnbs[].global_id.gnb_id | string | The gNB ID, as a decimal string. |
nfs[].amf.allowed_gnbs[].global_id.bit_length | integer | The 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).
| Key | Type | Description |
|---|---|---|
transports.<name>.protocol | string | The wire protocol: ngap, diameter, sbi, rest, pfcp or gtpu. Exactly the matching block below must be present. |
transports.<name>.ngap | object | NGAP configures an NGAP over SCTP (N2) transport. |
transports.<name>.ngap.mode | string | Mode 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_sctp | string | 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.local_gtpu | string | LocalSCTP 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 | list of objects | LocalSCTP 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[].address | string | 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[].port | integer | Address 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[].primary | string | Primary, 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.sctp | object | SCTP 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_initial | string | RtoInitial, 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_min | string | RtoInitial, 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_max | string | RtoInitial, 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_interval | string | HB.interval (RFC 4960 §8.3). |
transports.<name>.ngap.sctp.path_max_retrans | integer | Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535. |
transports.<name>.ngap.sctp.assoc_max_retrans | integer | PathMaxRetrans is Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535. |
transports.<name>.ngap.sctp.sndbuf | integer | SndBuf 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.rcvbuf | integer | SndBuf 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_streams | integer | 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>.ngap.sctp.in_streams | integer | OutStreams 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 | object | Diameter configures a Diameter transport: local identity, peers and routes. |
transports.<name>.diameter.local | object | Runik's own Diameter identity and listener. |
transports.<name>.diameter.local.origin_host | string | Runik's Origin-Host. Required. |
transports.<name>.diameter.local.origin_realm | string | Runik's Origin-Realm. Required. |
transports.<name>.diameter.local.vendor_id | integer | The Vendor-Id in CER/CEA. Default 10415 (3GPP). |
transports.<name>.diameter.local.product_name | string | The Product-Name in CER/CEA. Default rk. |
transports.<name>.diameter.local.application_ids | list of integers | The Diameter applications Runik advertises. At least one. |
transports.<name>.diameter.local.watchdog_interval | string | The DWR interval, a duration. Default 30s. |
transports.<name>.diameter.local.listen | object | Listen makes Runik accept peers: over SCTP, TCP, TLS or DTLS. |
transports.<name>.diameter.local.listen.transport | string | "sctp", "tcp", "tls", or "dtls" |
transports.<name>.diameter.local.listen.addr | string | The address to listen on; over SCTP it may list several (multi-homed, see SCTPAddrs; bare hosts), all bound. |
transports.<name>.diameter.local.listen.port | integer | Addr 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_file | string | CertFile 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_file | string | CertFile 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_file | string | CertFile 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_version | string | The 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.addresses | list of strings | Additional local IPs for an SCTP or DTLS listener. Addr stays the first listen address. Empty leaves Addr alone. |
transports.<name>.diameter.local.listen.sctp | object | SCTP 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_initial | string | RtoInitial, 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_min | string | RtoInitial, 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_max | string | RtoInitial, 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_interval | string | HB.interval (RFC 4960 §8.3). |
transports.<name>.diameter.local.listen.sctp.path_max_retrans | integer | Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535. |
transports.<name>.diameter.local.listen.sctp.assoc_max_retrans | integer | PathMaxRetrans is Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535. |
transports.<name>.diameter.local.listen.sctp.sndbuf | integer | SndBuf 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.rcvbuf | integer | SndBuf 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_streams | integer | 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.listen.sctp.in_streams | integer | OutStreams 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.responder | object | Responder tunes how Runik answers requests as a server. |
transports.<name>.diameter.local.responder.timeout | string | How long a server flow may take to answer a request. Default 30s. |
transports.<name>.diameter.local.drop_cea | boolean | DropCEA accepts a CER and does not write the CEA. The peer then closes on its own timer. |
transports.<name>.diameter.local.drop_cea_count | integer | DropCEACount 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_result | integer | CEAResult, 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_dwa | boolean | DropDWA accepts a DWR and does not write the DWA. |
transports.<name>.diameter.local.drop_dwa_count | integer | DropDWACount 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_dpr | boolean | SendDPR 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_app | boolean | DropApp logs an application message and does not answer it. |
transports.<name>.diameter.local.control_file | string | A 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.peers | list of objects | The Diameter peers Runik connects to or accepts. At least one. |
transports.<name>.diameter.peers[].name | string | Name identifies the peer; routes refer to it. |
transports.<name>.diameter.peers[].transport | string | "sctp" or "tcp" |
transports.<name>.diameter.peers[].addr | string | The 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[].port | integer | The peer's Diameter port. Required (3868 is usual). |
transports.<name>.diameter.peers[].local_addr | string | LocalAddr, 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_ppid | integer | The SCTP payload protocol identifier. Default 46. |
transports.<name>.diameter.peers[].destination_host | string | The Destination-Host for requests to this peer. |
transports.<name>.diameter.peers[].destination_realm | string | The Destination-Realm for requests to this peer. |
transports.<name>.diameter.peers[].connection_mode | string | ConnectionMode 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[].tls | boolean | TLS 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_file | string | The CA the peer's certificate is verified against (PEM), with tls: true. Absent, the system roots. |
transports.<name>.diameter.peers[].cert_file | string | CertFile and KeyFile are the client certificate Runik presents to the peer (PEM), with tls: true; set both or neither. |
transports.<name>.diameter.peers[].key_file | string | CertFile and KeyFile are the client certificate Runik presents to the peer (PEM), with tls: true; set both or neither. |
transports.<name>.diameter.peers[].server_name | string | The name the peer's certificate must carry, with tls: true. Absent, the peer's addr. |
transports.<name>.diameter.peers[].sctp | object | SCTP tunes the association Runik dials to this peer (transport sctp only). |
transports.<name>.diameter.peers[].sctp.rto_initial | string | RtoInitial, 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_min | string | RtoInitial, 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_max | string | RtoInitial, 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_interval | string | HB.interval (RFC 4960 §8.3). |
transports.<name>.diameter.peers[].sctp.path_max_retrans | integer | Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535. |
transports.<name>.diameter.peers[].sctp.assoc_max_retrans | integer | PathMaxRetrans is Path.Max.Retrans, AssocMaxRetrans Association.Max.Retrans (RFC 4960 §8.1, §8.2). 0..65535. |
transports.<name>.diameter.peers[].sctp.sndbuf | integer | SndBuf 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.rcvbuf | integer | SndBuf 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_streams | integer | 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.peers[].sctp.in_streams | integer | OutStreams 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.routes | list of objects | Routes send requests by realm and application to peers. |
transports.<name>.diameter.routes[].realm | string | The Destination-Realm this route matches. |
transports.<name>.diameter.routes[].application_ids | list of integers | The applications this route matches. |
transports.<name>.diameter.routes[].local_action | string | What Runik does with a matching request: relay (the default), local, proxy or redirect. |
transports.<name>.diameter.routes[].peers | list of objects | Where matching requests go, by peer name and rating. |
transports.<name>.diameter.routes[].peers[].name | string | A peer's name from peers:. |
transports.<name>.diameter.routes[].peers[].rating | integer | Rating orders the peers: a higher rating is tried first. |
transports.<name>.sbi | object | SBI configures a 5G service-based interface (HTTP/2) transport. |
transports.<name>.sbi.base_url | string | The NF's URL (http or https): Runik calls it as a client. Exactly one of base_url and listen. |
transports.<name>.sbi.nf_type | string | The NF type Runik presents on this interface, for example AMF or SMF. |
transports.<name>.sbi.nf_instance_id | string | The NF instance ID Runik presents on this interface. |
transports.<name>.sbi.tls | object | TLS configures HTTPS. A server without a tls: block serves cleartext HTTP/2 (h2c). |
transports.<name>.sbi.tls.ca_file | string | CAFile verifies the other side: the server's certificate as a client, client certificates as a server. |
transports.<name>.sbi.tls.cert_file | string | Runik's certificate (PEM). Set with key_file; a server needs both. |
transports.<name>.sbi.tls.key_file | string | The key for cert_file (PEM). |
transports.<name>.sbi.tls.client_auth | string | Server-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.oauth2 | object | OAuth2 makes the client fetch and send an OAuth2 access token. |
transports.<name>.sbi.oauth2.enabled | boolean | Enabled turns OAuth2 on for this transport. |
transports.<name>.sbi.oauth2.token_url | string | Where the token is requested (the NRF's token endpoint). Required. |
transports.<name>.sbi.oauth2.client_id | string | The OAuth2 client ID. Required unless nf_instance_id is set. |
transports.<name>.sbi.oauth2.client_secret_env | string | ClientSecretEnv names the environment variable that holds the client secret. The secret is never in the file. |
transports.<name>.sbi.oauth2.nf_instance_id | string | The consumer's own NF instance id (nfInstanceId). The NRF issues tokens only to an instance that is registered. |
transports.<name>.sbi.oauth2.nf_type | string | The 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_type | string | The producer's NF type (targetNfType). When empty, the binding's sbi.nf_type is used. |
transports.<name>.sbi.oauth2.scope | string | Scope lists the NF service names the token must grant, separated by spaces. |
transports.<name>.sbi.listen | object | Listen makes Runik serve this NF itself (server flows answer on it). Exactly one of base_url and listen. |
transports.<name>.sbi.listen.addr | string | The address to listen on. |
transports.<name>.sbi.listen.port | integer | The port to listen on. |
transports.<name>.sbi.server | object | Server tunes the server side: answer and header-read timeouts. |
transports.<name>.sbi.server.answer_timeout | string | AnswerTimeout 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_timeout | string | Forwarded to http.Server.ReadHeaderTimeout. Empty → 30s. |
transports.<name>.sbi.http1 | boolean | HTTP1 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_redirects | boolean | NoFollowRedirects returns a 3xx to the flow. The default client follows it, which hides the status this role is checking. |
transports.<name>.rest | object | REST configures a plain HTTP REST transport, for non-3GPP APIs. |
transports.<name>.rest.base_url | string | The API's URL (http or https): Runik calls it as a client. Exactly one of base_url and listen. |
transports.<name>.rest.listen | object | Listen makes Runik serve the API itself (server flows answer on it). Exactly one of base_url and listen. |
transports.<name>.rest.listen.addr | string | The address to listen on. |
transports.<name>.rest.listen.port | integer | The port to listen on. |
transports.<name>.rest.tls | object | TLS configures HTTPS. A server without a tls: block serves cleartext HTTP/2 (h2c). |
transports.<name>.rest.tls.ca_file | string | CAFile verifies the other side: the server's certificate as a client, client certificates as a server. |
transports.<name>.rest.tls.cert_file | string | Runik's certificate (PEM). Set with key_file; a server needs both. |
transports.<name>.rest.tls.key_file | string | The key for cert_file (PEM). |
transports.<name>.rest.tls.client_auth | string | Server-mode only; same values and default as SBITLSConfig.ClientAuth. |
transports.<name>.rest.auth | object | Auth adds client authentication: basic, bearer, api_key or none. Secrets come only from environment variables. |
transports.<name>.rest.auth.type | string | One of "basic" | "bearer" | "api_key" | "none". |
transports.<name>.rest.auth.username_env | string | basic: HTTP Basic auth: both env vars are required. |
transports.<name>.rest.auth.password_env | string | basic: HTTP Basic auth: both env vars are required. |
transports.<name>.rest.auth.token_env | string | bearer: static Authorization: Bearer token>. |
transports.<name>.rest.auth.header | string | api_key: arbitrary header name + env-sourced value. |
transports.<name>.rest.auth.value_env | string | api_key: arbitrary header name + env-sourced value. |
transports.<name>.rest.server | object | Server tunes the server side: answer and header-read timeouts. |
transports.<name>.rest.server.answer_timeout | string | How long a server flow may take to answer a request, a duration. Default 10s. |
transports.<name>.rest.server.read_header_timeout | string | ReadHeaderTimeout bounds reading a request's headers, a duration. Default 30s. |
transports.<name>.rest.http1 | boolean | HTTP1 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>.pfcp | object | PFCP configures a PFCP (N4) transport. |
transports.<name>.pfcp.mode | string | "client" | "server" |
transports.<name>.pfcp.local | string | host:port; "0.0.0.0:0" for client |
transports.<name>.pfcp.peer | object | client mode |
transports.<name>.pfcp.peer.addr | string | The peer's PFCP address. |
transports.<name>.pfcp.peer.port | integer | The peer's PFCP port (8805 is usual). Required. |
transports.<name>.pfcp.node_id | object | local NodeID (CP/UP) advertised in IEs |
transports.<name>.pfcp.node_id.type | string | "ipv4" | "ipv6" | "fqdn" |
transports.<name>.pfcp.node_id.value | string | The Node ID: an IPv4 or IPv6 address, or an FQDN, per type. |
transports.<name>.gtpu | object | GTPU configures a GTP-U (N3) transport: an N3-only gNB, or a UPF reflector. |
transports.<name>.gtpu.local | string | The 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.peer | string | The 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.reflector | object | Reflector 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.tunnels | list of objects | The static uplink→downlink TEID map. |
transports.<name>.gtpu.reflector.tunnels[].ul_teid | integer | The uplink TEID this entry matches (the first, with count). |
transports.<name>.gtpu.reflector.tunnels[].dl_teid | integer | The downlink TEID the reflector answers on (the first, with count). |
transports.<name>.gtpu.reflector.tunnels[].count | integer | Count makes the entry a range: UL..UL+count-1 maps to DL..DL+count-1. |
transports.<name>.gtpu.reflector.tunnels[].peer | string | Peer overrides the reflector's downlink destination for these tunnels. |
transports.<name>.gtpu.reflector.unknown_teid | string | What 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.peer | string | Peer, 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.sockets | integer | The SO_REUSEPORT group size (default 1). |
transports.<name>.gtpu.reflector.workers | integer | The 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.batch | integer | The recvmmsg/sendmmsg batch size (default 64). |
transports.<name>.gtpu.reflector.max_teids | integer | MaxTeids bounds the tunnel table (default 65536). |
transports.<name>.gtpu.reflector.report_teids | integer | ReportTeids bounds the per-TEID rows in the report (default 1024). |
transports.<name>.gtpu.reflector.idle_timeout | string | How long after the last G-PDU a server flow is told the traffic is over (ReflectorIdle). Default 2s. |
transports.<name>.gtpu.reflector.error_indication_rate | integer | ErrorIndicationRate caps Error Indications per second (unset: 100; 0: none are sent, unknown-TEID G-PDUs are only counted). |
transports.<name>.gtpu.reflector.echo_response_rate | integer | EchoResponseRate 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.rcvbuf | integer | RcvBuf / 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.sndbuf | integer | RcvBuf / 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.