{
struct ipv4ll_state *state = IPV4LL_STATE(ifp);
- arp_cancel(state->arp);
+ if (state->arp != NULL)
+ arp_cancel(state->arp);
if (++state->conflicts == MAX_CONFLICTS)
logerrx("%s: failed to acquire an IPv4LL address",
ifp->name);
+ state->pickedaddr.s_addr = INADDR_ANY;
eloop_timeout_add_sec(ifp->ctx->eloop,
state->conflicts >= MAX_CONFLICTS ?
RATE_LIMIT_INTERVAL : PROBE_WAIT,
struct ipv4ll_state *state = IPV4LL_STATE(ifp);
assert(state->arp == astate);
- state->pickedaddr.s_addr = INADDR_ANY;
ipv4ll_found(ifp);
}
ipv4ll_not_found(ifp);
else if (ia->addr_flags & IN_IFF_DUPLICATED) {
logerrx("%s: DAD detected %s", ifp->name, ia->saddr);
- ipv4_deladdr(state->addr, 1);
+ ipv4_deladdr(ia, 1);
ipv4ll_found(ifp);
}
#endif