return;
if (cmd == RTM_DELADDR) {
- if (IPV4_BRD_EQ(state->addr, ia)) {
+ if (state->addr == ia) {
logger(ifp->ctx, LOG_INFO,
"%s: deleted IP address %s", ifp->name, ia->saddr);
+ state->addr = NULL;
+ /* Don't clear the added state as we need
+ * to drop the lease. */
dhcp_drop(ifp, "EXPIRE");
}
return;
state = D_STATE(ifp);
ifo = ifp->options;
- if (ifo->options & DHCPCD_INFORM ||
+ /* The lease could have been added, but the address deleted
+ * by a 3rd party. */
+ if (state->addr == NULL ||
+ ifo->options & DHCPCD_INFORM ||
(ifo->options & DHCPCD_STATIC && ifo->req_addr.s_addr == 0))
return 0;
r = ipv4_deladdr(state->addr, 0);