--- lib/uuid/gen_uuid.c.orig 2016-09-02 04:17:32 UTC +++ lib/uuid/gen_uuid.c @@ -92,6 +92,7 @@ #ifdef HAVE_SYS_RESOURCE_H #include #endif +#include #include "uuidP.h" #include "uuidd.h" @@ -301,6 +302,28 @@ static int get_node_id(unsigned char *no } } close(sd); +#else + struct ifaddrs *ifaddrsp, *ifaddrp; + unsigned char *a; + + if (getifaddrs(&ifaddrsp) < 0) + return -1; + for (ifaddrp = ifaddrsp; ifaddrp != NULL; ifaddrp = ifaddrp->ifa_next) + { + if (ifaddrp->ifa_addr == NULL) + continue; + if (ifaddrp->ifa_addr->sa_family != AF_LINK) + continue; + a = LLADDR((struct sockaddr_dl *)ifaddrp->ifa_addr); + if (!a[0] && !a[1] && !a[2] && !a[3] && !a[4] && !a[5]) + continue; + if (node_id) { + memcpy(node_id, a, 6); + freeifaddrs(ifaddrsp); + return 1; + } + } + freeifaddrs(ifaddrsp); #endif return 0; }