X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fipv6cp.c;h=caa2b265d7e7b20f3b3bb1a093d88d26fb1cdcda;hb=0b6118239615e98959f7e0b4e746bdd197533248;hp=4a09c9aa3aeddbe6587c214a34d8cb34c6286611;hpb=f2af1c05596be799c0c0ec1e451b8b0ae5ddabc6;p=ppp.git diff --git a/pppd/ipv6cp.c b/pppd/ipv6cp.c index 4a09c9a..caa2b26 100644 --- a/pppd/ipv6cp.c +++ b/pppd/ipv6cp.c @@ -151,6 +151,7 @@ */ #include +#include #include #include #include @@ -179,6 +180,16 @@ int no_ifaceid_neg = 0; /* local vars */ static int ipv6cp_is_up; +/* Hook for a plugin to know when IPv6 protocol has come up */ +void (*ipv6_up_hook) __P((void)) = NULL; + +/* Hook for a plugin to know when IPv6 protocol has come down */ +void (*ipv6_down_hook) __P((void)) = NULL; + +/* Notifiers for when IPCPv6 goes up and down */ +struct notifier *ipv6_up_notifier = NULL; +struct notifier *ipv6_down_notifier = NULL; + /* * Callbacks for fsm code. (CI = Configuration Information) */ @@ -1120,7 +1131,7 @@ ipv6_check_options() if (demand && (eui64_iszero(wo->ourid) || eui64_iszero(wo->hisid))) { option_error("local/remote LL address required for demand-dialling\n"); - exit(1); + exit(EXIT_OPTION_ERROR); } } @@ -1282,6 +1293,10 @@ ipv6cp_up(f) np_up(f->unit, PPP_IPV6); ipv6cp_is_up = 1; + notify(ipv6_up_notifier, 0); + if (ipv6_up_hook) + ipv6_up_hook(); + /* * Execute the ipv6-up script, like this: * /etc/ppp/ipv6-up interface tty speed local-LL remote-LL @@ -1305,6 +1320,9 @@ ipv6cp_down(f) { IPV6CPDEBUG(("ipv6cp: down")); update_link_stats(f->unit); + notify(ipv6_down_notifier, 0); + if (ipv6_down_hook) + ipv6_down_hook(); if (ipv6cp_is_up) { ipv6cp_is_up = 0; np_down(f->unit, PPP_IPV6);