From c5c1a21ad5e82ee1dad1260fd99fbc0505d6adca Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 28 Feb 2026 19:51:00 +0000 Subject: [PATCH] [macos, net] add sysctl(RT_xx)-fetched network interfaces Signed-off-by: lizzie --- src/core/internal_network/network_interface.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/core/internal_network/network_interface.cpp b/src/core/internal_network/network_interface.cpp index 48be1e2dc4..832e7e9714 100644 --- a/src/core/internal_network/network_interface.cpp +++ b/src/core/internal_network/network_interface.cpp @@ -17,7 +17,7 @@ #include #include #include -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__APPLE__) #include #include #include @@ -33,6 +33,13 @@ #include #include #include +// Darwin doesn't define this for some very odd reason +// See https://stackoverflow.com/questions/5390164/getting-routing-table-on-macosx-programmatically +#ifndef SA_SIZE +#define SA_SIZE(sa) \ + ((!(sa) || ((struct sockaddr *)(sa))->sa_len == 0) ? sizeof(long) \ + : 1 + ( (((struct sockaddr *)(sa))->sa_len - 1) | (sizeof(long) - 1) ) ) +#endif #endif #include "common/common_types.h" @@ -158,7 +165,7 @@ std::vector GetAvailableNetworkInterfaces() { } freeifaddrs(ifaddr); return ifaces; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__APPLE__) std::vector ifaces; int fd = ::socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC); if (fd < 0) {