X-Git-Url: http://git.onelab.eu/?p=distributedratelimiting.git;a=blobdiff_plain;f=drl%2Futil.c;fp=drl%2Futil.c;h=a99e27ec26c90416c66b7daf40c5f055abc4ffd5;hp=4bf3d0437ca460c45ae6e58d4cc8ccc40047408f;hb=7d2cc424a51e76727008437fedf5cfa2126bac67;hpb=65b76c57df25ac51f823d87857fd4b4823ef14cd diff --git a/drl/util.c b/drl/util.c index 4bf3d04..a99e27e 100644 --- a/drl/util.c +++ b/drl/util.c @@ -231,7 +231,7 @@ void map_insert(map_handle map, void *key, int keylen, void *value) { * return the string. */ char* get_local_ip(){ - char *ip; + char *ip, *localip; struct ifaddrs *ifa = NULL, *ifp = NULL; struct sockaddr *addr; uint32_t ho_addr; @@ -253,6 +253,7 @@ char* get_local_ip(){ #define STRINGSIZE 200 ip = (char *)malloc(STRINGSIZE); + localip = NULL; for (ifa = ifp; ifa; ifa=ifa->ifa_next){ @@ -279,20 +280,32 @@ char* get_local_ip(){ /* is it MSB first? */ - if ( (addrbyte != 192) && (addrbyte != 172) - && (addrbyte != 10) && (addrbyte != 127) ){ + /* We don't want to choose the loopback. */ + if (addrbyte == 127) + continue; + + /* If there's a non-local address, use that. */ + if ((addrbyte != 192) && (addrbyte != 172) && (addrbyte != 10)){ printlog(LOG_WARN, " Using ip: %s\n",ip); freeifaddrs(ifp); -#if 0 - return (ifa->ifa_addr->sin_addr); -#else + if (localip != NULL) { + free(localip); + } return(ip); /* for now return the IP address */ -#endif + } else { + if (localip == NULL) { + localip = malloc(STRINGSIZE); + } + strncpy(localip, ip, STRINGSIZE); } } freeifaddrs(ifp); free(ip); - return(NULL); + + if (localip != NULL) + return localip; + else + return(NULL); } static FILE *urandfd = NULL;