DHCP: re-enter DISCOVER phase if server doesn't reply to our REQUEST

Use the reboot timeout as per the initial DISCOVER timeout.

Fixes #255
This commit is contained in:
Roy Marples 2023-10-23 15:24:00 +00:00
parent e8b6541979
commit d408e74bdc

View File

@ -1895,6 +1895,20 @@ dhcp_discover(void *arg)
send_discover(ifp);
}
static void
dhcp_requestfailed(void *arg)
{
struct interface *ifp = arg;
struct dhcp_state *state = D_STATE(ifp);
logwarnx("%s: failed to request the lease", ifp->name);
free(state->offer);
state->offer = NULL;
state->offer_len = 0;
state->interval = 0;
dhcp_discover(ifp);
}
static void
dhcp_request(void *arg)
{
@ -1902,6 +1916,9 @@ dhcp_request(void *arg)
struct dhcp_state *state = D_STATE(ifp);
state->state = DHS_REQUEST;
// Handle the server being silent to our request.
eloop_timeout_add_sec(ifp->ctx->eloop, ifp->options->reboot,
dhcp_requestfailed, ifp);
send_request(ifp);
}