diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-06-08 22:35:09 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-06-09 11:39:06 +0200 |
commit | c7b7b1247b27e08f26ec403f959748564b87b0cb (patch) | |
tree | dbcc976aa858aee3ebb079307d2aed4c0ee42ff3 | |
parent | README: update repo location (diff) | |
download | wireguard-apple-c7b7b1247b27e08f26ec403f959748564b87b0cb.tar.xz wireguard-apple-c7b7b1247b27e08f26ec403f959748564b87b0cb.zip |
TunnelProvider: store the entire NWPath
Otherwise [utun0, en0] == [en0, utun0] before WiFi has connected, and we
wind up not rebinding after WiFi does successfully connect, which means
people have trouble when resuming from sleep.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift index 0618b19..2ecd610 100644 --- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift +++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift @@ -11,7 +11,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { private var handle: Int32? private var networkMonitor: NWPathMonitor? private var ifname: String? - private var lastSeenInterfaces: [String] = [] + private var lastPath: Network.NWPath? private var packetTunnelSettingsGenerator: PacketTunnelSettingsGenerator? deinit { @@ -143,18 +143,15 @@ class PacketTunnelProvider: NEPacketTunnelProvider { private func pathUpdate(path: Network.NWPath) { guard let handle = handle else { return } - guard let ifname = ifname else { return } wg_log(.debug, message: "Network change detected with \(path.status) route and interface order \(path.availableInterfaces)") - guard path.status == .satisfied else { return } #if os(iOS) if let packetTunnelSettingsGenerator = packetTunnelSettingsGenerator { _ = packetTunnelSettingsGenerator.endpointUapiConfiguration().withGoString { return wgSetConfig(handle, $0) } } #endif - let interfaces = path.availableInterfaces.filter { $0.name != ifname }.compactMap { $0.name } - if !interfaces.elementsEqual(lastSeenInterfaces) { - lastSeenInterfaces = interfaces + if path != lastPath { + lastPath = path wgBumpSockets(handle) } } |