summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2014-05-04 21:07:50 +0000
committerkrw <krw@openbsd.org>2014-05-04 21:07:50 +0000
commit62ea8b4b18f95f57838c253fa79770b818356402 (patch)
tree9d96b738c1a59e269df7ceadb3d712815e5b219c
parentdelete useless test code (diff)
downloadwireguard-openbsd-62ea8b4b18f95f57838c253fa79770b818356402.tar.xz
wireguard-openbsd-62ea8b4b18f95f57838c253fa79770b818356402.zip
Factor out the code to set the expiry, renewal and rebinding times for
a lease. Will be reused in upcoming diff. No intentional behaviour change.
-rw-r--r--sbin/dhclient/dhclient.c110
1 files changed, 57 insertions, 53 deletions
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index e6a7b82303e..e8fa989b994 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhclient.c,v 1.300 2014/04/30 15:11:00 krw Exp $ */
+/* $OpenBSD: dhclient.c,v 1.301 2014/05/04 21:07:50 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -113,6 +113,7 @@ void add_static_routes(int, struct option_data *);
void add_classless_static_routes(int, struct option_data *);
int compare_lease(struct client_lease *, struct client_lease *);
+void set_lease_times(struct client_lease *);
void state_reboot(void);
void state_init(void);
@@ -784,62 +785,15 @@ bind_lease(void)
struct in_addr gateway, mask;
struct option_data *options, *opt;
struct client_lease *lease;
- time_t cur_time;
lease = apply_defaults(client->new);
options = lease->options;
- /* Figure out the lease time. */
- if (options[DHO_DHCP_LEASE_TIME].data)
- client->new->expiry =
- getULong(options[DHO_DHCP_LEASE_TIME].data);
- else
- client->new->expiry = DEFAULT_LEASE_TIME;
-
- /*
- * A number that looks negative here is really just very large,
- * because the lease expiry offset is unsigned.
- */
- if (client->new->expiry < 0)
- client->new->expiry = TIME_MAX;
- /* XXX should be fixed by resetting the client state */
- if (client->new->expiry < 60)
- client->new->expiry = 60;
-
- /*
- * Take the server-provided renewal time if there is one;
- * otherwise figure it out according to the spec.
- */
- if (options[DHO_DHCP_RENEWAL_TIME].len)
- client->new->renewal =
- getULong(options[DHO_DHCP_RENEWAL_TIME].data);
- else
- client->new->renewal = client->new->expiry / 2;
-
- /* Same deal with the rebind time. */
- if (options[DHO_DHCP_REBINDING_TIME].len)
- client->new->rebind =
- getULong(options[DHO_DHCP_REBINDING_TIME].data);
- else
- client->new->rebind = client->new->renewal +
- client->new->renewal / 2 + client->new->renewal / 4;
-
- time(&cur_time);
-
- client->new->expiry += cur_time;
- /* Lease lengths can never be negative. */
- if (client->new->expiry < cur_time)
- client->new->expiry = TIME_MAX;
- client->new->renewal += cur_time;
- if (client->new->renewal < cur_time)
- client->new->renewal = TIME_MAX;
- client->new->rebind += cur_time;
- if (client->new->rebind < cur_time)
- client->new->rebind = TIME_MAX;
-
- lease->expiry = client->new->expiry;
- lease->renewal = client->new->renewal;
- lease->rebind = client->new->rebind;
+ set_lease_times(lease);
+
+ client->new->expiry = lease->expiry;
+ client->new->renewal = lease->renewal;
+ client->new->rebind = lease->rebind;
/*
* A duplicate lease once we are responsible & S_RENEWING means we don't
@@ -2545,3 +2499,53 @@ compare_lease(struct client_lease *active, struct client_lease *new)
return (0);
}
+
+void
+set_lease_times(struct client_lease *lease)
+{
+ time_t cur_time;
+
+ /*
+ * Take the server-provided times if available. Otherwise
+ * figure them out according to the spec.
+ */
+ if (lease->options[DHO_DHCP_LEASE_TIME].data)
+ lease->expiry =
+ getULong(lease->options[DHO_DHCP_LEASE_TIME].data);
+ else
+ lease->expiry = DEFAULT_LEASE_TIME;
+ if (lease->options[DHO_DHCP_RENEWAL_TIME].len)
+ lease->renewal =
+ getULong(lease->options[DHO_DHCP_RENEWAL_TIME].data);
+ else
+ lease->renewal = lease->expiry / 2;
+ if (lease->options[DHO_DHCP_REBINDING_TIME].len)
+ lease->rebind =
+ getULong(lease->options[DHO_DHCP_REBINDING_TIME].data);
+ else
+ lease->rebind = lease->renewal + lease->renewal / 2 +
+ lease->renewal / 4;
+
+ /*
+ * A number that looks negative here is really just very large,
+ * because the lease expiry offset is unsigned.
+ */
+ if (lease->expiry < 0)
+ lease->expiry = TIME_MAX;
+ /* XXX should be fixed by resetting the client state */
+ if (lease->expiry < 60)
+ lease->expiry = 60;
+
+ time(&cur_time);
+
+ /* Lease lengths can never be negative. */
+ lease->expiry += cur_time;
+ if (lease->expiry < cur_time)
+ lease->expiry = TIME_MAX;
+ lease->renewal += cur_time;
+ if (lease->renewal < cur_time)
+ lease->renewal = TIME_MAX;
+ lease->rebind += cur_time;
+ if (lease->rebind < cur_time)
+ lease->rebind = TIME_MAX;
+}