Revert to old behaviour regarding information requests
authorSteven Barth <steven@midlink.org>
Mon, 30 Dec 2013 18:10:18 +0000 (19:10 +0100)
committerSteven Barth <steven@midlink.org>
Mon, 30 Dec 2013 18:10:18 +0000 (19:10 +0100)
src/dhcpv6.c
src/odhcp6c.c

index 42e512161161ae43cdab56927c1e1f1fadf1645f..9b091304290005d31edbb016e1d40352340272a9 100644 (file)
@@ -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);
index 0282500b20a4e623b78937080e28bbe2e14f59f4..dbba60512c171ef8f5782ecd524d07baacfabc87 100644 (file)
@@ -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