aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-12-12 00:45:50 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2018-12-12 01:11:43 +0100
commit034a1a12f7849276823546f369b00507dc8029ce (patch)
tree47ad6263978713be38e331c877602ba622e6d9d1 /WireGuard
parentFixed a potential race condition, better naming on PacketTunnelSettingsGenerator methods (diff)
downloadwireguard-apple-034a1a12f7849276823546f369b00507dc8029ce.tar.xz
wireguard-apple-034a1a12f7849276823546f369b00507dc8029ce.zip
Supply missing pieces of path change
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard')
-rw-r--r--WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift18
-rw-r--r--WireGuard/WireGuardNetworkExtension/PacketTunnelSettingsGenerator.swift4
2 files changed, 12 insertions, 10 deletions
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
index 04e9637..f5f0296 100644
--- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
+++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
@@ -95,16 +95,18 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
networkMonitor = NWPathMonitor()
networkMonitor?.pathUpdateHandler = { path in
guard handle >= 0 else { return }
-
if path.status == .satisfied {
- let endpointString = packetTunnelSettingsGenerator.endpointUapiConfiguration()
-
- let endpointGoString = endpointString.withCString {
- gostring_t(p: $0, n: endpointString.utf8.count)
+ wg_log(.debug, message: "Network change detected, re-establishing sockets and IPs: \(path.availableInterfaces)")
+ let endpointString = packetTunnelSettingsGenerator.endpointUapiConfiguration(currentListenPort: wgGetListenPort(handle))
+ let err = endpointString.withCString {
+ wgSetConfig(handle, gostring_t(p: $0, n: endpointString.utf8.count))
+ }
+ if err == -EADDRINUSE {
+ let endpointString = packetTunnelSettingsGenerator.endpointUapiConfiguration(currentListenPort: 0)
+ _ = endpointString.withCString {
+ wgSetConfig(handle, gostring_t(p: $0, n: endpointString.utf8.count))
+ }
}
-
- wg_log(.debug, staticMessage: "Network change detected, calling wgSetConfig")
- wgSetConfig(handle, endpointGoString)
}
}
networkMonitor?.start(queue: DispatchQueue(label: "NetworkMonitor"))
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelSettingsGenerator.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelSettingsGenerator.swift
index 0eea95a..61e161e 100644
--- a/WireGuard/WireGuardNetworkExtension/PacketTunnelSettingsGenerator.swift
+++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelSettingsGenerator.swift
@@ -15,8 +15,8 @@ class PacketTunnelSettingsGenerator {
self.resolvedEndpoints = resolvedEndpoints
}
- func endpointUapiConfiguration() -> String {
- var wgSettings = "listen_port=\(tunnelConfiguration.interface.listenPort ?? 0)\n"
+ func endpointUapiConfiguration(currentListenPort: UInt16) -> String {
+ var wgSettings = "listen_port=\(tunnelConfiguration.interface.listenPort ?? currentListenPort)\n"
for (i, peer) in tunnelConfiguration.peers.enumerated() {
wgSettings.append("public_key=\(peer.publicKey.hexEncodedString())\n")