tun.go raw
1 /* SPDX-License-Identifier: MIT
2 *
3 * Copyright (C) 2017-2025 WireGuard LLC. All Rights Reserved.
4 */
5
6 package device
7
8 import (
9 "fmt"
10
11 "golang.zx2c4.com/wireguard/tun"
12 )
13
14 const DefaultMTU = 1420
15
16 func (device *Device) RoutineTUNEventReader() {
17 device.log.Verbosef("Routine: event worker - started")
18
19 for event := range device.tun.device.Events() {
20 if event&tun.EventMTUUpdate != 0 {
21 mtu, err := device.tun.device.MTU()
22 if err != nil {
23 device.log.Errorf("Failed to load updated MTU of device: %v", err)
24 continue
25 }
26 if mtu < 0 {
27 device.log.Errorf("MTU not updated to negative value: %v", mtu)
28 continue
29 }
30 var tooLarge string
31 if mtu > MaxContentSize {
32 tooLarge = fmt.Sprintf(" (too large, capped at %v)", MaxContentSize)
33 mtu = MaxContentSize
34 }
35 old := device.tun.mtu.Swap(int32(mtu))
36 if int(old) != mtu {
37 device.log.Verbosef("MTU updated: %v%s", mtu, tooLarge)
38 }
39 }
40
41 if event&tun.EventUp != 0 {
42 device.log.Verbosef("Interface up requested")
43 device.Up()
44 }
45
46 if event&tun.EventDown != 0 {
47 device.log.Verbosef("Interface down requested")
48 device.Down()
49 }
50 }
51
52 device.log.Verbosef("Routine: event worker - stopped")
53 }
54