X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fipv6cp.c;h=ce9b1385a444a90f7e2b5ba61edf547d83a31f04;hb=b1eca80e96acb988380b74d5a2f2afcb284d52fd;hp=b5e845a35a9d97a441cd77ee2d7f8a88e76dc4e9;hpb=96a47326d0073d66e287fb05fa34d119f46744ed;p=ppp.git diff --git a/pppd/ipv6cp.c b/pppd/ipv6cp.c index b5e845a..ce9b138 100644 --- a/pppd/ipv6cp.c +++ b/pppd/ipv6cp.c @@ -135,10 +135,10 @@ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $Id: ipv6cp.c,v 1.18 2003/07/28 12:25:41 carlsonj Exp $ + * $Id: ipv6cp.c,v 1.20 2004/11/13 02:28:15 paulus Exp $ */ -#define RCSID "$Id: ipv6cp.c,v 1.18 2003/07/28 12:25:41 carlsonj Exp $" +#define RCSID "$Id: ipv6cp.c,v 1.20 2004/11/13 02:28:15 paulus Exp $" /* * TODO: @@ -186,7 +186,7 @@ static void ipv6cp_resetci __P((fsm *)); /* Reset our CI */ static int ipv6cp_cilen __P((fsm *)); /* Return length of our CI */ static void ipv6cp_addci __P((fsm *, u_char *, int *)); /* Add our CI */ static int ipv6cp_ackci __P((fsm *, u_char *, int)); /* Peer ack'd our CI */ -static int ipv6cp_nakci __P((fsm *, u_char *, int)); /* Peer nak'd our CI */ +static int ipv6cp_nakci __P((fsm *, u_char *, int, int));/* Peer nak'd our CI */ static int ipv6cp_rejci __P((fsm *, u_char *, int)); /* Peer rej'd our CI */ static int ipv6cp_reqci __P((fsm *, u_char *, int *, int)); /* Rcv CI */ static void ipv6cp_up __P((fsm *)); /* We're UP */ @@ -670,10 +670,11 @@ bad: * 1 - Nak was good. */ static int -ipv6cp_nakci(f, p, len) +ipv6cp_nakci(f, p, len, treat_as_reject) fsm *f; u_char *p; int len; + int treat_as_reject; { ipv6cp_options *go = &ipv6cp_gotoptions[f->unit]; u_char citype, cilen, *next; @@ -719,19 +720,21 @@ ipv6cp_nakci(f, p, len) * from our idea, only if the accept_{local,remote} flag is set. */ NAKCIIFACEID(CI_IFACEID, neg_ifaceid, - if (go->accept_local) { - while (eui64_iszero(ifaceid) || - eui64_equals(ifaceid, go->hisid)) /* bad luck */ - eui64_magic(ifaceid); - try.ourid = ifaceid; - IPV6CPDEBUG(("local LL address %s", llv6_ntoa(ifaceid))); - } - ); + if (treat_as_reject) { + try.neg_ifaceid = 0; + } else if (go->accept_local) { + while (eui64_iszero(ifaceid) || + eui64_equals(ifaceid, go->hisid)) /* bad luck */ + eui64_magic(ifaceid); + try.ourid = ifaceid; + IPV6CPDEBUG(("local LL address %s", llv6_ntoa(ifaceid))); + } + ); #ifdef IPV6CP_COMP NAKCIVJ(CI_COMPRESSTYPE, neg_vj, { - if (cishort == IPV6CP_COMP) { + if (cishort == IPV6CP_COMP && !treat_as_reject) { try.vj_protocol = cishort; } else { try.neg_vj = 0; @@ -1522,7 +1525,6 @@ ipv6cp_printpkt(p, plen, printer, arg) */ #define IP6_HDRLEN 40 /* bytes */ #define IP6_NHDR_FRAG 44 /* fragment IPv6 header */ -#define IPPROTO_TCP 6 #define TCP_HDRLEN 20 #define TH_FIN 0x01