Refactor interface name query
Signed-off-by: Andrej Mihajlov <and@mullvad.net> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
112545248e
commit
35300d1c5f
|
@ -62,14 +62,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotDetermineFileDescriptor)
|
startTunnelCompletionHandler(PacketTunnelProviderError.couldNotDetermineFileDescriptor)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var ifnameSize = socklen_t(IFNAMSIZ)
|
|
||||||
let ifnamePtr = UnsafeMutablePointer<CChar>.allocate(capacity: Int(ifnameSize))
|
self.ifname = Self.getInterfaceName(fileDescriptor: fileDescriptor)
|
||||||
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()
|
|
||||||
wg_log(.info, message: "Tunnel interface is \(self.ifname ?? "unknown")")
|
wg_log(.info, message: "Tunnel interface is \(self.ifname ?? "unknown")")
|
||||||
|
|
||||||
let handle = self.packetTunnelSettingsGenerator!.uapiConfiguration()
|
let handle = self.packetTunnelSettingsGenerator!.uapiConfiguration()
|
||||||
.withCString { return wgTurnOn($0, fileDescriptor) }
|
.withCString { return wgTurnOn($0, fileDescriptor) }
|
||||||
if handle < 0 {
|
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() {
|
private func configureLogger() {
|
||||||
Logger.configureGlobal(tagged: "NET", withFilePath: FileManager.logFileURL?.path)
|
Logger.configureGlobal(tagged: "NET", withFilePath: FileManager.logFileURL?.path)
|
||||||
wgSetLogger { level, msgC in
|
wgSetLogger { level, msgC in
|
||||||
|
|
Loading…
Reference in New Issue