Fix the timeouts for rebinding and renewing.

Now renew/rebind requests will be sent every 60+/-10s.
This commit is contained in:
Nicholas J. Kain 2015-02-18 11:03:58 -05:00
parent b3bd13d45f
commit b8df1b33f5

View File

@ -139,16 +139,14 @@ static int rebinding_timeout(struct client_state_t cs[static 1],
reinit_selecting(cs, 0); reinit_selecting(cs, 0);
return BTO_EXPIRED; return BTO_EXPIRED;
} }
if (elt - nowts < 30000) { start_dhcp_listen(cs);
cs->dhcp_wake_ts = elt;
return BTO_WAIT;
}
if (send_rebind(cs) < 0) { if (send_rebind(cs) < 0) {
log_warning("%s: Failed to send a rebind request packet.", log_warning("%s: Failed to send a rebind request packet.",
client_config.interface); client_config.interface);
return BTO_HARDFAIL; return BTO_HARDFAIL;
} }
cs->dhcp_wake_ts = nowts + ((elt - nowts) / 2); long long ts0 = nowts + (50 + nk_random_u32(&cs->rnd32_state) % 20) * 1000;
cs->dhcp_wake_ts = ts0 < elt ? ts0 : elt;
return BTO_WAIT; return BTO_WAIT;
} }
@ -164,16 +162,14 @@ static int renewing_timeout(struct client_state_t cs[static 1],
long long rbt = cs->leaseStartTime + cs->rebindTime * 1000; long long rbt = cs->leaseStartTime + cs->rebindTime * 1000;
if (nowts >= rbt) if (nowts >= rbt)
return rebinding_timeout(cs, nowts); return rebinding_timeout(cs, nowts);
if (rbt - nowts < 30000) { start_dhcp_listen(cs);
cs->dhcp_wake_ts = rbt;
return BTO_WAIT;
}
if (send_renew(cs) < 0) { if (send_renew(cs) < 0) {
log_warning("%s: Failed to send a renew request packet.", log_warning("%s: Failed to send a renew request packet.",
client_config.interface); client_config.interface);
return BTO_HARDFAIL; return BTO_HARDFAIL;
} }
cs->dhcp_wake_ts = nowts + ((rbt - nowts) / 2); long long ts0 = nowts + (50 + nk_random_u32(&cs->rnd32_state) % 20) * 1000;
cs->dhcp_wake_ts = ts0 < rbt ? ts0 : rbt;
return BTO_WAIT; return BTO_WAIT;
} }
@ -186,7 +182,6 @@ static int bound_timeout(struct client_state_t cs[static 1], long long nowts)
cs->dhcp_wake_ts = rnt; cs->dhcp_wake_ts = rnt;
return BTO_WAIT; return BTO_WAIT;
} }
start_dhcp_listen(cs);
return renewing_timeout(cs, nowts); return renewing_timeout(cs, nowts);
} }