This project contains the Rust implementation of the RMBT Test Server for conducting measurements based on the RMBT protocol. Clients can communicate either directly via TCP sockets or based on the WebSocket protocol.
rmbtd [OPTIONS]
OPTIONS:
-l ADDRESS TCP listen address (no default; TCP disabled unless specified)
-L ADDRESS TLS listen address (default: [::]:443 and 0.0.0.0:443)
-c PATH TLS certificate file (PEM)
-k PATH TLS private key file (PEM)
-S PATH Secret key file (default: secret.key)
-t N Worker thread count (default: 200)
--v2-only Accept only v2 tokens (SHA256, IP+time bound); reject legacy v1 tokens
-log LEVEL Log level: info | debug | trace
--syslog ADDRESS Send structured per-connection events as UDP RFC 5424 to ADDRESS (IP or IP:port; port default 514)
--log-full-ip Log the full client IP (default: anonymised, last octet/group dropped)
-h, --help Show this help
-v, --version Print version
ADDRESS examples: "443", "0.0.0.0:443", "[::]:443"
--syslog <IP[:port]> (or syslog = <IP[:port]> in rmbtd.conf; off by default, port
defaults to 514) ships one structured event per client activity to a collector as UDP
RFC 5424 datagrams with a JSON message body. This ingests directly into ELK (Logstash
syslog input + json filter). Sending is fire-and-forget and never blocks connection
handling; every connection is logged (no sampling).
Events (each carries a conn id for correlation):
connect— a connection was accepted (anonymisedclient,tls).auth— token validity:resultisaccepted/rejected/not_checked, with the clientuuid(present for v2 tokens too), thetokentype (v1/v2), the matchedsecretlabel (on accept), and areasoncode (on reject).close— the outcome at end of connection:duration_ms, server-measured download (dl_bytes/dl_mbps), upload (ul_bytes/ul_mbps) and ping (ping_count/ping_min_ms), the command count, andend(quit/disconnect/error/auth_failed/upgrade_failed/ …). Theuuid,tokentype andsecretlabel are repeated for correlation.
By default the source IP is anonymised (last octet/group dropped), matching the local-log
behaviour; pass --log-full-ip (or log_full_ip = true in rmbtd.conf) to log the full
client IP in both local logs and events. Example close datagram:
<134>1 2026-06-21T15:58:10.097Z host rmbtd 28936 close - {"event":"close","conn":1,"uuid":"8723358c-2037-4029-a70c-91e5d9d35cf3","token":"v2","secret":"testlabel","tls":false,"end":"quit","duration_ms":18.482,"commands":3,"dl_bytes":16384,"dl_mbps":7.765,"ul_bytes":12288,"ul_mbps":915.307,"ping_count":1,"ping_min_ms":0.102}
- RTR-Netztest on the web
This source code is licensed under the Apache license found in the LICENSE.txt file. The documentation to the project is licensed under the CC BY-AT 3.0 license.