$NetBSD: patch-aa,v 1.3 2016/09/16 08:47:48 jperkin Exp $ Suport NetBSD and SunOS. --- lib/IO/Interface.xs.orig 2014-12-09 16:41:30.000000000 +0000 +++ lib/IO/Interface.xs @@ -442,6 +442,9 @@ if_addr(sock, name, ...) operation = SIOCGIFADDR; } if (!Ioctl(sock,operation,&ifr)) XSRETURN_UNDEF; +#ifdef __NetBSD__ + ifr.ifr_addr.sa_family = AF_INET; +#endif if (ifr.ifr_addr.sa_family != AF_INET) croak ("Address is not in the AF_INET family.\n"); RETVAL = inet_ntoa(((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr); } @@ -587,7 +590,7 @@ if_hwaddr(sock, name, ...) char *newaddr,hwaddr[128]; CODE: { -#if !((defined(HAS_IOCTL) && defined(SIOCGIFHWADDR)) || defined(USE_GETIFADDRS)) +#if !((defined(HAS_IOCTL) && defined(SIOCGIFHWADDR)) || defined(USE_GETIFADDRS)) || defined(__sun) XSRETURN_UNDEF; #endif #if (defined(USE_GETIFADDRS) && defined(HAVE_SOCKADDR_DL_STRUCT)) @@ -620,7 +623,7 @@ if_hwaddr(sock, name, ...) freeifaddrs(ifap); RETVAL = hwaddr; -#elif (defined(HAS_IOCTL) && defined(SIOCGIFHWADDR)) +#elif (defined(HAS_IOCTL) && defined(SIOCGIFHWADDR)) && !defined(__sun) bzero((void*)&ifr,sizeof(struct ifreq)); strncpy(ifr.ifr_name,name,IFNAMSIZ-1); ifr.ifr_hwaddr.sa_family = AF_UNSPEC;