diff options
author | Andrej Mihajlov <and@mullvad.net> | 2020-06-19 12:37:34 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-06-25 17:50:03 -0600 |
commit | 35300d1c5f108eb9dff4999413a3f8b77211cc24 (patch) | |
tree | e7a49105aec3c19beae0fd2f439da2838d3f893f /WireGuard | |
parent | Localization: Update Japanese (diff) | |
download | wireguard-apple-35300d1c5f108eb9dff4999413a3f8b77211cc24.tar.xz wireguard-apple-35300d1c5f108eb9dff4999413a3f8b77211cc24.zip |
Refactor interface name query
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard')
-rw-r--r-- | WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift index fc93630..2f7062f 100644 --- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift +++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift @@ -62,14 +62,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider { startTunnelCompletionHandler(PacketTunnelProviderError.couldNotDetermineFileDescriptor) return } - var ifnameSize = socklen_t(IFNAMSIZ) - let ifnamePtr = UnsafeMutablePointer<CChar>.allocate(capacity: Int(ifnameSize)) - ifnamePtr.initialize(repeating: 0, count: Int(ifnameSize)) - if getsockopt(fileDescriptor, 2 /* SYSPROTO_CONTROL */, 2 /* UTUN_OPT_IFNAME */, ifnamePtr, &ifnameSize) == 0 { - self.ifname = String(cString: ifnamePtr) - } - ifnamePtr.deallocate() + + self.ifname = Self.getInterfaceName(fileDescriptor: fileDescriptor) wg_log(.info, message: "Tunnel interface is \(self.ifname ?? "unknown")") + let handle = self.packetTunnelSettingsGenerator!.uapiConfiguration() .withCString { return wgTurnOn($0, fileDescriptor) } if handle < 0 { @@ -122,6 +118,28 @@ class PacketTunnelProvider: NEPacketTunnelProvider { } } + private class func getInterfaceName(fileDescriptor: Int32) -> String? { + var ifnameBytes = [CChar](repeating: 0, count: Int(IF_NAMESIZE)) + + return ifnameBytes.withUnsafeMutableBufferPointer { bufferPointer -> String? in + guard let baseAddress = bufferPointer.baseAddress else { return nil } + + var ifnameSize = socklen_t(bufferPointer.count) + let result = getsockopt( + fileDescriptor, + 2 /* SYSPROTO_CONTROL */, + 2 /* UTUN_OPT_IFNAME */, + baseAddress, &ifnameSize + ) + + if result == 0 { + return String(cString: baseAddress) + } else { + return nil + } + } + } + private func configureLogger() { Logger.configureGlobal(tagged: "NET", withFilePath: FileManager.logFileURL?.path) wgSetLogger { level, msgC in |