2023-03-30 17:37:06 +00:00
|
|
|
// Copyright (c) Tailscale Inc & AUTHORS
|
|
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package tstun
|
|
|
|
|
2023-09-22 17:44:59 +00:00
|
|
|
import "tailscale.com/envknob"
|
2023-03-30 17:37:06 +00:00
|
|
|
|
|
|
|
const (
|
2023-09-23 18:48:20 +00:00
|
|
|
maxMTU = 65536
|
|
|
|
defaultMTU = 1280
|
2023-03-30 17:37:06 +00:00
|
|
|
)
|
|
|
|
|
2023-09-22 17:44:59 +00:00
|
|
|
// DefaultMTU returns either the constant default MTU of 1280, or the value set
|
|
|
|
// in TS_DEBUG_MTU clamped to a maximum of 65536.
|
2023-09-22 15:49:09 +00:00
|
|
|
func DefaultMTU() uint32 {
|
2023-09-22 17:44:59 +00:00
|
|
|
// DefaultMTU is the Tailscale default MTU for now.
|
|
|
|
//
|
|
|
|
// wireguard-go defaults to 1420 bytes, which only works if the
|
|
|
|
// "outer" MTU is 1500 bytes. This breaks on DSL connections
|
|
|
|
// (typically 1492 MTU) and on GCE (1460 MTU?!).
|
|
|
|
//
|
|
|
|
// 1280 is the smallest MTU allowed for IPv6, which is a sensible
|
|
|
|
// "probably works everywhere" setting until we develop proper PMTU
|
|
|
|
// discovery.
|
|
|
|
if mtu, ok := envknob.LookupUintSized("TS_DEBUG_MTU", 10, 32); ok {
|
2023-09-23 18:48:20 +00:00
|
|
|
return min(uint32(mtu), maxMTU)
|
2023-09-22 17:44:59 +00:00
|
|
|
}
|
2023-09-23 18:48:20 +00:00
|
|
|
return defaultMTU
|
2023-03-30 17:37:06 +00:00
|
|
|
}
|