summaryrefslogtreecommitdiffhomepage
path: root/device/tun.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-03 04:04:41 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-03 05:00:40 +0100
commit69f0fe67b63d90e523a5a1241fb1b46c2e8dbe03 (patch)
tree1ef86da3242afde462dcadb7241bb09f499d5bd7 /device/tun.go
parentd435be35cac49af9367b2005d831d55e570c4b1b (diff)
global: begin modularization
Diffstat (limited to 'device/tun.go')
-rw-r--r--device/tun.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/device/tun.go b/device/tun.go
new file mode 100644
index 0000000..bc5f1f1
--- /dev/null
+++ b/device/tun.go
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package device
+
+import (
+ "golang.zx2c4.com/wireguard/tun"
+ "sync/atomic"
+)
+
+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()
+
+ for event := range device.tun.device.Events() {
+ if event&tun.TUNEventMTUUpdate != 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))
+ }
+ }
+
+ if event&tun.TUNEventUp != 0 && !setUp {
+ logInfo.Println("Interface set up")
+ setUp = true
+ device.Up()
+ }
+
+ if event&tun.TUNEventDown != 0 && setUp {
+ logInfo.Println("Interface set down")
+ setUp = false
+ device.Down()
+ }
+ }
+
+ logDebug.Println("Routine: event worker - stopped")
+ device.state.stopping.Done()
+}