Mercurial > hg > dhcpcd
changeset 5424:28a650d93729 draft
DHCP: Mark the state as expired on lase lease extension
Expired states do not claim any client IP to request from.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Thu, 20 Aug 2020 16:09:53 +0100 |
| parents | 66a1c1c34366 |
| children | 9edfc000a89b |
| files | src/dhcp.c src/ipv4.h |
| diffstat | 2 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
