From b7f69d20b6c6560b6cdced961bed428e68c66719 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 8 Mar 2021 20:29:12 +0100 Subject: [PATCH] Kit: Go: bump to latest API Signed-off-by: Jason A. Donenfeld --- Sources/WireGuardKit/WireGuardAdapter.swift | 22 +++--- Sources/WireGuardKitGo/Makefile | 16 +++-- .../{api-ios.go => api-apple.go} | 68 ++++++++++++------- Sources/WireGuardKitGo/go.mod | 10 ++- Sources/WireGuardKitGo/go.sum | 23 +++---- .../goruntime-boottime-over-monotonic.diff | 18 ++--- .../PacketTunnelProvider.swift | 4 +- 7 files changed, 86 insertions(+), 75 deletions(-) rename Sources/WireGuardKitGo/{api-ios.go => api-apple.go} (70%) diff --git a/Sources/WireGuardKit/WireGuardAdapter.swift b/Sources/WireGuardKit/WireGuardAdapter.swift index 16e1b28..42f66f7 100644 --- a/Sources/WireGuardKit/WireGuardAdapter.swift +++ b/Sources/WireGuardKit/WireGuardAdapter.swift @@ -62,7 +62,10 @@ public class WireGuardAdapter { /// Returns a WireGuard version. class var backendVersion: String { - return String(cString: wgVersion()) + guard let ver = wgVersion() else { return "unknown" } + let str = String(cString: ver) + free(UnsafeMutableRawPointer(mutating: ver)) + return str } /// Returns the tunnel device interface name, or nil on error. @@ -265,7 +268,7 @@ public class WireGuardAdapter { .takeUnretainedValue() let swiftString = String(cString: message).trimmingCharacters(in: .newlines) - let tunnelLogLevel = WireGuardLogLevel(rawValue: logLevel) ?? .debug + let tunnelLogLevel = WireGuardLogLevel(rawValue: logLevel) ?? .verbose unretainedSelf.logHandler(tunnelLogLevel, swiftString) } @@ -369,9 +372,9 @@ public class WireGuardAdapter { switch result { case .success((let sourceEndpoint, let resolvedEndpoint)): if sourceEndpoint.host == resolvedEndpoint.host { - self.logHandler(.debug, "DNS64: mapped \(sourceEndpoint.host) to itself.") + self.logHandler(.verbose, "DNS64: mapped \(sourceEndpoint.host) to itself.") } else { - self.logHandler(.debug, "DNS64: mapped \(sourceEndpoint.host) to \(resolvedEndpoint.host)") + self.logHandler(.verbose, "DNS64: mapped \(sourceEndpoint.host) to \(resolvedEndpoint.host)") } case .failure(let resolutionError): self.logHandler(.error, "Failed to resolve endpoint \(resolutionError.address): \(resolutionError.errorDescription ?? "(nil)")") @@ -382,7 +385,7 @@ public class WireGuardAdapter { /// Helper method used by network path monitor. /// - Parameter path: new network path private func didReceivePathUpdate(path: Network.NWPath) { - self.logHandler(.debug, "Network change detected with \(path.status) route and interface order \(path.availableInterfaces)") + self.logHandler(.verbose, "Network change detected with \(path.status) route and interface order \(path.availableInterfaces)") #if os(macOS) if case .started(let handle, _) = self.state { @@ -399,7 +402,7 @@ public class WireGuardAdapter { wgDisableSomeRoamingForBrokenMobileSemantics(handle) wgBumpSockets(handle) } else { - self.logHandler(.info, "Connectivity offline, pausing backend.") + self.logHandler(.verbose, "Connectivity offline, pausing backend.") self.state = .temporaryShutdown(settingsGenerator) wgTurnOff(handle) @@ -408,7 +411,7 @@ public class WireGuardAdapter { case .temporaryShutdown(let settingsGenerator): guard path.status.isSatisfiable else { return } - self.logHandler(.info, "Connectivity online, resuming backend.") + self.logHandler(.verbose, "Connectivity online, resuming backend.") do { try self.setNetworkSettings(settingsGenerator.generateNetworkSettings()) @@ -436,9 +439,8 @@ public class WireGuardAdapter { /// A enum describing WireGuard log levels defined in `api-ios.go`. public enum WireGuardLogLevel: Int32 { - case debug = 0 - case info = 1 - case error = 2 + case verbose = 0 + case error = 1 } private extension Network.NWPath.Status { diff --git a/Sources/WireGuardKitGo/Makefile b/Sources/WireGuardKitGo/Makefile index 767edbd..1d89b5a 100644 --- a/Sources/WireGuardKitGo/Makefile +++ b/Sources/WireGuardKitGo/Makefile @@ -3,9 +3,9 @@ # Copyright (C) 2018-2019 Jason A. Donenfeld . All Rights Reserved. # These are generally passed to us by xcode, but we set working defaults for standalone compilation too. -ARCHS ?= x86_64 #TODO: add arm64 to this list once we support apple silicon -SDK_NAME ?= macosx -SDKROOT ?= $(shell xcrun --sdk $(SDK_NAME) --show-sdk-path) +ARCHS ?= x86_64 arm64 +PLATFORM_NAME ?= macosx +SDKROOT ?= $(shell xcrun --sdk $(PLATFORM_NAME) --show-sdk-path) CONFIGURATION_BUILD_DIR ?= $(CURDIR)/out CONFIGURATION_TEMP_DIR ?= $(CURDIR)/.tmp @@ -17,6 +17,8 @@ BUILDDIR ?= $(CONFIGURATION_TEMP_DIR)/wireguard-go-bridge CFLAGS_PREFIX := $(if $(DEPLOYMENT_TARGET_CLANG_FLAG_NAME),-$(DEPLOYMENT_TARGET_CLANG_FLAG_NAME)=$($(DEPLOYMENT_TARGET_CLANG_ENV_NAME)),) -isysroot $(SDKROOT) -arch GOARCH_arm64 := arm64 GOARCH_x86_64 := amd64 +GOOS_macosx := darwin +GOOS_iphoneos := ios build: $(DESTDIR)/libwg-go.a version-header: $(DESTDIR)/wireguard-go-version.h @@ -34,16 +36,16 @@ define libwg-go-a $(BUILDDIR)/libwg-go-$(1).a: export CGO_ENABLED := 1 $(BUILDDIR)/libwg-go-$(1).a: export CGO_CFLAGS := $(CFLAGS_PREFIX) $(ARCH) $(BUILDDIR)/libwg-go-$(1).a: export CGO_LDFLAGS := $(CFLAGS_PREFIX) $(ARCH) -$(BUILDDIR)/libwg-go-$(1).a: export GOOS := darwin +$(BUILDDIR)/libwg-go-$(1).a: export GOOS := $(GOOS_$(PLATFORM_NAME)) $(BUILDDIR)/libwg-go-$(1).a: export GOARCH := $(GOARCH_$(1)) $(BUILDDIR)/libwg-go-$(1).a: $(GOROOT)/.prepared go.mod - go build -tags ios -ldflags=-w -trimpath -v -o "$(BUILDDIR)/libwg-go-$(1).a" -buildmode c-archive + go build -ldflags=-w -trimpath -v -o "$(BUILDDIR)/libwg-go-$(1).a" -buildmode c-archive rm -f "$(BUILDDIR)/libwg-go-$(1).h" endef $(foreach ARCH,$(ARCHS),$(eval $(call libwg-go-a,$(ARCH)))) -$(DESTDIR)/wireguard-go-version.h: $(GOROOT)/.prepared go.mod - go list -m golang.zx2c4.com/wireguard | sed -n 's/.*v\([0-9.]*\).*/#define WIREGUARD_GO_VERSION "\1"/p' > "$@" +$(DESTDIR)/wireguard-go-version.h: go.mod $(GOROOT)/.prepared + sed -E -n 's/.*golang\.zx2c4\.com\/wireguard +v[0-9.]+-[0-9]+-([0-9a-f]{8})[0-9a-f]{4}.*/#define WIREGUARD_GO_VERSION "\1"/p' "$<" > "$@" $(DESTDIR)/libwg-go.a: $(foreach ARCH,$(ARCHS),$(BUILDDIR)/libwg-go-$(ARCH).a) @mkdir -vp "$(DESTDIR)" diff --git a/Sources/WireGuardKitGo/api-ios.go b/Sources/WireGuardKitGo/api-apple.go similarity index 70% rename from Sources/WireGuardKitGo/api-ios.go rename to Sources/WireGuardKitGo/api-apple.go index 2efb4d7..5d24982 100644 --- a/Sources/WireGuardKitGo/api-ios.go +++ b/Sources/WireGuardKitGo/api-apple.go @@ -14,36 +14,41 @@ package main import "C" import ( - "errors" - "log" + "fmt" "math" "os" "os/signal" "runtime" + "runtime/debug" + "strings" "time" "unsafe" "golang.org/x/sys/unix" + "golang.zx2c4.com/wireguard/conn" "golang.zx2c4.com/wireguard/device" "golang.zx2c4.com/wireguard/tun" ) var loggerFunc unsafe.Pointer var loggerCtx unsafe.Pointer -var versionString *C.char -type CLogger struct { - level C.int +type CLogger int + +func cstring(s string) *C.char { + b, err := unix.BytePtrFromString(s) + if err != nil { + b := [1]C.char{} + return &b[0] + } + return (*C.char)(unsafe.Pointer(b)) } -func (l *CLogger) Write(p []byte) (int, error) { +func (l CLogger) Printf(format string, args ...interface{}) { if uintptr(loggerFunc) == 0 { - return 0, errors.New("No logger initialized") + return } - message := C.CString(string(p)) - C.callLogger(loggerFunc, loggerCtx, l.level, message) - C.free(unsafe.Pointer(message)) - return len(p), nil + C.callLogger(loggerFunc, loggerCtx, C.int(l), cstring(fmt.Sprintf(format, args...))) } type tunnelHandle struct { @@ -54,7 +59,6 @@ type tunnelHandle struct { var tunnelHandles = make(map[int32]tunnelHandle) func init() { - versionString = C.CString(device.WireGuardGoVersion) signals := make(chan os.Signal) signal.Notify(signals, unix.SIGUSR2) go func() { @@ -81,40 +85,39 @@ func wgSetLogger(context, loggerFn uintptr) { //export wgTurnOn func wgTurnOn(settings *C.char, tunFd int32) int32 { logger := &device.Logger{ - Debug: log.New(&CLogger{level: 0}, "", 0), - Info: log.New(&CLogger{level: 1}, "", 0), - Error: log.New(&CLogger{level: 2}, "", 0), + Verbosef: CLogger(0).Printf, + Errorf: CLogger(1).Printf, } dupTunFd, err := unix.Dup(int(tunFd)) if err != nil { - logger.Error.Println(err) + logger.Errorf("Unable to dup tun fd: %v", err) return -1 } err = unix.SetNonblock(dupTunFd, true) if err != nil { - logger.Error.Println(err) + logger.Errorf("Unable to set tun fd as non blocking: %v", err) unix.Close(dupTunFd) return -1 } tun, err := tun.CreateTUNFromFile(os.NewFile(uintptr(dupTunFd), "/dev/tun"), 0) if err != nil { - logger.Error.Println(err) + logger.Errorf("Unable to create new tun device from fd: %v", err) unix.Close(dupTunFd) return -1 } - logger.Info.Println("Attaching to interface") - dev := device.NewDevice(tun, logger) + logger.Verbosef("Attaching to interface") + dev := device.NewDevice(tun, conn.NewStdNetBind(), logger) err = dev.IpcSet(C.GoString(settings)) if err != nil { - logger.Error.Println(err) + logger.Errorf("Unable to set IPC settings: %v", err) unix.Close(dupTunFd) return -1 } dev.Up() - logger.Info.Println("Device started") + logger.Verbosef("Device started") var i int32 for i = 0; i < math.MaxInt32; i++ { @@ -148,7 +151,7 @@ func wgSetConfig(tunnelHandle int32, settings *C.char) int64 { } err := dev.IpcSet(C.GoString(settings)) if err != nil { - dev.Error.Println(err) + dev.Errorf("Unable to set IPC settings: %v", err) if ipcErr, ok := err.(*device.IPCError); ok { return ipcErr.ErrorCode() } @@ -183,10 +186,10 @@ func wgBumpSockets(tunnelHandle int32) { dev.SendKeepalivesToPeersWithCurrentKeypair() return } - dev.Error.Printf("Unable to update bind, try %d: %v", i+1, err) + dev.Errorf("Unable to update bind, try %d: %v", i+1, err) time.Sleep(time.Second / 2) } - dev.Error.Println("Gave up trying to update bind; tunnel is likely dysfunctional") + dev.Errorf("Gave up trying to update bind; tunnel is likely dysfunctional") }() } @@ -201,7 +204,20 @@ func wgDisableSomeRoamingForBrokenMobileSemantics(tunnelHandle int32) { //export wgVersion func wgVersion() *C.char { - return versionString + info, ok := debug.ReadBuildInfo() + if !ok { + return C.CString("unknown") + } + for _, dep := range info.Deps { + if dep.Path == "golang.zx2c4.com/wireguard" { + parts := strings.Split(dep.Version, "-") + if len(parts) == 3 && len(parts[2]) == 12 { + return C.CString(parts[2][:7]) + } + return C.CString(dep.Version) + } + } + return C.CString("unknown") } func main() {} diff --git a/Sources/WireGuardKitGo/go.mod b/Sources/WireGuardKitGo/go.mod index 65d2beb..8ec4816 100644 --- a/Sources/WireGuardKitGo/go.mod +++ b/Sources/WireGuardKitGo/go.mod @@ -1,10 +1,8 @@ -module golang.zx2c4.com/wireguard/ios +module golang.zx2c4.com/wireguard/apple -go 1.15 +go 1.16 require ( - golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect - golang.org/x/net v0.0.0-20201216054612-986b41b23924 // indirect - golang.org/x/sys v0.0.0-20201223074533-0d417f636930 - golang.zx2c4.com/wireguard v0.0.20201119-0.20201223215156-09728dc6b340 + golang.org/x/sys v0.0.0-20210308170721-88b6017d0656 + golang.zx2c4.com/wireguard v0.0.0-20210307162820-f4695db51c39 ) diff --git a/Sources/WireGuardKitGo/go.sum b/Sources/WireGuardKitGo/go.sum index 478631d..89d522b 100644 --- a/Sources/WireGuardKitGo/go.sum +++ b/Sources/WireGuardKitGo/go.sum @@ -1,24 +1,19 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201216054612-986b41b23924 h1:QsnDpLLOKwHBBDa8nDws4DYNc/ryVW2vCpxCs09d4PY= -golang.org/x/net v0.0.0-20201216054612-986b41b23924/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201223074533-0d417f636930 h1:vRgIt+nup/B/BwIS0g2oC0haq0iqbV3ZA+u6+0TlNCo= -golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305215415-5cdee2b1b5a0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210308170721-88b6017d0656 h1:FuBaiPCiXkq4v+JY5JEGPU/HwEZwpVyDbu/KBz9fU+4= +golang.org/x/sys v0.0.0-20210308170721-88b6017d0656/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.zx2c4.com/wireguard v0.0.20201119-0.20201223215156-09728dc6b340 h1:X6jrf2sUEj3n+q2oB/I3C088vQFKREz2UzgVJ8wENtI= -golang.zx2c4.com/wireguard v0.0.20201119-0.20201223215156-09728dc6b340/go.mod h1:ITsWNpkFv78VPB7f8MiyuxeEMcHR4jfxHGCJLPP3GHs= +golang.zx2c4.com/wireguard v0.0.0-20210307162820-f4695db51c39 h1:yv331J9aB1fuvxzneUKsRnWyhwK+aj495rADUXSP7Uk= +golang.zx2c4.com/wireguard v0.0.0-20210307162820-f4695db51c39/go.mod h1:ojGPy+9W6ZSM8anL+xC67fvh8zPQJwA6KpFOHyDWLX4= diff --git a/Sources/WireGuardKitGo/goruntime-boottime-over-monotonic.diff b/Sources/WireGuardKitGo/goruntime-boottime-over-monotonic.diff index d5212ef..2f7f54e 100644 --- a/Sources/WireGuardKitGo/goruntime-boottime-over-monotonic.diff +++ b/Sources/WireGuardKitGo/goruntime-boottime-over-monotonic.diff @@ -1,4 +1,4 @@ -From aa85e0f90c9031ff5be32296e9fed1637a2eceae Mon Sep 17 00:00:00 2001 +From 516dc0c15ff1ab781e0677606b5be72919251b3e Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 9 Dec 2020 14:07:06 +0100 Subject: [PATCH] runtime: use libc_mach_continuous_time in nanotime on Darwin @@ -18,23 +18,23 @@ Change-Id: Ia3282e8bd86f95ad2b76427063e60a005563f4eb 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/runtime/sys_darwin.go b/src/runtime/sys_darwin.go -index 06474434c9..6f7ca37122 100644 +index 4a3f2fc453..4a69403b32 100644 --- a/src/runtime/sys_darwin.go +++ b/src/runtime/sys_darwin.go -@@ -469,7 +469,7 @@ func setNonblock(fd int32) { +@@ -440,7 +440,7 @@ func setNonblock(fd int32) { //go:cgo_import_dynamic libc_usleep usleep "/usr/lib/libSystem.B.dylib" //go:cgo_import_dynamic libc_mach_timebase_info mach_timebase_info "/usr/lib/libSystem.B.dylib" -//go:cgo_import_dynamic libc_mach_absolute_time mach_absolute_time "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_mach_continuous_time mach_continuous_time "/usr/lib/libSystem.B.dylib" - //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" + //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" //go:cgo_import_dynamic libc_sigaction sigaction "/usr/lib/libSystem.B.dylib" //go:cgo_import_dynamic libc_pthread_sigmask pthread_sigmask "/usr/lib/libSystem.B.dylib" diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s -index 825852d673..5a8b994fb1 100644 +index 630fb5df64..4499c88802 100644 --- a/src/runtime/sys_darwin_amd64.s +++ b/src/runtime/sys_darwin_amd64.s -@@ -109,7 +109,7 @@ TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0 +@@ -114,7 +114,7 @@ TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$0 PUSHQ BP MOVQ SP, BP MOVQ DI, BX @@ -44,10 +44,10 @@ index 825852d673..5a8b994fb1 100644 MOVL timebase<>+machTimebaseInfo_numer(SB), SI MOVL timebase<>+machTimebaseInfo_denom(SB), DI // atomic read diff --git a/src/runtime/sys_darwin_arm64.s b/src/runtime/sys_darwin_arm64.s -index 585d4f2c64..c556d88730 100644 +index 96d2ed1076..f046545395 100644 --- a/src/runtime/sys_darwin_arm64.s +++ b/src/runtime/sys_darwin_arm64.s -@@ -135,7 +135,7 @@ GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size) +@@ -143,7 +143,7 @@ GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size) TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$40 MOVD R0, R19 @@ -57,5 +57,5 @@ index 585d4f2c64..c556d88730 100644 MOVW timebase<>+machTimebaseInfo_numer(SB), R20 MOVD $timebase<>+machTimebaseInfo_denom(SB), R21 -- -2.29.2 +2.30.1 diff --git a/Sources/WireGuardNetworkExtension/PacketTunnelProvider.swift b/Sources/WireGuardNetworkExtension/PacketTunnelProvider.swift index 5ba8222..5b09674 100644 --- a/Sources/WireGuardNetworkExtension/PacketTunnelProvider.swift +++ b/Sources/WireGuardNetworkExtension/PacketTunnelProvider.swift @@ -109,10 +109,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider { extension WireGuardLogLevel { var osLogLevel: OSLogType { switch self { - case .debug: + case .verbose: return .debug - case .info: - return .info case .error: return .error }