]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
DHCP: re-enter DISCOVER phase if server doesn't reply to our REQUEST
authorRoy Marples <roy@marples.name>
Mon, 23 Oct 2023 15:24:00 +0000 (15:24 +0000)
committerRoy Marples <roy@marples.name>
Mon, 23 Oct 2023 15:24:00 +0000 (15:24 +0000)
Use the reboot timeout as per the initial DISCOVER timeout.

Fixes #255

src/dhcp.c

index e029cee336d045c381b860265075a33b442cbd1a..014ce6cfd5f99afef3a5d045f86611a6e0b038c6 100644 (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);
 }