-#define IFR_NEXT(ifr) \
- ((struct ifreq *) ((char *) (ifr) + sizeof(*(ifr)) + \
- MAX(0, (int) (ifr)->ifr_addr.sa_len \
- - (int) sizeof((ifr)->ifr_addr))))
- for (ifrp = (struct ifreq *) ifconf.ifc_buf;
- (char *) ifrp < &ifconf.ifc_buf[ifconf.ifc_len];
- ifrp = IFR_NEXT(ifrp)) {
- if (ifrp->ifr_addr.sa_family == AF_INET) {
- struct ifreq ifr;
-
- strncpy(ifr.ifr_name, ifrp->ifr_name, sizeof(ifr.ifr_name));
- if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t)&ifr) < 0)
- ;
- else if ((ifr.ifr_flags & IFF_LOOPBACK)
- || !(ifr.ifr_flags & IFF_UP))
- ;
- else if (ioctl(sockfd, SIOCGIFNETMASK, (caddr_t)&ifr) < 0)
- ;
- else {
- net_mask = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
- *ret_p = *ifrp;
- close(sockfd);
- if (ifreq)
- free(ifreq);
- return (TRUE);
- }
- }
- }
- err:
- close(sockfd);
- if (ifreq)
- free(ifreq);