Troubleshooting¶
/dev/net/tun is missing¶
Check whether the provider exposes TUN:
ls -l /dev/net/tun
On a VPS/container, this may require a provider-side setting. tcpcc cannot emulate a missing TUN device inside the current architecture.
Forwarding check fails¶
Check the selected public family:
sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding
tcpcc reports this prerequisite but does not silently change the global sysctl.
BBR is absent from the outer host¶
That alone is not a problem.
Do not use the outer host's net.ipv4.tcp_available_congestion_control as proof that hosted BBR is unavailable. The public listener lives in hosted Linux, where tcpcc sets and reads back TCP_CONGESTION.
Backend is rejected¶
The current backend contract is IPv4 loopback only:
127.0.0.1:PORT
A non-loopback backend address is rejected intentionally.
IPv6 endpoint fails to parse¶
Use brackets around the literal:
[2001:db8::10]:443
not:
2001:db8::10:443
Mixed IPv4 and IPv6 forwards are rejected¶
All public listeners in one tcpcc process currently share one TUN/L3 endpoint and therefore one public address family. Use separate tcpcc processes if both families are required.
Duplicate public ports are rejected¶
Public ports must be unique within one process even when the public addresses differ. DNAT preserves the port when mapping into the shared hosted endpoint.
Config file and CLI options conflict¶
When --config FILE is selected, do not also pass direct service options such as --forward, --cc, or --memory-mib.
The supported validation form is:
sudo tcpcc --check --config /etc/tcpcc/tcpcc.toml
Resident memory is lower than --memory-mib¶
This is expected. The guest-capacity arena is demand-backed; configured guest RAM and host resident memory are different quantities.
Resident memory does not fall immediately after closing flows¶
Also expected. Bridge teardown does not prove that every guest TCP control block has completed its close/orphan lifetime. M10 treats immediate reclaim behavior as telemetry and uses repeated post-load resident-floor stability as the hard long-running memory criterion.
More diagnostics¶
The canonical architecture and detailed milestone documents are in the main repository.