diff options
author | Martin Blapp <mbr@FreeBSD.org> | 2004-08-16 21:26:04 +0000 |
---|---|---|
committer | Martin Blapp <mbr@FreeBSD.org> | 2004-08-16 21:26:04 +0000 |
commit | 93fb40624f556e1f00df50cd20b4199cc3832e47 (patch) | |
tree | 5933dec684ccf31506c4fc0ea5bf94b89e422039 /contrib | |
parent | 7611a6dcd6417c1b25da8d5a35e55692e8462dc5 (diff) | |
download | src-93fb40624f556e1f00df50cd20b4199cc3832e47.tar.gz src-93fb40624f556e1f00df50cd20b4199cc3832e47.zip |
Notes
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/isc-dhcp/client/dhclient.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/contrib/isc-dhcp/client/dhclient.c b/contrib/isc-dhcp/client/dhclient.c index a942051a1168..939bc7a2b3cf 100644 --- a/contrib/isc-dhcp/client/dhclient.c +++ b/contrib/isc-dhcp/client/dhclient.c @@ -838,11 +838,15 @@ void dhcpack (packet) /* If it wasn't specified by the server, calculate it. */ if (!client -> new -> renewal) - client -> new -> renewal = - client -> new -> expiry / 2; + client -> new -> renewal = client -> new -> expiry / 2 + 1; + + if (client -> new -> renewal <= 0) + client -> new -> renewal = TIME_MAX; /* Now introduce some randomness to the renewal time: */ - client -> new -> renewal = (((client -> new -> renewal + 3) * 3 / 4) + + if (client -> new -> renewal <= TIME_MAX / 3 - 3) + client -> new -> renewal = + (((client -> new -> renewal + 3) * 3 / 4) + (random () % /* XXX NUMS */ ((client -> new -> renewal + 3) / 4))); @@ -861,14 +865,25 @@ void dhcpack (packet) } else client -> new -> rebind = 0; - if (!client -> new -> rebind) - client -> new -> rebind = - (client -> new -> expiry * 7) / 8; /* XXX NUMS */ + if (client -> new -> rebind <= 0) { + if (client -> new -> expiry <= TIME_MAX / 7) + client -> new -> rebind = + client -> new -> expiry * 7 / 8; + else + client -> new -> rebind = + client -> new -> expiry / 8 * 7; + } /* Make sure our randomness didn't run the renewal time past the rebind time. */ - if (client -> new -> renewal > client -> new -> rebind) - client -> new -> renewal = (client -> new -> rebind * 3) / 4; + if (client -> new -> renewal > client -> new -> rebind) { + if (client -> new -> rebind <= TIME_MAX / 3) + client -> new -> renewal = + client -> new -> rebind * 3 / 4; + else + client -> new -> renewal = + client -> new -> rebind / 4 * 3; + } client -> new -> expiry += cur_time; /* Lease lengths can never be negative. */ |