$NetBSD: patch-da,v 1.1 2007/12/21 17:32:27 drochner Exp $ --- lib/interfaces.c.orig 2007-03-01 05:54:30.000000000 +0100 +++ lib/interfaces.c @@ -343,6 +343,42 @@ static int _get_interfaces(struct iface_ #define _FOUND_IFACE_ANY #endif /* HAVE_IFACE_AIX */ +#ifdef HAVE_IFACE_IFADDRS + +#include + +static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) +{ + struct ifaddrs *ia; + int total; + + if (getifaddrs(&ia) < 0) + return -1; + + total = 0; + while (ia && total < max_interfaces) { + if (ia->ifa_addr->sa_family != AF_INET || + !(ia->ifa_flags & IFF_UP)) { + ia = ia->ifa_next; + continue; + } + strncpy(ifaces[total].name, ia->ifa_name, + sizeof(ifaces[total].name) - 1); + ifaces[total].name[sizeof(ifaces[total].name) - 1] = 0; + ifaces[total].ip = ((struct sockaddr_in *)(ia->ifa_addr)) + ->sin_addr; + ifaces[total].netmask = ((struct sockaddr_in *)(ia->ifa_netmask)) + ->sin_addr; + total++; + ia = ia->ifa_next; + } + + freeifaddrs(ia); + return total; +} + +#define _FOUND_IFACE_ANY +#endif /* HAVE_IFACE_IFADDRS */ #ifndef _FOUND_IFACE_ANY static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) {