Server configuration
The Server reads its settings from built-in defaults, then a TOML file (udpstp server --config FILE), then the command line, each replacing the one before. This page is generated from the settings’ own documentation and from udpstp server --print-config, which prints the effective settings as TOML and exits.
Defaults
With no file and no options, --print-config prints:
listen = []
port = 24601
allow_unauthenticated = false
checksum = false
jumbo = true
traditional_mtu = false
server_mtu = 1500
ephemeral_ports = "49152-65535"
delay_var_statistic = "maximum"
tests_per_source = 1
max_test_connections = 256
test_connections_per_test = 24
max_test_share = 50
require_max_bandwidth = false
troubleshooting = false
unverified_setups_per_second = 20000
source_setup_burst = 48
source_setups_per_second = 5
key_setup_burst = 1000
key_setups_per_second = 1000
allowed_dscp = [0]
max_start_row = 100
quota_period = 3600
socket_buffer_size = 2097152
dont_fragment = true
log_format = "human"
address_privacy = "full"
statistics_interval = 60
A setting shown as “none” is absent by default and printed only when set.
Settings
| Setting | Default | Meaning |
|---|---|---|
listen | [] | The addresses the Server listens on for Setup Requests; empty, the IPv4 and IPv6 wildcards (IPv6 if the host has it). A listener on a specific address never sees multicast or broadcast Setup Requests. |
port | 24601 | The UDP port the Server listens on for Setup Requests. |
allow_unauthenticated | false | Serve unauthenticated Tests too (not conformant to RFC 9946). |
checksum | false | Fill the header checksum and verify it when populated (RFC 9946 §5.6). |
jumbo | true | CHSR_JUMBO_STATUS: rows above 1 Gbps may use packets up to 9000 bytes (RFC 9946 §6.1). Clients must ask for the same. |
traditional_mtu | false | CHSR_TRADITIONAL_MTU: packets may be 1500 bytes, not 1250, up to 1 Gbps too. Clients must ask for the same. |
server_mtu | 1500 | The Server MTU: the largest IP packet the Server sends, in bytes, 1280 or more (9000 at most is used). Jumbo rows keep their rates with more, smaller packets below 9000. |
ephemeral_ports | "49152-65535" | The Ephemeral Ports Test Connections' sockets are bound to, as FIRST-LAST, picked at random: the Server's own range, not the OS's ephemeral port range. It holds at least max_test_connections plus the Unactivated Test Connection share. |
delay_var_statistic | "maximum" | Which statistic of a Trial Interval's one-way delay variation classifies it for the Load Rate Adjustment Algorithms. |
tests_per_source | 1 | How many Tests may run at once from one Source (an IPv4 address or an IPv6 /64). RFC 9946 §4.2 says 1; more, for Clients behind carrier-grade NAT, departs from it. |
max_test_connections | 256 | How many Test Connections activated Tests may reserve at once. |
test_connections_per_test | 24 | How many Test Connections one Test may have over its life. |
max_unactivated_test_connections | none | How many Test Connections may be admitted but not yet activated at once, separately from the global cap; absent, half of max_test_connections, but at least test_connections_per_test. |
admitted_rate_cap | none | The most maxBandwidth admitted at once in each direction, in Mbps; no cap when absent. |
max_test_share | 50 | The most of admitted_rate_cap, in percent, that one Test without an Operator Key may state, all its Test Connections together. |
require_max_bandwidth | false | Refuse Tests that state no maxBandwidth. |
troubleshooting | false | Answer authentication failures of Setup Requests with the reason instead of silence, to debug Clients. Off by default. |
unverified_setups_per_second | 20000 | How many Setup Requests a second may reach authentication; the rest are dropped silently. |
source_setup_burst | 48 | How many authentic Setup Requests one Source may send at once; at least test_connections_per_test. |
source_setups_per_second | 5 | How many more a Source may send each second after its burst. |
key_setup_burst | 1000 | How many authentic Setup Requests one Key Table row may send at once, Unauthenticated Mode counting as one; at least test_connections_per_test. |
key_setups_per_second | 1000 | How many more a Key Table row may send each second after its burst. |
allowed_dscp | [0] | The DSCPs, 0 to 63, a Test without an Operator Key may mark its traffic with; another is coerced to 0. Only 0 by default, so a Consumer can't put the load into a priority class. |
operator_allowed_dscp | none | The DSCPs a Test with an Operator Key may mark its traffic with; absent, all but network control (48 and 56). |
max_start_row | 100 | The highest Sending Rate Table row a Test without an Operator Key may start its search at; a higher one is coerced to it. Operator Keys are exempt. |
quota_period | 3600 | The Quota Period, in seconds: what Quotas are counted over. |
source_tests_per_quota_period | none | Each Source's Quota of Tests per Quota Period; absent, none. Operator Keys are exempt. |
source_bytes_per_quota_period | none | Each Source's Quota of load bytes per Quota Period, both directions; absent, none. Operator Keys are exempt. |
socket_buffer_size | 2097152 | Each Test Connection's receive and send buffer in its Data Phase, in bytes, within the OS's limits. |
dont_fragment | true | Set the Don't Fragment bit on test traffic (RFC 9946 §5: it SHOULD be set unless fragmentation is being measured). |
max_hops | none | MaxHops: the IPv4 TTL and IPv6 hop limit of test traffic, 1 to 255, set from the expected path length (RFC 9946 §10). Absent, 64, with a warning. |
log_format | "human" | The log's format on stdout: human or json, one object a line. |
log_file | none | Where the log goes instead of stdout, with the startup's errors and warnings: a new file each day, named from this path with the date before its extension (server.log gives server.2026-10-01.log), the last 14 kept. A Windows service has no stdout, so it needs one. |
address_privacy | "full" | How the log shows client addresses: full, pseudonymize or truncate (to the IPv4 /24 or IPv6 /48). |
address_privacy_key_file | none | The pseudonym key, as hexadecimal digits (16 bytes or more), for address_privacy = "pseudonymize". |
statistics_interval | 60 | How often the log reports the Server's counters, in seconds, up to a day; 0 never does. |
key_file | none | The key file: a TOML Key Table if its name ends in .toml, else an OB-UDPST udpst.keys file. A relative path is taken from the current directory. |
Hosting a Server explains the settings in use, and Command line lists the option for each.