mirror of
https://git.zx2c4.com/wireguard-go
synced 2024-11-15 01:05:15 +01:00
3516ccc1e2
The TUN event reader does three things: Change MTU, device up, and device down. Changing the MTU after the device is closed does no harm. Device up and device down don't make sense after the device is closed, but we can check that condition before proceeding with changeState. There's thus no reason to block device.Close on RoutineTUNEventReader exiting. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
/* SPDX-License-Identifier: MIT
|
|
*
|
|
* Copyright (C) 2017-2021 WireGuard LLC. All Rights Reserved.
|
|
*/
|
|
|
|
package device
|
|
|
|
import (
|
|
"sync/atomic"
|
|
|
|
"golang.zx2c4.com/wireguard/tun"
|
|
)
|
|
|
|
const DefaultMTU = 1420
|
|
|
|
func (device *Device) RoutineTUNEventReader() {
|
|
setUp := false
|
|
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 {
|
|
device.log.Errorf("Failed to load updated MTU of device: %v", err)
|
|
} else if int(old) != mtu {
|
|
if mtu+MessageTransportSize > MaxMessageSize {
|
|
device.log.Verbosef("MTU updated: %v (too large)", mtu)
|
|
} else {
|
|
device.log.Verbosef("MTU updated: %v", mtu)
|
|
}
|
|
atomic.StoreInt32(&device.tun.mtu, int32(mtu))
|
|
}
|
|
}
|
|
|
|
if event&tun.EventUp != 0 && !setUp {
|
|
device.log.Verbosef("Interface set up")
|
|
setUp = true
|
|
device.Up()
|
|
}
|
|
|
|
if event&tun.EventDown != 0 && setUp {
|
|
device.log.Verbosef("Interface set down")
|
|
setUp = false
|
|
device.Down()
|
|
}
|
|
}
|
|
|
|
device.log.Verbosef("Routine: event worker - stopped")
|
|
}
|