Mercurial > hg > dhcpcd
changeset 4579:e48ad224ab66 draft
IPv4LL: Work once more on NetBSD
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 24 Jul 2019 19:12:24 +0100 |
| parents | 5ab00b922cab |
| children | bf5311ae01d5 |
| files | src/ipv4ll.c |
| diffstat | 1 files changed, 9 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ipv4ll.c Wed Jul 24 16:06:51 2019 +0100 +++ b/src/ipv4ll.c Wed Jul 24 19:12:24 2019 +0100 @@ -298,7 +298,7 @@ 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 @@ 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) {
