- for ( ; addr; addr = (u_int32_t)ifp->if_next) {
- if (kvm_read(kd, addr, (char *)ac, sizeof(*ac)) != sizeof(*ac)) {
- syslog(LOG_ERR, "error reading ifnet");
- return 0;
- }
-
- /* Only look at configured, broadcast interfaces */
- if (!ALLSET(ifp->if_flags, IFF_UP | IFF_BROADCAST))
- continue;
-#ifdef SUNOS4
- /* This probably can't happen... */
- if (ifp->if_addrlist == 0)
- continue;
-#endif
-
- /* Get interface ip address */
-#ifdef SUNOS4
- if (kvm_read(kd, (u_int32_t)ifp->if_addrlist, (char *)&ifaddr,
- sizeof(ifaddr)) != sizeof(ifaddr)) {
- syslog(LOG_ERR, "error reading ifaddr");
- return 0;
- }
- inp = &SATOSIN(&ifa->ifa_addr)->sin_addr;
-#else
- inp = &SATOSIN(&ifp->if_addr)->sin_addr;
-#endif
-
- /* Check if this interface on the right subnet */
-#ifdef SUNOS4
- mask = in->ia_subnetmask;
-#else
- mask = ifp->if_subnetmask;
-#endif
- if ((ipaddr & mask) != (inp->s_addr & mask))
- continue;
-
- /* Copy out the local ethernet address */
- hwaddr->sa_family = AF_UNSPEC;
- BCOPY((caddr_t) &arpcom.ac_enaddr, hwaddr->sa_data,
- sizeof(arpcom.ac_enaddr));
- return 1; /* success! */
+ strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
+ if (ioctl(nit_fd, NIOCBIND, &ifreq) < 0
+ || ioctl(nit_fd, SIOCGIFADDR, &ifreq) < 0) {
+ syslog(LOG_ERR, "Couldn't get hardware address for %s: %m",
+ ifreq.ifr_name);
+ close(nit_fd);
+ return 0;