- if (addr->preferred > (uint32_t)now &&
- minvalid > TIME_LEFT(addr->valid, now))
- minvalid = TIME_LEFT(addr->valid, now);
+ if (addr->preferred > (uint32_t)now) {
+ preferred = TIME_LEFT(addr->preferred, now);
+
+ if (iface->ra_useleasetime &&
+ preferred > iface->dhcpv4_leasetime)
+ preferred = iface->dhcpv4_leasetime;
+ }
+
+ valid = TIME_LEFT(addr->valid, now);
+ if (iface->ra_useleasetime && valid > iface->dhcpv4_leasetime)
+ valid = iface->dhcpv4_leasetime;
+
+ if (minvalid > valid)
+ minvalid = valid;