// // PacketTunnelProvider+FileDescriptor.swift // YggdrasilNetworkExtension // // Created by Neil on 06/06/2023. // import Foundation extension PacketTunnelProvider { // SPDX-License-Identifier: MIT // Copyright © 2018-2023 WireGuard LLC. All Rights Reserved. // Original source location: https://github.com/WireGuard/wireguard-apple/blob/2fec12a6e1f6e3460b6ee483aa00ad29cddadab1/Sources/WireGuardKit/WireGuardAdapter.swift#L60-L90 internal var tunnelFileDescriptor: Int32? { var ctlInfo = ctl_info() withUnsafeMutablePointer(to: &ctlInfo.ctl_name) { $0.withMemoryRebound(to: CChar.self, capacity: MemoryLayout.size(ofValue: $0.pointee)) { _ = strcpy($0, "com.apple.net.utun_control") } } for fd: Int32 in 0...1024 { var addr = sockaddr_ctl() var ret: Int32 = -1 var len = socklen_t(MemoryLayout.size(ofValue: addr)) withUnsafeMutablePointer(to: &addr) { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { ret = getpeername(fd, $0, &len) } } if ret != 0 || addr.sc_family != AF_SYSTEM { continue } if ctlInfo.ctl_id == 0 { ret = ioctl(fd, CTLIOCGINFO, &ctlInfo) if ret != 0 { continue } } if addr.sc_id == ctlInfo.ctl_id { return fd } } return nil } }