diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-12-12 00:45:50 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-12-12 01:11:43 +0100 |
commit | 034a1a12f7849276823546f369b00507dc8029ce (patch) | |
tree | 47ad6263978713be38e331c877602ba622e6d9d1 /WireGuard/WireGuardNetworkExtension | |
parent | Fixed a potential race condition, better naming on PacketTunnelSettingsGenerator methods (diff) | |
download | wireguard-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/WireGuardNetworkExtension')
-rw-r--r-- | WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift | 18 | ||||
-rw-r--r-- | WireGuard/WireGuardNetworkExtension/PacketTunnelSettingsGenerator.swift | 4 |
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") |