struct iarp_state *state;
struct arp_state *astate, *asn;
- if (cmd != RTM_NEWADDR || (state = ARP_STATE(ifp)) == NULL)
+ if (cmd != RTM_NEWADDR || (state = ARP_STATE(addr->iface)) == NULL)
return;
TAILQ_FOREACH_SAFE(astate, &state->arp_states, next, asn) {
if (astate->addr.s_addr == addr->addr.s_addr) {
- if (flags & IN_IFF_DUPLICATED) {
+ if (addr->addr_flags & IN_IFF_DUPLICATED) {
if (astate->conflicted_cb)
astate->conflicted_cb(astate, NULL);
- } else if (!(flags & IN_IFF_NOTUSEABLE)) {
+ } else if (!(addr->addr_flags & IN_IFF_NOTUSEABLE)) {
if (astate->probed_cb)
astate->probed_cb(astate);
}
!state->lease.frominfo)
dhcp_decline(ifp);
#ifdef IN_IFF_DUPLICATED
- ia = ipv4_iffindaddr(ifp, &astate->addr->addr, NULL);
- if (ia)
- ipv4_deladdr(ia->addr, 1);
+ if ((ia = ipv4_iffindaddr(ifp, &astate->addr, NULL)) != NULL)
+ ipv4_deladdr(ia, 1);
#endif
arp_free(astate);
eloop_timeout_delete(ifp->ctx->eloop, NULL, ifp);
LOGDHCP(LOG_WARNING, "declined duplicate address");
if (type)
dhcp_decline(ifp);
- ipv4_deladdr(ifp, &ia->addr, &ia->mask, 0);
+ ipv4_deladdr(ia, 0);
eloop_timeout_delete(ifp->ctx->eloop, NULL, ifp);
eloop_timeout_add_sec(ifp->ctx->eloop,
DHCP_RAND_MAX, dhcp_discover, ifp);
return;
#ifdef IN_IFF_NOTUSEABLE
- if (ia->flags & IN_IFF_NOTUSEABLE)
+ if (ia->addr_flags & IN_IFF_NOTUSEABLE)
return;
#endif
ia = ipv4_iffindlladdr(ifp);
#ifdef IN_IFF_TENTATIVE
if (ia != NULL && ia->addr_flags & IN_IFF_DUPLICATED) {
- ipv4_deladdr(ifp, &ia->addr, &ia->net, 0);
+ ipv4_deladdr(ia, 0);
ia = NULL;
}
#endif