diff options
Diffstat (limited to 'gdhcp/ipv4ll.c')
-rwxr-xr-x[-rw-r--r--] | gdhcp/ipv4ll.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/gdhcp/ipv4ll.c b/gdhcp/ipv4ll.c index 9bf52b0a..c43971f0 100644..100755 --- a/gdhcp/ipv4ll.c +++ b/gdhcp/ipv4ll.c @@ -34,23 +34,19 @@ #include <glib.h> #include "ipv4ll.h" +#include "common.h" /** * Return a random link local IP (in host byte order) */ -uint32_t ipv4ll_random_ip(int seed) +uint32_t ipv4ll_random_ip(void) { unsigned tmp; + uint64_t rand; - if (seed) - srand(seed); - else { - struct timeval tv; - gettimeofday(&tv, NULL); - srand(tv.tv_usec); - } do { - tmp = rand(); + dhcp_get_random(&rand); + tmp = rand; tmp = tmp & IN_CLASSB_HOST; } while (tmp > (IN_CLASSB_HOST - 0x0200)); return ((LINKLOCAL_ADDR + 0x0100) + tmp); @@ -61,13 +57,10 @@ uint32_t ipv4ll_random_ip(int seed) */ guint ipv4ll_random_delay_ms(guint secs) { - struct timeval tv; - guint tmp; + uint64_t rand; - gettimeofday(&tv, NULL); - srand(tv.tv_usec); - tmp = rand(); - return tmp % (secs * 1000); + dhcp_get_random(&rand); + return rand % (secs * 1000); } int ipv4ll_send_arp_packet(uint8_t* source_eth, uint32_t source_ip, |