/**
- * Copyright (C) 2012 Steven Barth <steven@midlink.org>
+ * Copyright (C) 2012-2013 Steven Barth <steven@midlink.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License v2 as published by
cand.preference -= 2000;
} else if (otype == DHCPV6_OPT_PREF && olen >= 1 &&
cand.preference >= 0) {
- cand.preference = odata[1];
+ cand.preference = odata[0];
} else if (otype == DHCPV6_OPT_RECONF_ACCEPT) {
cand.wants_reconfigure = true;
} else if (otype == DHCPV6_OPT_IA_PD && request_prefix) {
if (t3 < 0)
t3 = 0;
} else {
- t1 = t2 = t3 = 86400;
+ t1 = t2 = t3 = UINT32_MAX;
}
if (opt) {
if (ia_hdr->iaid != 1 || l_t2 < l_t1)
continue;
+ bool error = false;
uint16_t stype, slen;
uint8_t *sdata;
// Test status and bail if error
stype, slen, sdata)
if (stype == DHCPV6_OPT_STATUS && slen >= 2 &&
(sdata[0] || sdata[1]))
- continue;
+ error = true;
+
+ if (error)
+ continue;
// Update times
if (l_t1 > 0 && t1 > l_t1)
if (n < t3)
t3 = n;
+ if (t2 >= t3)
+ t2 = 8 * t3 / 10;
+
+ if (t1 >= t2)
+ t1 = 5 * t2 / 8;
+
} else if (otype == DHCPV6_OPT_DNS_SERVERS) {
if (olen % 16 == 0)
odhcp6c_add_state(STATE_DNS, odata, olen);