Description: SIOCGIFHWADDR is not universally available.
 Do not use it if it not defined.
Author: A. Maitland Bottoms <bottoms@debian.org>

--- a/lib/metis.cc
+++ b/lib/metis.cc
@@ -160,6 +160,7 @@
 
   ip_address=inaddrr(ifr_addr.sa_data).s_addr;
 
+#ifdef SIOCGIFHWADDR
   if (ioctl(sock, SIOCGIFHWADDR, ifr) < 0) {
     printf("No %s interface.\n", ifname);
     return -1;
@@ -169,7 +170,22 @@
 
   for(i=0;i<6;i++)
       hw_address[i]=u[i];
-
+#else
+  // maybe check if defined(HAVE_GETIFADDRS)
+  ifaddrs* iflist;
+  if (getifaddrs(&iflist) == 0) {
+    for (ifaddrs* cur = iflist; cur; cur = cur->ifa_next) {
+      if ((cur->ifa_addr->sa_family == AF_LINK) &&
+	  (strcmp(cur->ifa_name, ifname) == 0) &&
+	  cur->ifa_addr) {
+	sockaddr_dl* sdl = (sockaddr_dl*)cur->ifa_addr;
+	memcpy(hw_address, LLADDR(sdl), sdl->sdl_alen);
+	break;
+      }
+    }
+    freeifaddrs(iflist);
+  }
+#endif
 
   return 0;
 }
