From ae6e2b3cd505221e50022666eacc4a38b04b53bb Mon Sep 17 00:00:00 2001 From: agnosticdev Date: Wed, 17 Jun 2026 08:51:16 -0700 Subject: [PATCH 1/2] Disable Netlink to unblock swift-nio-quic builds --- Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift | 10 +++++----- Sources/SwiftNetwork/System/Linux/LinuxRoute.swift | 8 +++++++- .../include/SwiftNetworkLinuxShim.h | 6 ++++-- .../SwiftNetworkTests/SwiftNetworkInterfaceTests.swift | 6 +++++- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift b/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift index 5adfd4f..eb2c2f5 100644 --- a/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift +++ b/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift @@ -35,7 +35,7 @@ struct NetlinkAddress: IPAddress, Hashable, CustomDebugStringConvertible { /// Creates a Netlink address from raw bytes. init?(_ bytes: [UInt8]) { if bytes.count >= NetlinkAddress.layoutSize { - #if os(Linux) + #if os(Linux) && NETLINK_ENABLED let nl = bytes.withUnsafeBytes { $0.load(as: sockaddr_nl.self) } self.init(nl) #else @@ -47,12 +47,12 @@ struct NetlinkAddress: IPAddress, Hashable, CustomDebugStringConvertible { } } - #if os(Linux) + #if os(Linux) && NETLINK_ENABLED // Linux has a specific type: sockaddr_nl init(_ sockaddr_nl: sockaddr_nl) { self.address = sockaddr_nl } - #elseif canImport(Darwin) + #else // rtsock on Darwin uses sockaddr // struct sockaddr route_dst = { .sa_len = 2, .sa_family = PF_ROUTE, .sa_data = { 0, } }; init(_ sockaddr: sockaddr) { @@ -68,14 +68,14 @@ struct NetlinkAddress: IPAddress, Hashable, CustomDebugStringConvertible { "NetlinkAddress" } - #if os(Linux) + #if os(Linux) && NETLINK_ENABLED var address: sockaddr_nl var nl_pid: pid_t = 0 #else var address: sockaddr #endif - #if os(Linux) + #if os(Linux) && NETLINK_ENABLED private static let layoutSize = MemoryLayout.size #else private static let layoutSize = MemoryLayout.size diff --git a/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift b/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift index b3cd090..873dc3e 100644 --- a/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift +++ b/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#if os(Linux) +#if os(Linux) && NETLINK_ENABLED import Glibc internal import Logging internal import SwiftNetworkLinuxShim @@ -536,4 +536,10 @@ internal enum SystemRoute { } } } +#elseif os(Linux) +internal enum SystemRoute { + static func routeGetInterfaceIndex(dst: any IPAddress, scopedIndex: UInt32 = 0) throws -> UInt32 { + 0 + } +} #endif diff --git a/Sources/SwiftNetworkLinuxShim/include/SwiftNetworkLinuxShim.h b/Sources/SwiftNetworkLinuxShim/include/SwiftNetworkLinuxShim.h index 07d993d..1b67ae7 100644 --- a/Sources/SwiftNetworkLinuxShim/include/SwiftNetworkLinuxShim.h +++ b/Sources/SwiftNetworkLinuxShim/include/SwiftNetworkLinuxShim.h @@ -18,8 +18,10 @@ #ifdef __linux__ #include -#include -#include +#ifdef NETLINK_ENABLED + #include + #include +#endif #include // Not exposed in Glibc.swiftmodule diff --git a/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift index 119c88f..3051af1 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift @@ -120,7 +120,10 @@ final class SwiftNetworkInterfaceTests: NetTestCase { ) } - func testRouteGetInterfaceIndex() { + func testRouteGetInterfaceIndex() throws { + #if os(Linux) && !NETLINK_ENABLED + try XCTSkipIf(true) + #else // Very basic localhost test let v4Bytes: [UInt8] = [0x7F, 0x00, 0x00, 0x01] @@ -154,5 +157,6 @@ final class SwiftNetworkInterfaceTests: NetTestCase { // Use a v6 loopback address with a scoped interface index let routeIndex4 = try! System.routeGetInterfaceIndex(dst: IPv6Address.loopback, scopedIndex: 1) XCTAssertEqual(routeIndex4, 1) + #endif } } From 8470d07ed0101570c19644fe6c07e341fd08623e Mon Sep 17 00:00:00 2001 From: agnosticdev Date: Wed, 17 Jun 2026 10:49:02 -0700 Subject: [PATCH 2/2] Add import check for glibc --- Sources/SwiftNetwork/System/Linux/LinuxRoute.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift b/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift index 873dc3e..c2abdc0 100644 --- a/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift +++ b/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#if os(Linux) && NETLINK_ENABLED +#if os(Linux) && canImport(Glibc) && NETLINK_ENABLED import Glibc internal import Logging internal import SwiftNetworkLinuxShim