svn commit: r316283 - head/sbin/dhclient
Nick Hibma
n_hibma at FreeBSD.org
Thu Mar 30 17:31:13 UTC 2017
Author: n_hibma
Date: Thu Mar 30 17:31:12 2017
New Revision: 316283
URL: https://svnweb.freebsd.org/changeset/base/316283
Log:
Allow superseding the lease renewal and rebind times.
Also make sure that the renewal is never more than 1/2 * expiry and
rebind never more than 7/4 * renewal (the default values in the spec).
This should allow adjusting high values from the server as well as
making sure the values from the server make sense.
Renewal and rebind times will be adjusted down if the expiry time is set
very high in a server, not the other way around. This change just makes
sure the values keep making sense.
Modified:
head/sbin/dhclient/dhclient.c
Modified: head/sbin/dhclient/dhclient.c
==============================================================================
--- head/sbin/dhclient/dhclient.c Thu Mar 30 17:23:40 2017 (r316282)
+++ head/sbin/dhclient/dhclient.c Thu Mar 30 17:31:12 2017 (r316283)
@@ -769,21 +769,34 @@ dhcpack(struct packet *packet)
if (ip->client->new->expiry < 60)
ip->client->new->expiry = 60;
- /* Take the server-provided renewal time if there is one;
- otherwise figure it out according to the spec. */
- if (ip->client->new->options[DHO_DHCP_RENEWAL_TIME].len)
+ /* Unless overridden in the config, take the server-provided renewal
+ * time if there is one; otherwise figure it out according to the spec.
+ * Also make sure the renewal time does not exceed the expiry time.
+ */
+ if (ip->client->config->default_actions[DHO_DHCP_RENEWAL_TIME] ==
+ ACTION_SUPERSEDE)
+ ip->client->new->renewal = getULong(
+ ip->client->config->defaults[DHO_DHCP_RENEWAL_TIME].data);
+ else if (ip->client->new->options[DHO_DHCP_RENEWAL_TIME].len)
ip->client->new->renewal = getULong(
ip->client->new->options[DHO_DHCP_RENEWAL_TIME].data);
else
ip->client->new->renewal = ip->client->new->expiry / 2;
+ if (ip->client->new->renewal > ip->client->new->expiry / 2)
+ ip->client->new->renewal = ip->client->new->expiry / 2;
/* Same deal with the rebind time. */
- if (ip->client->new->options[DHO_DHCP_REBINDING_TIME].len)
+ if (ip->client->config->default_actions[DHO_DHCP_REBINDING_TIME] ==
+ ACTION_SUPERSEDE)
+ ip->client->new->rebind = getULong(
+ ip->client->config->defaults[DHO_DHCP_REBINDING_TIME].data);
+ else if (ip->client->new->options[DHO_DHCP_REBINDING_TIME].len)
ip->client->new->rebind = getULong(
ip->client->new->options[DHO_DHCP_REBINDING_TIME].data);
else
- ip->client->new->rebind = ip->client->new->renewal +
- ip->client->new->renewal / 2 + ip->client->new->renewal / 4;
+ ip->client->new->rebind = ip->client->new->renewal * 7 / 4;
+ if (ip->client->new->rebind > ip->client->new->renewal * 7 / 4)
+ ip->client->new->rebind = ip->client->new->renewal * 7 / 4;
ip->client->new->expiry += cur_time;
/* Lease lengths can never be negative. */
More information about the svn-src-head
mailing list