diff options
Diffstat (limited to 'device/tun.go')
-rw-r--r-- | device/tun.go | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/device/tun.go b/device/tun.go index 0a3fc79..c85dd50 100644 --- a/device/tun.go +++ b/device/tun.go @@ -1,12 +1,12 @@ /* SPDX-License-Identifier: MIT * - * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved. + * Copyright (C) 2017-2025 WireGuard LLC. All Rights Reserved. */ package device import ( - "sync/atomic" + "fmt" "golang.zx2c4.com/wireguard/tun" ) @@ -14,43 +14,40 @@ import ( const DefaultMTU = 1420 func (device *Device) RoutineTUNEventReader() { - setUp := false - logDebug := device.log.Debug - logInfo := device.log.Info - logError := device.log.Error - - logDebug.Println("Routine: event worker - started") - device.state.starting.Done() + device.log.Verbosef("Routine: event worker - started") for event := range device.tun.device.Events() { if event&tun.EventMTUUpdate != 0 { mtu, err := device.tun.device.MTU() - old := atomic.LoadInt32(&device.tun.mtu) if err != nil { - logError.Println("Failed to load updated MTU of device:", err) - } else if int(old) != mtu { - if mtu+MessageTransportSize > MaxMessageSize { - logInfo.Println("MTU updated:", mtu, "(too large)") - } else { - logInfo.Println("MTU updated:", mtu) - } - atomic.StoreInt32(&device.tun.mtu, int32(mtu)) + device.log.Errorf("Failed to load updated MTU of device: %v", err) + continue + } + if mtu < 0 { + device.log.Errorf("MTU not updated to negative value: %v", mtu) + continue + } + var tooLarge string + if mtu > MaxContentSize { + tooLarge = fmt.Sprintf(" (too large, capped at %v)", MaxContentSize) + mtu = MaxContentSize + } + old := device.tun.mtu.Swap(int32(mtu)) + if int(old) != mtu { + device.log.Verbosef("MTU updated: %v%s", mtu, tooLarge) } } - if event&tun.EventUp != 0 && !setUp { - logInfo.Println("Interface set up") - setUp = true + if event&tun.EventUp != 0 { + device.log.Verbosef("Interface up requested") device.Up() } - if event&tun.EventDown != 0 && setUp { - logInfo.Println("Interface set down") - setUp = false + if event&tun.EventDown != 0 { + device.log.Verbosef("Interface down requested") device.Down() } } - logDebug.Println("Routine: event worker - stopped") - device.state.stopping.Done() + device.log.Verbosef("Routine: event worker - stopped") } |