+ } else {
+ time_t now = system_get_rtime();
+ if ((cur = tb[ADDR_PREFERRED])) {
+ uint32_t preferred = blobmsg_get_u32(cur);
+ if (preferred < UINT32_MAX)
+ addr->preferred_until = now + preferred;
+ }
+
+ if ((cur = tb[ADDR_VALID])) {
+ uint32_t valid = blobmsg_get_u32(cur);
+ if (valid < UINT32_MAX)
+ addr->valid_until = now + valid;
+
+ }
+
+ if (addr->valid_until) {
+ if (!addr->preferred_until)
+ addr->preferred_until = addr->valid_until;
+ else if (addr->preferred_until > addr->valid_until)
+ goto error;
+ }