}
}
- /* If the netmask or broadcast is different, delete the addresss */
+ /* If the netmask or broadcast is different, re-add the addresss */
ap = ipv4_iffindaddr(ifp, &lease->addr, NULL);
- if (ap && (ap->net.s_addr != lease->net.s_addr ||
- ap->brd.s_addr != lease->brd.s_addr))
- ipv4_deladdr(ifp, &ap->addr, &ap->net, 0);
-
- if (ipv4_iffindaddr(ifp, &lease->addr, &lease->net))
+ if (ap &&
+ ap->net.s_addr == lease->net.s_addr &&
+ ap->brd.s_addr == lease->brd.s_addr)
logger(ifp->ctx, LOG_DEBUG,
"%s: IP address %s/%d already exists",
ifp->name, inet_ntoa(lease->addr),
return;
}
- ap = ipv4_iffindaddr(ifp, addr, net);
+ ap = ipv4_iffindaddr(ifp, addr, NULL);
if (cmd == RTM_NEWADDR) {
if (ap == NULL) {
if ((ap = malloc(sizeof(*ap))) == NULL) {
}
ap->iface = ifp;
ap->addr = *addr;
- ap->net = *net;
- ap->brd = *brd;
TAILQ_INSERT_TAIL(&state->addrs, ap, next);
}
+ ap->net = *net;
+ ap->brd = *brd;
ap->addr_flags = flags;
} else if (cmd == RTM_DELADDR) {
if (ap) {