]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/odhcp6c.c
odhcp6c: Set bound state true before script_call in statefull mode
[odhcp6c.git] / src / odhcp6c.c
index 2357a9a9aa577b7b58819c599c341b4c85e9abc8..61ffe9d832b25ae4fbae54f7fd450bdbc4214ba5 100644 (file)
@@ -266,6 +266,7 @@ int main(_unused int argc, char* const argv[])
 
        while (!signal_term) { // Main logic
                odhcp6c_clear_state(STATE_SERVER_ID);
+               odhcp6c_clear_state(STATE_SERVER_ADDR);
                odhcp6c_clear_state(STATE_IA_NA);
                odhcp6c_clear_state(STATE_IA_PD);
                odhcp6c_clear_state(STATE_SNTP_IP);
@@ -335,8 +336,8 @@ int main(_unused int argc, char* const argv[])
                        break;
 
                case DHCPV6_STATEFUL:
-                       script_call("bound");
                        bound = true;
+                       script_call("bound");
                        syslog(LOG_NOTICE, "entering stateful-mode on %s", ifname);
 
                        while (!signal_usr2 && !signal_term) {
@@ -365,6 +366,7 @@ int main(_unused int argc, char* const argv[])
                                }
 
                                odhcp6c_clear_state(STATE_SERVER_ID); // Remove binding
+                               odhcp6c_clear_state(STATE_SERVER_ADDR);
 
                                size_t ia_pd_len, ia_na_len;
                                odhcp6c_get_state(STATE_IA_PD, &ia_pd_len);
@@ -478,11 +480,8 @@ bool odhcp6c_signal_process(void)
                if (ra_link_up())
                        signal_usr2 = true;
 
-               if (ra_updated && (bound || allow_slaac_only == 0))
+               if (ra_updated && (bound || allow_slaac_only >= 0))
                        script_call("ra-updated"); // Immediate process urgent events
-               else if (ra_updated && !bound && allow_slaac_only > 0)
-                       script_delay_call("ra-updated", allow_slaac_only);
-
        }
 
        return signal_usr1 || signal_usr2 || signal_term;