]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/odhcp6c.c
Stop rebinding when all IAs are lost
[odhcp6c.git] / src / odhcp6c.c
index 3c6b3b05abd8db9eaeedb92dcf270dee90d8625b..0a46947f4a5e2adc689b9dfd4ebc8ad412d18369 100644 (file)
@@ -391,6 +391,12 @@ int main(_unused int argc, char* const argv[])
 
                                odhcp6c_clear_state(STATE_SERVER_ID); // Remove binding
 
+                               odhcp6c_get_state(STATE_IA_PD, &ia_pd_len);
+                               odhcp6c_get_state(STATE_IA_NA, &ia_na_len);
+
+                               if (ia_pd_len == 0 && ia_na_len == 0)
+                                       break;
+
                                // If we have IAs, try rebind otherwise restart
                                res = dhcpv6_request(DHCPV6_MSG_REBIND);
                                odhcp6c_signal_process();
@@ -470,7 +476,7 @@ uint64_t odhcp6c_get_milli_time(void)
 {
        struct timespec t = {0, 0};
        syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &t);
-       return t.tv_sec * 1000 + t.tv_nsec / 1000000;
+       return ((uint64_t)t.tv_sec) * 1000 + ((uint64_t)t.tv_nsec) / 1000000;
 }