for (size_t i = 0; i < addrlen; ++i) {
if (addrs[i].prefix > 96)
continue;
+ if (c->valid_until <= now)
+ continue;
addr = addrs[i].addr;
if (c->length == 128)
datalen += sizeof(stat);
} else {
if (a) {
- uint32_t pref = 3600;
- uint32_t valid = 3600;
+ uint32_t leasetime = iface->dhcpv4_leasetime;
+ if (leasetime == 0)
+ leasetime = 3600;
+ else if (leasetime < 60)
+ leasetime = 60;
+
+ uint32_t pref = leasetime;
+ uint32_t valid = leasetime;
struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->ia_addr;
size_t addrlen = (a->managed) ? (size_t)a->managed_size : iface->ia_addr_len;
}
} else if (hdr->msg_type == DHCPV6_MSG_CONFIRM && ia_addr_present) {
// Send NOTONLINK for CONFIRM with addr present so that clients restart connection
+ status = DHCPV6_STATUS_NOTONLINK;
+ ia_response_len = append_reply(buf, buflen, status, ia, a, iface, true);
notonlink = true;
}