aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2020-06-19 12:37:34 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2020-06-25 17:50:03 -0600
commit35300d1c5f108eb9dff4999413a3f8b77211cc24 (patch)
treee7a49105aec3c19beae0fd2f439da2838d3f893f /WireGuard
parentLocalization: Update Japanese (diff)
downloadwireguard-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.swift32
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