addr = state->addr;
delete_address(ifp);
TAILQ_FOREACH(ifn, ifp->ctx->ifaces, next) {
- if (ifn == ifp)
+ if (ifn == ifp ||
+ strcmp(ifn->name, ifp->name) == 0)
continue;
nstate = D_STATE(ifn);
if (nstate && !nstate->added &&
/* Ensure only one interface has the address */
TAILQ_FOREACH(ifn, ifp->ctx->ifaces, next) {
- if (ifn == ifp)
+ if (ifn == ifp || strcmp(ifn->name, ifp->name) == 0)
continue;
nstate = D_STATE(ifn);
if (nstate && nstate->added &&
{
apf = ipv6_findaddr(ap->iface->ctx,
&ap->addr, IPV6_AF_ADDED);
- if (apf && apf->iface != ap->iface) {
+ if (apf && apf->iface != ap->iface &&
+ strcmp(apf->iface->name, ap->iface->name))
+ {
if (apf->iface->metric <= ap->iface->metric) {
syslog(LOG_INFO,
"%s: preferring %s on %s",
{
/* Find the same address somewhere else */
apf = ipv6_findaddr(ap->iface->ctx, &ap->addr, 0);
- if (apf == NULL || apf->iface != ap->iface)
+ if (apf == NULL ||
+ (apf->iface != ap->iface &&
+ strcmp(apf->iface->name, ap->iface->name)))
ipv6_deleteaddr(ap);
if (!(ap->iface->options->options &
DHCPCD_EXITING) && apf)