# 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:

```toml
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 |
|---|---|---|
| <code>listen</code> | <code>[]</code> | 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. |
| <code>port</code> | <code>24601</code> | The UDP port the Server listens on for Setup Requests. |
| <code>allow_unauthenticated</code> | <code>false</code> | Serve unauthenticated Tests too (not conformant to RFC 9946). |
| <code>checksum</code> | <code>false</code> | Fill the header checksum and verify it when populated (RFC 9946 §5.6). |
| <code>jumbo</code> | <code>true</code> | CHSR_JUMBO_STATUS: rows above 1 Gbps may use packets up to 9000 bytes (RFC 9946 §6.1). Clients must ask for the same. |
| <code>traditional_mtu</code> | <code>false</code> | CHSR_TRADITIONAL_MTU: packets may be 1500 bytes, not 1250, up to 1 Gbps too. Clients must ask for the same. |
| <code>server_mtu</code> | <code>1500</code> | 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. |
| <code>ephemeral_ports</code> | <code>&quot;49152-65535&quot;</code> | The Ephemeral Ports Test Connections&#39; sockets are bound to, as `FIRST-LAST`, picked at random: the Server&#39;s own range, not the OS&#39;s ephemeral port range. It holds at least `max_test_connections` plus the Unactivated Test Connection share. |
| <code>delay_var_statistic</code> | <code>&quot;maximum&quot;</code> | Which statistic of a Trial Interval&#39;s one-way delay variation classifies it for the Load Rate Adjustment Algorithms. |
| <code>tests_per_source</code> | <code>1</code> | 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. |
| <code>max_test_connections</code> | <code>256</code> | How many Test Connections activated Tests may reserve at once. |
| <code>test_connections_per_test</code> | <code>24</code> | How many Test Connections one Test may have over its life. |
| <code>max_unactivated_test_connections</code> | 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. |
| <code>admitted_rate_cap</code> | none | The most maxBandwidth admitted at once in each direction, in Mbps; no cap when absent. |
| <code>max_test_share</code> | <code>50</code> | The most of `admitted_rate_cap`, in percent, that one Test without an Operator Key may state, all its Test Connections together. |
| <code>require_max_bandwidth</code> | <code>false</code> | Refuse Tests that state no maxBandwidth. |
| <code>troubleshooting</code> | <code>false</code> | Answer authentication failures of Setup Requests with the reason instead of silence, to debug Clients. Off by default. |
| <code>unverified_setups_per_second</code> | <code>20000</code> | How many Setup Requests a second may reach authentication; the rest are dropped silently. |
| <code>source_setup_burst</code> | <code>48</code> | How many authentic Setup Requests one Source may send at once; at least test_connections_per_test. |
| <code>source_setups_per_second</code> | <code>5</code> | How many more a Source may send each second after its burst. |
| <code>key_setup_burst</code> | <code>1000</code> | How many authentic Setup Requests one Key Table row may send at once, Unauthenticated Mode counting as one; at least test_connections_per_test. |
| <code>key_setups_per_second</code> | <code>1000</code> | How many more a Key Table row may send each second after its burst. |
| <code>allowed_dscp</code> | <code>[0]</code> | 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&#39;t put the load into a priority class. |
| <code>operator_allowed_dscp</code> | none | The DSCPs a Test with an Operator Key may mark its traffic with; absent, all but network control (48 and 56). |
| <code>max_start_row</code> | <code>100</code> | 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. |
| <code>quota_period</code> | <code>3600</code> | The Quota Period, in seconds: what Quotas are counted over. |
| <code>source_tests_per_quota_period</code> | none | Each Source&#39;s Quota of Tests per Quota Period; absent, none. Operator Keys are exempt. |
| <code>source_bytes_per_quota_period</code> | none | Each Source&#39;s Quota of load bytes per Quota Period, both directions; absent, none. Operator Keys are exempt. |
| <code>socket_buffer_size</code> | <code>2097152</code> | Each Test Connection&#39;s receive and send buffer in its Data Phase, in bytes, within the OS&#39;s limits. |
| <code>dont_fragment</code> | <code>true</code> | Set the Don&#39;t Fragment bit on test traffic (RFC 9946 §5: it SHOULD be set unless fragmentation is being measured). |
| <code>max_hops</code> | 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. |
| <code>log_format</code> | <code>&quot;human&quot;</code> | The log&#39;s format on stdout: `human` or `json`, one object a line. |
| <code>log_file</code> | none | Where the log goes instead of stdout, with the startup&#39;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. |
| <code>address_privacy</code> | <code>&quot;full&quot;</code> | How the log shows client addresses: `full`, `pseudonymize` or `truncate` (to the IPv4 /24 or IPv6 /48). |
| <code>address_privacy_key_file</code> | none | The pseudonym key, as hexadecimal digits (16 bytes or more), for `address_privacy = "pseudonymize"`. |
| <code>statistics_interval</code> | <code>60</code> | How often the log reports the Server&#39;s counters, in seconds, up to a day; 0 never does. |
| <code>key_file</code> | 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](../guides/hosting-a-server.md) explains the settings in use, and [Command line](cli.md#udpstp-server) lists the option for each.
