From: Steven Barth Date: Mon, 30 Dec 2013 18:10:18 +0000 (+0100) Subject: Revert to old behaviour regarding information requests X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=c98181c4a48c57e405effd1dc9046aaaee6d480f;p=project%2Fodhcp6c.git Revert to old behaviour regarding information requests --- diff --git a/src/dhcpv6.c b/src/dhcpv6.c index 42e5121..9b09130 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -1116,6 +1116,8 @@ static int dhcpv6_calc_refresh_timers(void) t1 = l_t1; t2 = l_t2; t3 = l_t3; + } else { + t1 = 600; } return (int)(ia_pd_entries + ia_na_entries); @@ -1253,7 +1255,8 @@ int dhcpv6_promote_server_cand(void) size_t cand_len; struct dhcpv6_server_cand *cand = odhcp6c_get_state(STATE_SERVER_CAND, &cand_len); uint16_t hdr[2]; - int ret = DHCPV6_STATELESS; + int ret = (na_mode == IA_MODE_NONE && pd_mode == IA_MODE_NONE) ? + DHCPV6_STATELESS : DHCPV6_STATEFUL; // Clear lingering candidate state info odhcp6c_clear_state(STATE_SERVER_ID); diff --git a/src/odhcp6c.c b/src/odhcp6c.c index 0282500..dbba605 100644 --- a/src/odhcp6c.c +++ b/src/odhcp6c.c @@ -311,7 +311,16 @@ int main(_unused int argc, char* const argv[]) break; // Other signal type // Send renew as T1 expired - res = dhcpv6_request(DHCPV6_MSG_RENEW); + size_t ia_pd_len, ia_na_len; + odhcp6c_get_state(STATE_IA_PD, &ia_pd_len); + odhcp6c_get_state(STATE_IA_NA, &ia_na_len); + + // If we have any IAs, send renew, otherwise request + if (ia_pd_len == 0 && ia_na_len == 0) + res = dhcpv6_request(DHCPV6_MSG_REQUEST); + else + res = dhcpv6_request(DHCPV6_MSG_RENEW); + odhcp6c_signal_process(); if (res > 0) { // Renew was succesfull // Publish updates