X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fodhcp6c.c;h=2c5bfad4342f3c4298ef517355b12b512ac89b42;hb=0131c7ed248d8a39480afd455de800c242ae5350;hp=506239d2205824b7ae70fc050f0f44f1843737b1;hpb=6f0b2d5f806a73ae6464bc6904d0494d8204cd0d;p=odhcp6c.git diff --git a/src/odhcp6c.c b/src/odhcp6c.c index 506239d..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); @@ -89,7 +93,6 @@ int main(_unused int argc, char* const argv[]) if (request_pd == 0) request_pd = -1; - ia_pd_mode = IA_MODE_TRY; break; case 'F': @@ -263,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 @@ -312,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); @@ -392,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;