aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WireGuardNetworkExtension/PacketTunnelProvider.swift10
m---------wireguard-go0
-rw-r--r--wireguard-go-bridge/Makefile2
-rw-r--r--wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/api-ios.go1
-rw-r--r--wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/queueconstants.go16
5 files changed, 23 insertions, 6 deletions
diff --git a/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuardNetworkExtension/PacketTunnelProvider.swift
index e884b8f..cb8d092 100644
--- a/WireGuardNetworkExtension/PacketTunnelProvider.swift
+++ b/WireGuardNetworkExtension/PacketTunnelProvider.swift
@@ -136,6 +136,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
return withStringsAsGoStrings(interfaceName, settings) { (nameGoStr, settingsGoStr) -> Int32 in
return withUnsafeMutablePointer(to: &wgContext) { (wgCtxPtr) -> Int32 in
return wgTurnOn(nameGoStr, settingsGoStr, { (wgCtxPtr, buf, len) -> Int in
+ autoreleasepool {
// read_fn: Read from the TUN interface and pass it on to WireGuard
guard let wgCtxPtr = wgCtxPtr else { return 0 }
guard let buf = buf else { return 0 }
@@ -149,7 +150,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
return packetData.count
}
return 0
+ }
}, { (wgCtxPtr, buf, len) -> Int in
+ autoreleasepool {
// write_fn: Receive packets from WireGuard and write to the TUN interface
guard let wgCtxPtr = wgCtxPtr else { return 0 }
guard let buf = buf else { return 0 }
@@ -170,6 +173,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
return len
}
return 0
+ }
},
wgCtxPtr)
}
@@ -203,18 +207,16 @@ class WireGuardContext {
if outboundPackets.isEmpty {
readPacketCondition.lock()
packetFlow.readPacketObjects(completionHandler: packetsRead)
- // Wait till the completion handler of packetFlow.readPacketObjects() finishes
while outboundPackets.isEmpty && !self.isTunnelClosed {
readPacketCondition.wait()
}
readPacketCondition.unlock()
}
isTunnelClosed = self.isTunnelClosed
- if outboundPackets.isEmpty {
- return nil
- } else {
+ if !outboundPackets.isEmpty {
return outboundPackets.removeFirst()
}
+ return nil
}
func writePacket(packet: NEPacket, isTunnelClosed: inout Bool) -> Bool {
diff --git a/wireguard-go b/wireguard-go
-Subproject ebc7541953269b39cd73d703166b9b8ee7b34e3
+Subproject 70bcf9ecb801dadd82c68143209ca2707aa63d2
diff --git a/wireguard-go-bridge/Makefile b/wireguard-go-bridge/Makefile
index 813feb4..95cdfec 100644
--- a/wireguard-go-bridge/Makefile
+++ b/wireguard-go-bridge/Makefile
@@ -2,7 +2,7 @@
#
# Copyright (C) 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
-FILES := $(filter-out %/main.go,$(wildcard ../wireguard-go/*/*.go) $(wildcard ../wireguard-go/*.go))
+FILES := $(filter-out %/main.go %/queueconstants.go,$(wildcard ../wireguard-go/*/*.go) $(wildcard ../wireguard-go/*.go))
ARCHES := arm64 armv7 x86_64
GOARCH_arm64 := arm64
diff --git a/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/api-ios.go b/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/api-ios.go
index 753edf4..dcc588f 100644
--- a/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/api-ios.go
+++ b/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/api-ios.go
@@ -52,7 +52,6 @@ var tunnelHandles map[int32]*Device
func init() {
versionString = C.CString(WireGuardGoVersion)
- preallocatedBuffers = 64
roamingDisabled = true
tunnelHandles = make(map[int32]*Device)
signals := make(chan os.Signal)
diff --git a/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/queueconstants.go b/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/queueconstants.go
new file mode 100644
index 0000000..410af14
--- /dev/null
+++ b/wireguard-go-bridge/src/git.zx2c4.com/wireguard-go/queueconstants.go
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright (C) 2017-2018 WireGuard LLC. All Rights Reserved.
+ */
+
+package main
+
+/* Fit within memory limits for iOS */
+
+const (
+ QueueOutboundSize = 1024
+ QueueInboundSize = 1024
+ QueueHandshakeSize = 1024
+ MaxSegmentSize = 1700
+ PreallocatedBuffersPerPool = 1024
+)