- struct in6_addr addr = addrs[i].addr;
- int prefix = a->managed ? addrs[i].prefix : a->length;
- if (prefix == 128)
- addr.s6_addr32[3] = htonl(a->assigned);
- else
- addr.s6_addr32[1] |= htonl(a->assigned);
+ for (size_t i = 0; i < addrlen; ++i) {
+ if (addrs[i].prefix > 96 || addrs[i].preferred <= (uint32_t)now)
+ continue;
+
+ struct in6_addr addr = addrs[i].addr;
+ int prefix = a->managed ? addrs[i].prefix : a->length;
+ if (prefix == 128)
+ addr.s6_addr32[3] = htonl(a->assigned);
+ else
+ addr.s6_addr32[1] |= htonl(a->assigned);