state = IPV4LL_STATE(ifp);
assert(state != NULL);
assert(state->arp == astate);
- ipv4ll_not_found_arp(astate);
+ ipv4ll_not_found(ifp);
}
static void
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) {