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 | |
| parent | 7611a6dcd6417c1b25da8d5a35e55692e8462dc5 (diff) | |
Notes
| -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 a942051a1168b..939bc7a2b3cf5 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. */  | 
