try the following diff.
--- src/libnet_link_bpf.c.orig  Mon Jan  8 03:13:48 2001
+++ src/libnet_link_bpf.c       Fri Nov  7 12:08:38 2008
@@ -250,6 +250,7 @@
     char *buf, *next, *end;
     struct if_msghdr *ifm;
     struct sockaddr_dl *sdl;
+    struct sockaddr *sa;
     struct ether_addr *ea = NULL;
 
     mib[0] = CTL_NET;
@@ -280,7 +281,10 @@
         ifm = (struct if_msghdr *)next;
         if (ifm->ifm_type == RTM_IFINFO)
         {
-            sdl = (struct sockaddr_dl *)(ifm + 1);
+           sa = (struct sockaddr *)(ifm + 1);
+           if (sa->sa_family != AF_LINK)
+               continue;
+           sdl = (struct sockaddr_dl *)sa;
             if (strncmp(&sdl->sdl_data[0], device, sdl->sdl_nlen) == 0)
             {
                 if (!(ea = malloc(sizeof(struct ether_addr))))

Reply via email to