- ifp = ifr;
- for (ifr = ifc.ifc_req; ifr < ifend; ) {
- if (strcmp(ifp->ifr_name, ifr->ifr_name) == 0
- && ifr->ifr_addr.sa_family == AF_DLI) {
- /*
- * Found the link-level address - copy it out
- */
- dla = (struct sockaddr_dl *)&ifr->ifr_addr;
- hwaddr->sa_family = AF_UNSPEC;
- BCOPY(dla, hwaddr->sa_data, sizeof(hwaddr->sa_data));
- return 1;
- }
- ifr = (struct ifreq *) ((char *)&ifr->ifr_addr + sizeof(struct sockaddr)
-);
+ strncpy(ifdevea.ifr_name, ifr->ifr_name, sizeof(ifdevea.ifr_name));
+ if (ioctl(sockfd, SIOCRPHYSADDR, &ifdevea) < 0) {
+ syslog(LOG_ERR, "Couldn't get h/w address for %s: %m", ifr->ifr_name);
+ return 0;