diff --git a/src/os/include/os/os_socket.h b/src/os/include/os/os_socket.h index 6f168b4..bc344a3 100644 --- a/src/os/include/os/os_socket.h +++ b/src/os/include/os/os_socket.h @@ -141,7 +141,7 @@ extern "C" { OSAPI_EXPORT _Success_(return == 0) int os_getifaddrs( _Inout_ os_ifaddrs_t **ifap, - _In_opt_ const int *const afs); + _In_opt_ const int *afs); /** * @brief Free os_ifaddrs_t structure list allocated by os_getifaddrs() diff --git a/src/os/src/os_socket.c b/src/os/src/os_socket.c index 528abad..7d763f7 100644 --- a/src/os/src/os_socket.c +++ b/src/os/src/os_socket.c @@ -45,6 +45,18 @@ const os_in6_addr os_in6addr_loopback = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } #define OS_INET_PTON inet_pton #endif +const int afs[] = { +#ifdef __linux + AF_PACKET, +#endif /* __linux */ +#if OS_SOCKET_HAS_IPV6 + AF_INET6, +#endif /* OS_SOCKET_HAS_IPV6 */ + AF_INET +}; + +const int *const os_supp_afs = afs; + size_t os_sockaddr_get_size(const os_sockaddr *const sa) { diff --git a/src/os/src/posix/os_platform_ifaddrs.c b/src/os/src/posix/os_platform_ifaddrs.c index 9413352..d1252b9 100644 --- a/src/os/src/posix/os_platform_ifaddrs.c +++ b/src/os/src/posix/os_platform_ifaddrs.c @@ -14,6 +14,8 @@ #include "os/os.h" +extern const int *const os_supp_afs; + static int copyaddr(os_ifaddrs_t **ifap, const struct ifaddrs *sys_ifa) { @@ -55,7 +57,7 @@ copyaddr(os_ifaddrs_t **ifap, const struct ifaddrs *sys_ifa) _Success_(return == 0) int os_getifaddrs( _Inout_ os_ifaddrs_t **ifap, - _In_opt_ const int *const afs) + _In_opt_ const int *afs) { int err = 0; int use; @@ -65,6 +67,10 @@ os_getifaddrs( assert(ifap != NULL); + if (afs == NULL) { + afs = os_supp_afs; + } + if (getifaddrs(&sys_ifa_root) == -1) { err = errno; } else { @@ -76,7 +82,7 @@ os_getifaddrs( { sa = sys_ifa->ifa_addr; if (sa != NULL) { - use = (afs == NULL); + use = 0; for (int i = 0; !use && afs[i] != 0; i++) { use = (sa->sa_family == afs[i]); } diff --git a/src/os/src/windows/os_platform_ifaddrs.c b/src/os/src/windows/os_platform_ifaddrs.c index 44ec688..e901f01 100644 --- a/src/os/src/windows/os_platform_ifaddrs.c +++ b/src/os/src/windows/os_platform_ifaddrs.c @@ -14,6 +14,8 @@ #include "os/os.h" +extern const int *const os_supp_afs; + static int getifaces(PIP_ADAPTER_ADDRESSES *ptr) { @@ -207,7 +209,7 @@ copyaddr( _Success_(return == 0) int os_getifaddrs( _Inout_ os_ifaddrs_t **ifap, - _In_opt_ const int *const afs) + _In_opt_ const int *afs) { int err = 0; int use; @@ -219,6 +221,10 @@ os_getifaddrs( assert(ifap != NULL); + if (afs == NULL) { + afs = os_supp_afs; + } + ifa = ifa_root = ifa_next = NULL; if ((err = getifaces(&ifaces)) == 0 && @@ -230,7 +236,7 @@ os_getifaddrs( addr = addr->Next) { sa = (struct sockaddr *)addr->Address.lpSockaddr; - use = (afs == NULL); + use = 0; for (int i = 0; !use && afs[i] != 0; i++) { use = (afs[i] == sa->sa_family); }