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) {