TAILQ_FOREACH(rap, &ipv6_routers, next) {
if (rap->expired != expired)
continue;
- if (options & DHCPCD_IPV6RA_OWN) {
+ if (rap->iface->options->options & DHCPCD_IPV6RA_OWN) {
TAILQ_FOREACH(addr, &rap->addrs, next) {
if (!addr->onlink)
continue;
TAILQ_INSERT_TAIL(dnr, rt, next);
}
}
- rt = make_router(rap);
- if (rt)
- TAILQ_INSERT_TAIL(dnr, rt, next);
+ if (rap->iface->options->options &
+ (DHCPCD_IPV6RA_OWN | DHCPCD_IPV6RA_OWN_DEFAULT))
+ {
+ rt = make_router(rap);
+ if (rt)
+ TAILQ_INSERT_TAIL(dnr, rt, next);
+ }
}
}
eloop_timeout_delete(NULL, rap->iface);
eloop_timeout_delete(NULL, rap);
- TAILQ_REMOVE(&ipv6_routers, rap, next);
+ if (!drop)
+ TAILQ_REMOVE(&ipv6_routers, rap, next);
ipv6rs_freedrop_addrs(rap, drop);
ipv6rs_free_opts(rap);
free(rap->data);