From 416eadbcff01821c9e41313b018cbe930e06a078 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sun, 16 May 2021 20:00:45 +0100 Subject: [PATCH] Use uint64 for MTU for forward-compatibility --- src/admin/admin.go | 1 - src/config/config.go | 2 +- src/defaults/defaults.go | 4 ++-- src/tuntap/admin.go | 2 +- src/tuntap/tun.go | 12 ++++++------ src/tuntap/tun_bsd.go | 4 ++-- src/tuntap/tun_darwin.go | 4 ++-- src/tuntap/tun_linux.go | 4 ++-- src/tuntap/tun_other.go | 4 ++-- src/tuntap/tun_windows.go | 6 +++--- 10 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/admin/admin.go b/src/admin/admin.go index 855b0545..fc9d09c3 100644 --- a/src/admin/admin.go +++ b/src/admin/admin.go @@ -250,7 +250,6 @@ func (a *AdminSocket) handleRequest(conn net.Conn) { } } } - j, _ := json.Marshal(resp) if err = encoder.Encode(resp); err != nil { a.log.Debugln("Encode error:", err) } diff --git a/src/config/config.go b/src/config/config.go index 4aa9a213..49cc8a2a 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -69,7 +69,7 @@ type NodeConfig struct { PrivateKey string `comment:"Your private signing key. DO NOT share this with anyone!"` LinkLocalTCPPort uint16 `comment:"The port number to be used for the link-local TCP listeners for the\nconfigured MulticastInterfaces. This option does not affect listeners\nspecified in the Listen option. Unless you plan to firewall link-local\ntraffic, it is best to leave this as the default value of 0. This\noption cannot currently be changed by reloading config during runtime."` IfName string `comment:"Local network interface name for TUN adapter, or \"auto\" to select\nan interface automatically, or \"none\" to run without TUN."` - IfMTU uint16 `comment:"Maximum Transmission Unit (MTU) size for your local TUN interface.\nDefault is the largest supported size for your platform. The lowest\npossible value is 1280."` + IfMTU uint64 `comment:"Maximum Transmission Unit (MTU) size for your local TUN interface.\nDefault is the largest supported size for your platform. The lowest\npossible value is 1280."` SessionFirewall SessionFirewall `comment:"The session firewall controls who can send/receive network traffic\nto/from. This is useful if you want to protect this node without\nresorting to using a real firewall. This does not affect traffic\nbeing routed via this node to somewhere else. Rules are prioritised as\nfollows: blacklist, whitelist, always allow outgoing, direct, remote."` NodeInfoPrivacy bool `comment:"By default, nodeinfo contains some defaults including the platform,\narchitecture and Yggdrasil version. These can help when surveying\nthe network and diagnosing network routing problems. Enabling\nnodeinfo privacy prevents this, so that only items specified in\n\"NodeInfo\" are sent back if specified."` NodeInfo map[string]interface{} `comment:"Optional node info. This must be a { \"key\": \"value\", ... } map\nor set as null. This is entirely optional but, if set, is visible\nto the whole network on request."` diff --git a/src/defaults/defaults.go b/src/defaults/defaults.go index 57248088..a885c5dd 100644 --- a/src/defaults/defaults.go +++ b/src/defaults/defaults.go @@ -14,7 +14,7 @@ type platformDefaultParameters struct { DefaultMulticastInterfaces []string // TUN/TAP - MaximumIfMTU uint16 - DefaultIfMTU uint16 + MaximumIfMTU uint64 + DefaultIfMTU uint64 DefaultIfName string } diff --git a/src/tuntap/admin.go b/src/tuntap/admin.go index 5b50ff24..15a7463a 100644 --- a/src/tuntap/admin.go +++ b/src/tuntap/admin.go @@ -7,7 +7,7 @@ import ( ) type GetTUNRequest struct{} -type GetTUNResponse map[string]uint16 +type GetTUNResponse map[string]uint64 func (t *TunAdapter) getTUNHandler(req *GetTUNRequest, res *GetTUNResponse) error { res = &GetTUNResponse{ diff --git a/src/tuntap/tun.go b/src/tuntap/tun.go index a2f93e31..a5e8f9e1 100644 --- a/src/tuntap/tun.go +++ b/src/tuntap/tun.go @@ -39,7 +39,7 @@ type TunAdapter struct { log *log.Logger addr address.Address subnet address.Subnet - mtu uint16 + mtu uint64 iface tun.Device phony.Inbox // Currently only used for _handlePacket from the reader, TODO: all the stuff that currently needs a mutex below //mutex sync.RWMutex // Protects the below @@ -55,7 +55,7 @@ func (tun *TunAdapter) SetSessionGatekeeper(gatekeeper func(pubkey ed25519.Publi // Gets the maximum supported MTU for the platform based on the defaults in // defaults.GetDefaults(). -func getSupportedMTU(mtu uint16) uint16 { +func getSupportedMTU(mtu uint64) uint64 { if mtu < 1280 { return 1280 } @@ -77,7 +77,7 @@ func (tun *TunAdapter) Name() string { // MTU gets the adapter's MTU. This can range between 1280 and 65535, although // the maximum value is determined by your platform. The returned value will // never exceed that of MaximumMTU(). -func (tun *TunAdapter) MTU() uint16 { +func (tun *TunAdapter) MTU() uint64 { return getSupportedMTU(tun.mtu) } @@ -88,14 +88,14 @@ func DefaultName() string { // DefaultMTU gets the default TUN interface MTU for your platform. This can // be as high as MaximumMTU(), depending on platform, but is never lower than 1280. -func DefaultMTU() uint16 { +func DefaultMTU() uint64 { return defaults.GetDefaults().DefaultIfMTU } // MaximumMTU returns the maximum supported TUN interface MTU for your // platform. This can be as high as 65535, depending on platform, but is never // lower than 1280. -func MaximumMTU() uint16 { +func MaximumMTU() uint64 { return defaults.GetDefaults().MaximumIfMTU } @@ -150,7 +150,7 @@ func (tun *TunAdapter) _start() error { } mtu := current.IfMTU if tun.core.MTU() < uint64(mtu) { - mtu = uint16(tun.core.MTU()) + mtu = tun.core.MTU() } if err := tun.setup(current.IfName, addr, mtu); err != nil { return err diff --git a/src/tuntap/tun_bsd.go b/src/tuntap/tun_bsd.go index 4710e8cd..75158857 100644 --- a/src/tuntap/tun_bsd.go +++ b/src/tuntap/tun_bsd.go @@ -73,14 +73,14 @@ type in6_ifreq_lifetime struct { } // Configures the TUN adapter with the correct IPv6 address and MTU. -func (tun *TunAdapter) setup(ifname string, addr string, mtu MTU) error { +func (tun *TunAdapter) setup(ifname string, addr string, mtu uint64) error { iface, err := wgtun.CreateTUN(ifname, int(mtu)) if err != nil { panic(err) } tun.iface = iface if mtu, err := iface.MTU(); err == nil { - tun.mtu = getSupportedMTU(MTU(mtu)) + tun.mtu = getSupportedMTU(uint64(mtu)) } else { tun.mtu = 0 } diff --git a/src/tuntap/tun_darwin.go b/src/tuntap/tun_darwin.go index b398eb19..609b42e3 100644 --- a/src/tuntap/tun_darwin.go +++ b/src/tuntap/tun_darwin.go @@ -16,7 +16,7 @@ import ( ) // Configures the "utun" adapter with the correct IPv6 address and MTU. -func (tun *TunAdapter) setup(ifname string, addr string, mtu uint16) error { +func (tun *TunAdapter) setup(ifname string, addr string, mtu uint64) error { if ifname == "auto" { ifname = "utun" } @@ -26,7 +26,7 @@ func (tun *TunAdapter) setup(ifname string, addr string, mtu uint16) error { } tun.iface = iface if m, err := iface.MTU(); err == nil { - tun.mtu = getSupportedMTU(uint16(m)) + tun.mtu = getSupportedMTU(uint64(m)) } else { tun.mtu = 0 } diff --git a/src/tuntap/tun_linux.go b/src/tuntap/tun_linux.go index ad7b64ef..0a845368 100644 --- a/src/tuntap/tun_linux.go +++ b/src/tuntap/tun_linux.go @@ -10,7 +10,7 @@ import ( ) // Configures the TUN adapter with the correct IPv6 address and MTU. -func (tun *TunAdapter) setup(ifname string, addr string, mtu MTU) error { +func (tun *TunAdapter) setup(ifname string, addr string, mtu uint64) error { if ifname == "auto" { ifname = "\000" } @@ -20,7 +20,7 @@ func (tun *TunAdapter) setup(ifname string, addr string, mtu MTU) error { } tun.iface = iface if mtu, err := iface.MTU(); err == nil { - tun.mtu = getSupportedMTU(MTU(mtu)) + tun.mtu = getSupportedMTU(uint64(mtu)) } else { tun.mtu = 0 } diff --git a/src/tuntap/tun_other.go b/src/tuntap/tun_other.go index 8a27f57b..c0321267 100644 --- a/src/tuntap/tun_other.go +++ b/src/tuntap/tun_other.go @@ -10,14 +10,14 @@ import ( ) // Configures the TUN adapter with the correct IPv6 address and MTU. -func (tun *TunAdapter) setup(ifname string, addr string, mtu int) error { +func (tun *TunAdapter) setup(ifname string, addr string, mtu uint64) error { iface, err := wgtun.CreateTUN(ifname, mtu) if err != nil { panic(err) } tun.iface = iface if mtu, err := iface.MTU(); err == nil { - tun.mtu = getSupportedMTU(mtu) + tun.mtu = getSupportedMTU(uint64(mtu)) } else { tun.mtu = 0 } diff --git a/src/tuntap/tun_windows.go b/src/tuntap/tun_windows.go index 8eb21658..7b7ee710 100644 --- a/src/tuntap/tun_windows.go +++ b/src/tuntap/tun_windows.go @@ -19,7 +19,7 @@ import ( // This is to catch Windows platforms // Configures the TUN adapter with the correct IPv6 address and MTU. -func (tun *TunAdapter) setup(ifname string, addr string, mtu MTU) error { +func (tun *TunAdapter) setup(ifname string, addr string, mtu uint64) error { if ifname == "auto" { ifname = defaults.GetDefaults().DefaultIfName } @@ -43,14 +43,14 @@ func (tun *TunAdapter) setup(ifname string, addr string, mtu MTU) error { return err } if mtu, err := iface.MTU(); err == nil { - tun.mtu = MTU(mtu) + tun.mtu = uint64(mtu) } return nil }) } // Sets the MTU of the TAP adapter. -func (tun *TunAdapter) setupMTU(mtu MTU) error { +func (tun *TunAdapter) setupMTU(mtu uint64) error { if tun.iface == nil || tun.Name() == "" { return errors.New("Can't configure MTU as TUN adapter is not present") }