]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
IPv4LL: Work once more on NetBSD
authorRoy Marples <roy@marples.name>
Wed, 24 Jul 2019 18:12:24 +0000 (19:12 +0100)
committerRoy Marples <roy@marples.name>
Wed, 24 Jul 2019 18:12:24 +0000 (19:12 +0100)
src/ipv4ll.c

index 8c68af5c7950f4e5365c872aec5359da474550e5..4b0038b76f53275adcde301a79471733059b0c60 100644 (file)
@@ -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) {