t1 = l_t1;
t2 = l_t2;
t3 = l_t3;
+ } else {
+ t1 = 600;
}
return (int)(ia_pd_entries + ia_na_entries);
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);
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