# HG changeset patch # User Roy Marples # Date 1597936193 -3600 # Node ID 28a650d9372968e04fe8383218a697039598103b # Parent 66a1c1c34366ac8ae070fd462db597a20f7a8e03 DHCP: Mark the state as expired on lase lease extension Expired states do not claim any client IP to request from. diff -r 66a1c1c34366 -r 28a650d93729 src/dhcp.c --- a/src/dhcp.c Sun Aug 16 19:21:48 2020 +0100 +++ b/src/dhcp.c Thu Aug 20 16:09:53 2020 +0100 @@ -777,7 +777,7 @@ (type == DHCP_REQUEST && state->addr->mask.s_addr == lease->mask.s_addr && (state->new == NULL || IS_DHCP(state->new)) && - !(state->added & STATE_FAKE)))) + !(state->added & (STATE_FAKE | STATE_EXPIRED))))) bootp->ciaddr = state->addr->addr.s_addr; bootp->op = BOOTREQUEST; @@ -1745,7 +1745,7 @@ goto fail; len = (size_t)r; - if (!(state->added & STATE_FAKE) && + if (!(state->added & (STATE_FAKE | STATE_EXPIRED)) && state->addr != NULL && ipv4_iffindaddr(ifp, &state->lease.addr, NULL) != NULL) from.s_addr = state->lease.addr.s_addr; @@ -1915,7 +1915,10 @@ struct interface *ifp = arg; if (ifp->options->options & DHCPCD_LASTLEASE_EXTEND) { + struct dhcp_state *state = D_STATE(ifp); + logwarnx("%s: DHCP lease expired, extending lease", ifp->name); + state->added |= STATE_EXPIRED; return; } diff -r 66a1c1c34366 -r 28a650d93729 src/ipv4.h --- a/src/ipv4.h Sun Aug 16 19:21:48 2020 +0100 +++ b/src/ipv4.h Thu Aug 20 16:09:53 2020 +0100 @@ -129,6 +129,7 @@ #define STATE_ADDED 0x01 #define STATE_FAKE 0x02 +#define STATE_EXPIRED 0x04 int ipv4_deladdr(struct ipv4_addr *, int); struct ipv4_addr *ipv4_addaddr(struct interface *,