struct nd_opt_mtu mtu;
struct nd_opt_rdnss rdnss;
uint8_t *p;
- struct ra *rap;
+ struct ra *rap, *rap2;
struct in6_addr pi_prefix;
- struct ipv6_addr *ia;
+ struct ipv6_addr *ia, *ia2;
struct dhcp_opt *dho;
bool new_rap, new_data, has_address;
uint32_t old_lifetime;
TAILQ_FOREACH(ia, &rap->addrs, next) {
if (!(ia->flags & IPV6_AF_STALE) || ia->prefix_pltime == 0)
continue;
+ TAILQ_FOREACH(rap2, ctx->ra_routers, next) {
+ if (rap2->expired)
+ continue;
+ TAILQ_FOREACH(ia2, &rap2->addrs, next) {
+ if (IN6_ARE_ADDR_EQUAL(&ia->prefix,
+ &ia2->prefix) &&
+ ia->prefix_pltime != 0 &&
+ ia->prefix_vltime != 0)
+ break;
+ }
+ if (ia2 != NULL)
+ break;
+ }
+ if (rap2 != NULL && ia2 != NULL)
+ continue;
logdebugx("%s: %s: became stale", ifp->name, ia->saddr);
ia->prefix_pltime = 0;
}