From c0885d484b5f3101435fdc5ce0ab3e926a899627 Mon Sep 17 00:00:00 2001 From: "David T." Date: Wed, 29 Jul 2026 12:50:15 +0300 Subject: [PATCH] feat(welcome): add mtu so the Node sizes each client tunnel A client that sizes its own interface for the widest path blackholes its largest packets over the QUIC channel, where every encapsulated packet is wrapped in a datagram that has to fit the path whole. Only the Node knows both its own interface and the framing its transport adds around each packet, so it now says which value to apply instead of leaving the client to guess. Zero keeps the built-in default of 1420, so a client talking to an older Node behaves as it does today. APN-Network/node#120 --- welcome.proto | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/welcome.proto b/welcome.proto index 75d56b2..8a2e625 100644 --- a/welcome.proto +++ b/welcome.proto @@ -57,6 +57,19 @@ message Welcome { // "fd00::/64"). Empty when the Node offers no IPv6 tunnel. string subnet6 = 13; + // Maximum transmission unit, in bytes, the client MUST apply to its + // own tunnel interface for the lifetime of this session. The Node + // derives it from its own tunnel interface and from the framing the + // transport of this session wraps around every encapsulated packet, + // so the value differs between the TCP and the QUIC channel: a + // full-size inner packet must still fit the narrowest path once + // wrapped. A client that sizes its interface above this value + // blackholes its own largest packets on every path narrower than the + // wrapped packet, with no ICMP to explain the loss. Zero means the + // Node predates this field, in which case the client MUST keep its + // built-in default of 1420. + uint32 mtu = 14; + // Free-form error message explaining why authentication failed. // Set only when `status == ERROR`; empty otherwise. string error = 3;