From daf061c9de42b701d6e648c449f20d16ca84edce Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 12 Mar 2012 21:57:18 +0000 Subject: [PATCH] randomise DHCPv6 lease renewal intervals --- src/rfc3315.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/rfc3315.c b/src/rfc3315.c index 8824592..ba4dd3e 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -922,9 +922,14 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (t1cntr != 0) { /* go back an fill in fields in IA_NA option */ - unsigned int t1 = min_time == 0xffffffff ? 0xffffffff : min_time/2; - unsigned int t2 = min_time == 0xffffffff ? 0xffffffff : (min_time/8) * 7; int sav = save_counter(t1cntr); + unsigned int t1, t2, fuzz = rand16(); + + while (fuzz > (min_time/16)) + fuzz = fuzz/2; + t1 = min_time == 0xffffffff ? 0xffffffff : min_time/2 - fuzz; + t2 = min_time == 0xffffffff ? 0xffffffff : ((min_time/8)*7) - fuzz; + put_opt6_long(t1); put_opt6_long(t2); save_counter(sav);