From: Roy Marples Date: Wed, 24 Jul 2019 18:12:24 +0000 (+0100) Subject: IPv4LL: Work once more on NetBSD X-Git-Tag: v8.0.1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7fa5c031b6b91b37966fb2cb2ce6c2815eb33d53;p=thirdparty%2Fdhcpcd.git IPv4LL: Work once more on NetBSD --- diff --git a/src/ipv4ll.c b/src/ipv4ll.c index 8c68af5c..4b0038b7 100644 --- a/src/ipv4ll.c +++ b/src/ipv4ll.c @@ -298,7 +298,7 @@ ipv4ll_not_found_arp(struct arp_state *astate) state = IPV4LL_STATE(ifp); assert(state != NULL); assert(state->arp == astate); - ipv4ll_not_found_arp(astate); + ipv4ll_not_found(ifp); } static void @@ -552,19 +552,24 @@ ipv4ll_handleifa(int cmd, struct ipv4_addr *ia, pid_t pid) ifp = ia->iface; state = IPV4LL_STATE(ifp); - if (state == NULL || state->addr == NULL || - !IN_ARE_ADDR_EQUAL(&state->addr->addr, &ia->addr)) + if (state == NULL) return; - if (cmd == RTM_DELADDR) { + if (cmd == RTM_DELADDR && + state->addr != NULL && + IN_ARE_ADDR_EQUAL(&state->addr->addr, &ia->addr)) + { loginfox("%s: pid %d deleted IP address %s", ifp->name, pid, ia->saddr); ipv4ll_defend_failed(ifp); + return; } #ifdef IN_IFF_DUPLICATED if (cmd != RTM_NEWADDR) return; + if (!IN_ARE_ADDR_EQUAL(&state->pickedaddr, &ia->addr)) + return; if (!(ia->addr_flags & IN_IFF_NOTUSEABLE)) ipv4ll_not_found(ifp); else if (ia->addr_flags & IN_IFF_DUPLICATED) {