summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac1
-rw-r--r--src/socket.c34
2 files changed, 20 insertions, 15 deletions
diff --git a/configure.ac b/configure.ac
index 9a4acc4..f3d083c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,6 +39,7 @@ PKG_CHECK_MODULES(libplist, libplist-2.0 >= $LIBPLIST_VERSION)
# Checks for header files.
AC_CHECK_HEADERS([stdint.h stdlib.h string.h])
+AC_CHECK_HEADERS([netpacket/packet.h net/if_dl.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
diff --git a/src/socket.c b/src/socket.c
index b107a7c..5d22d14 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -56,10 +56,10 @@
#ifdef AF_INET6
#include <net/if.h>
#include <ifaddrs.h>
-#if defined (__APPLE__) || defined (__FreeBSD__) || defined (__HAIKU__)
+#if defined (HAVE_NET_IF_DL_H)
#include <net/if_dl.h>
#endif
-#ifdef __linux__
+#if defined (HAVE_NETPACKET_PACKET_H)
#include <netpacket/packet.h>
#endif
#endif
@@ -907,28 +907,32 @@ int get_primary_mac_address(unsigned char mac_addr_buf[6])
if (ifa->ifa_flags & IFF_LOOPBACK) {
continue;
}
-#if defined(__APPLE__) || defined (__FreeBSD__) || defined (__HAIKU__)
+#if defined (HAVE_NET_IF_DL_H)
+ /* BSD, Darwin, and Haiku */
if (ifa->ifa_addr->sa_family != AF_LINK) {
continue;
}
#if defined (__APPLE__)
- if (!strcmp(ifa->ifa_name, "en0")) {
-#elif defined (__FreeBSD__) || defined (__HAIKU__)
- {
-#endif
- memcpy(mac_addr_buf, (unsigned char *)LLADDR((struct sockaddr_dl *)(ifa)->ifa_addr), 6);
- result = 0;
- break;
+ if (strcmp(ifa->ifa_name, "en0") != 0) {
+ continue;
}
-#elif defined (__linux__)
+#endif
+ memcpy(mac_addr_buf, (unsigned char *)LLADDR((struct sockaddr_dl *)(ifa)->ifa_addr), 6);
+ result = 0;
+ break;
+#elif defined (HAVE_NETPACKET_PACKET_H)
+ /* Linux */
if (ifa->ifa_addr->sa_family != AF_PACKET) {
continue;
}
- if (strcmp(ifa->ifa_name, "lo") != 0) {
- memcpy(mac_addr_buf, ((struct sockaddr_ll*)ifa->ifa_addr)->sll_addr, 6);
- result = 0;
- break;
+#if defined (__linux__)
+ if (strcmp(ifa->ifa_name, "lo") == 0) {
+ continue;
}
+#endif
+ memcpy(mac_addr_buf, ((struct sockaddr_ll*)ifa->ifa_addr)->sll_addr, 6);
+ result = 0;
+ break;
#elif defined (WIN32)
if (ifa->ifa_data) {
memcpy(mac_addr_buf, ifa->ifa_data, 6);