X-Git-Url: https://git.decadent.org.uk/gitweb/?p=odhcp6c.git;a=blobdiff_plain;f=src%2Fodhcp6c.c;h=2c5bfad4342f3c4298ef517355b12b512ac89b42;hp=100ed61b0cf40809de09c22a7f1144d2c52feb72;hb=0131c7ed248d8a39480afd455de800c242ae5350;hpb=60c9e4d5a26f530e89ed6254e8c09380b50fac08 diff --git a/src/odhcp6c.c b/src/odhcp6c.c index 100ed61..2c5bfad 100644 --- a/src/odhcp6c.c +++ b/src/odhcp6c.c @@ -32,6 +32,10 @@ #include "odhcp6c.h" #include "ra.h" +#ifdef EXT_BFD_PING +#include "bfd.h" +#endif + static void sighandler(int signal); static int usage(void); @@ -262,6 +266,9 @@ int main(_unused int argc, char* const argv[]) script_call("bound"); bound = true; syslog(LOG_NOTICE, "entering stateful-mode on %s", ifname); +#ifdef EXT_BFD_PING + bfd_start(ifname, 3, 10); +#endif while (do_signal == 0 || do_signal == SIGUSR1) { // Renew Cycle @@ -311,6 +318,10 @@ int main(_unused int argc, char* const argv[]) script_call("rebound"); } +#ifdef EXT_BFD_PING + bfd_stop(); +#endif + size_t ia_pd_len, ia_na_len, server_id_len; odhcp6c_get_state(STATE_IA_PD, &ia_pd_len); @@ -391,10 +402,17 @@ bool odhcp6c_signal_process(void) do_signal = 0; bool ra_updated = ra_process(); + if (ra_link_up()) + do_signal = SIGUSR2; + 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); + +#ifdef EXT_BFD_PING + bfd_receive(); +#endif } return do_signal != 0;