1*5d5fbe79SDavid van Moolenbroek /* 2*5d5fbe79SDavid van Moolenbroek * lcp.h - Link Control Protocol definitions. 3*5d5fbe79SDavid van Moolenbroek * 4*5d5fbe79SDavid van Moolenbroek * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. 5*5d5fbe79SDavid van Moolenbroek * 6*5d5fbe79SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 7*5d5fbe79SDavid van Moolenbroek * modification, are permitted provided that the following conditions 8*5d5fbe79SDavid van Moolenbroek * are met: 9*5d5fbe79SDavid van Moolenbroek * 10*5d5fbe79SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 11*5d5fbe79SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 12*5d5fbe79SDavid van Moolenbroek * 13*5d5fbe79SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 14*5d5fbe79SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in 15*5d5fbe79SDavid van Moolenbroek * the documentation and/or other materials provided with the 16*5d5fbe79SDavid van Moolenbroek * distribution. 17*5d5fbe79SDavid van Moolenbroek * 18*5d5fbe79SDavid van Moolenbroek * 3. The name "Carnegie Mellon University" must not be used to 19*5d5fbe79SDavid van Moolenbroek * endorse or promote products derived from this software without 20*5d5fbe79SDavid van Moolenbroek * prior written permission. For permission or any legal 21*5d5fbe79SDavid van Moolenbroek * details, please contact 22*5d5fbe79SDavid van Moolenbroek * Office of Technology Transfer 23*5d5fbe79SDavid van Moolenbroek * Carnegie Mellon University 24*5d5fbe79SDavid van Moolenbroek * 5000 Forbes Avenue 25*5d5fbe79SDavid van Moolenbroek * Pittsburgh, PA 15213-3890 26*5d5fbe79SDavid van Moolenbroek * (412) 268-4387, fax: (412) 268-7395 27*5d5fbe79SDavid van Moolenbroek * tech-transfer@andrew.cmu.edu 28*5d5fbe79SDavid van Moolenbroek * 29*5d5fbe79SDavid van Moolenbroek * 4. Redistributions of any form whatsoever must retain the following 30*5d5fbe79SDavid van Moolenbroek * acknowledgment: 31*5d5fbe79SDavid van Moolenbroek * "This product includes software developed by Computing Services 32*5d5fbe79SDavid van Moolenbroek * at Carnegie Mellon University (http://www.cmu.edu/computing/)." 33*5d5fbe79SDavid van Moolenbroek * 34*5d5fbe79SDavid van Moolenbroek * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO 35*5d5fbe79SDavid van Moolenbroek * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 36*5d5fbe79SDavid van Moolenbroek * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE 37*5d5fbe79SDavid van Moolenbroek * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 38*5d5fbe79SDavid van Moolenbroek * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 39*5d5fbe79SDavid van Moolenbroek * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 40*5d5fbe79SDavid van Moolenbroek * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 41*5d5fbe79SDavid van Moolenbroek * 42*5d5fbe79SDavid van Moolenbroek * $Id: lcp.h,v 1.20 2004/11/14 22:53:42 carlsonj Exp $ 43*5d5fbe79SDavid van Moolenbroek */ 44*5d5fbe79SDavid van Moolenbroek 45*5d5fbe79SDavid van Moolenbroek #include "netif/ppp/ppp_opts.h" 46*5d5fbe79SDavid van Moolenbroek #if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ 47*5d5fbe79SDavid van Moolenbroek 48*5d5fbe79SDavid van Moolenbroek #ifndef LCP_H 49*5d5fbe79SDavid van Moolenbroek #define LCP_H 50*5d5fbe79SDavid van Moolenbroek 51*5d5fbe79SDavid van Moolenbroek #include "ppp.h" 52*5d5fbe79SDavid van Moolenbroek 53*5d5fbe79SDavid van Moolenbroek /* 54*5d5fbe79SDavid van Moolenbroek * Options. 55*5d5fbe79SDavid van Moolenbroek */ 56*5d5fbe79SDavid van Moolenbroek #define CI_VENDOR 0 /* Vendor Specific */ 57*5d5fbe79SDavid van Moolenbroek #define CI_MRU 1 /* Maximum Receive Unit */ 58*5d5fbe79SDavid van Moolenbroek #define CI_ASYNCMAP 2 /* Async Control Character Map */ 59*5d5fbe79SDavid van Moolenbroek #define CI_AUTHTYPE 3 /* Authentication Type */ 60*5d5fbe79SDavid van Moolenbroek #define CI_QUALITY 4 /* Quality Protocol */ 61*5d5fbe79SDavid van Moolenbroek #define CI_MAGICNUMBER 5 /* Magic Number */ 62*5d5fbe79SDavid van Moolenbroek #define CI_PCOMPRESSION 7 /* Protocol Field Compression */ 63*5d5fbe79SDavid van Moolenbroek #define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ 64*5d5fbe79SDavid van Moolenbroek #define CI_FCSALTERN 9 /* FCS-Alternatives */ 65*5d5fbe79SDavid van Moolenbroek #define CI_SDP 10 /* Self-Describing-Pad */ 66*5d5fbe79SDavid van Moolenbroek #define CI_NUMBERED 11 /* Numbered-Mode */ 67*5d5fbe79SDavid van Moolenbroek #define CI_CALLBACK 13 /* callback */ 68*5d5fbe79SDavid van Moolenbroek #define CI_MRRU 17 /* max reconstructed receive unit; multilink */ 69*5d5fbe79SDavid van Moolenbroek #define CI_SSNHF 18 /* short sequence numbers for multilink */ 70*5d5fbe79SDavid van Moolenbroek #define CI_EPDISC 19 /* endpoint discriminator */ 71*5d5fbe79SDavid van Moolenbroek #define CI_MPPLUS 22 /* Multi-Link-Plus-Procedure */ 72*5d5fbe79SDavid van Moolenbroek #define CI_LDISC 23 /* Link-Discriminator */ 73*5d5fbe79SDavid van Moolenbroek #define CI_LCPAUTH 24 /* LCP Authentication */ 74*5d5fbe79SDavid van Moolenbroek #define CI_COBS 25 /* Consistent Overhead Byte Stuffing */ 75*5d5fbe79SDavid van Moolenbroek #define CI_PREFELIS 26 /* Prefix Elision */ 76*5d5fbe79SDavid van Moolenbroek #define CI_MPHDRFMT 27 /* MP Header Format */ 77*5d5fbe79SDavid van Moolenbroek #define CI_I18N 28 /* Internationalization */ 78*5d5fbe79SDavid van Moolenbroek #define CI_SDL 29 /* Simple Data Link */ 79*5d5fbe79SDavid van Moolenbroek 80*5d5fbe79SDavid van Moolenbroek /* 81*5d5fbe79SDavid van Moolenbroek * LCP-specific packet types (code numbers). 82*5d5fbe79SDavid van Moolenbroek */ 83*5d5fbe79SDavid van Moolenbroek #define PROTREJ 8 /* Protocol Reject */ 84*5d5fbe79SDavid van Moolenbroek #define ECHOREQ 9 /* Echo Request */ 85*5d5fbe79SDavid van Moolenbroek #define ECHOREP 10 /* Echo Reply */ 86*5d5fbe79SDavid van Moolenbroek #define DISCREQ 11 /* Discard Request */ 87*5d5fbe79SDavid van Moolenbroek #define IDENTIF 12 /* Identification */ 88*5d5fbe79SDavid van Moolenbroek #define TIMEREM 13 /* Time Remaining */ 89*5d5fbe79SDavid van Moolenbroek 90*5d5fbe79SDavid van Moolenbroek /* Value used as data for CI_CALLBACK option */ 91*5d5fbe79SDavid van Moolenbroek #define CBCP_OPT 6 /* Use callback control protocol */ 92*5d5fbe79SDavid van Moolenbroek 93*5d5fbe79SDavid van Moolenbroek #if 0 /* moved to ppp_opts.h */ 94*5d5fbe79SDavid van Moolenbroek #define DEFMRU 1500 /* Try for this */ 95*5d5fbe79SDavid van Moolenbroek #define MINMRU 128 /* No MRUs below this */ 96*5d5fbe79SDavid van Moolenbroek #define MAXMRU 16384 /* Normally limit MRU to this */ 97*5d5fbe79SDavid van Moolenbroek #endif /* moved to ppp_opts.h */ 98*5d5fbe79SDavid van Moolenbroek 99*5d5fbe79SDavid van Moolenbroek /* An endpoint discriminator, used with multilink. */ 100*5d5fbe79SDavid van Moolenbroek #define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ 101*5d5fbe79SDavid van Moolenbroek struct epdisc { 102*5d5fbe79SDavid van Moolenbroek unsigned char class_; /* -- The word "class" is reserved in C++. */ 103*5d5fbe79SDavid van Moolenbroek unsigned char length; 104*5d5fbe79SDavid van Moolenbroek unsigned char value[MAX_ENDP_LEN]; 105*5d5fbe79SDavid van Moolenbroek }; 106*5d5fbe79SDavid van Moolenbroek 107*5d5fbe79SDavid van Moolenbroek /* 108*5d5fbe79SDavid van Moolenbroek * The state of options is described by an lcp_options structure. 109*5d5fbe79SDavid van Moolenbroek */ 110*5d5fbe79SDavid van Moolenbroek typedef struct lcp_options { 111*5d5fbe79SDavid van Moolenbroek unsigned int passive :1; /* Don't die if we don't get a response */ 112*5d5fbe79SDavid van Moolenbroek unsigned int silent :1; /* Wait for the other end to start first */ 113*5d5fbe79SDavid van Moolenbroek #if 0 /* UNUSED */ 114*5d5fbe79SDavid van Moolenbroek unsigned int restart :1; /* Restart vs. exit after close */ 115*5d5fbe79SDavid van Moolenbroek #endif /* UNUSED */ 116*5d5fbe79SDavid van Moolenbroek unsigned int neg_mru :1; /* Negotiate the MRU? */ 117*5d5fbe79SDavid van Moolenbroek unsigned int neg_asyncmap :1; /* Negotiate the async map? */ 118*5d5fbe79SDavid van Moolenbroek #if PAP_SUPPORT 119*5d5fbe79SDavid van Moolenbroek unsigned int neg_upap :1; /* Ask for UPAP authentication? */ 120*5d5fbe79SDavid van Moolenbroek #endif /* PAP_SUPPORT */ 121*5d5fbe79SDavid van Moolenbroek #if CHAP_SUPPORT 122*5d5fbe79SDavid van Moolenbroek unsigned int neg_chap :1; /* Ask for CHAP authentication? */ 123*5d5fbe79SDavid van Moolenbroek #endif /* CHAP_SUPPORT */ 124*5d5fbe79SDavid van Moolenbroek #if EAP_SUPPORT 125*5d5fbe79SDavid van Moolenbroek unsigned int neg_eap :1; /* Ask for EAP authentication? */ 126*5d5fbe79SDavid van Moolenbroek #endif /* EAP_SUPPORT */ 127*5d5fbe79SDavid van Moolenbroek unsigned int neg_magicnumber :1; /* Ask for magic number? */ 128*5d5fbe79SDavid van Moolenbroek unsigned int neg_pcompression :1; /* HDLC Protocol Field Compression? */ 129*5d5fbe79SDavid van Moolenbroek unsigned int neg_accompression :1; /* HDLC Address/Control Field Compression? */ 130*5d5fbe79SDavid van Moolenbroek #if LQR_SUPPORT 131*5d5fbe79SDavid van Moolenbroek unsigned int neg_lqr :1; /* Negotiate use of Link Quality Reports */ 132*5d5fbe79SDavid van Moolenbroek #endif /* LQR_SUPPORT */ 133*5d5fbe79SDavid van Moolenbroek unsigned int neg_cbcp :1; /* Negotiate use of CBCP */ 134*5d5fbe79SDavid van Moolenbroek #ifdef HAVE_MULTILINK 135*5d5fbe79SDavid van Moolenbroek unsigned int neg_mrru :1; /* negotiate multilink MRRU */ 136*5d5fbe79SDavid van Moolenbroek #endif /* HAVE_MULTILINK */ 137*5d5fbe79SDavid van Moolenbroek unsigned int neg_ssnhf :1; /* negotiate short sequence numbers */ 138*5d5fbe79SDavid van Moolenbroek unsigned int neg_endpoint :1; /* negotiate endpoint discriminator */ 139*5d5fbe79SDavid van Moolenbroek 140*5d5fbe79SDavid van Moolenbroek u16_t mru; /* Value of MRU */ 141*5d5fbe79SDavid van Moolenbroek #ifdef HAVE_MULTILINK 142*5d5fbe79SDavid van Moolenbroek u16_t mrru; /* Value of MRRU, and multilink enable */ 143*5d5fbe79SDavid van Moolenbroek #endif /* MULTILINK */ 144*5d5fbe79SDavid van Moolenbroek #if CHAP_SUPPORT 145*5d5fbe79SDavid van Moolenbroek u8_t chap_mdtype; /* which MD types (hashing algorithm) */ 146*5d5fbe79SDavid van Moolenbroek #endif /* CHAP_SUPPORT */ 147*5d5fbe79SDavid van Moolenbroek u32_t asyncmap; /* Value of async map */ 148*5d5fbe79SDavid van Moolenbroek u32_t magicnumber; 149*5d5fbe79SDavid van Moolenbroek u8_t numloops; /* Number of loops during magic number neg. */ 150*5d5fbe79SDavid van Moolenbroek #if LQR_SUPPORT 151*5d5fbe79SDavid van Moolenbroek u32_t lqr_period; /* Reporting period for LQR 1/100ths second */ 152*5d5fbe79SDavid van Moolenbroek #endif /* LQR_SUPPORT */ 153*5d5fbe79SDavid van Moolenbroek struct epdisc endpoint; /* endpoint discriminator */ 154*5d5fbe79SDavid van Moolenbroek } lcp_options; 155*5d5fbe79SDavid van Moolenbroek 156*5d5fbe79SDavid van Moolenbroek void lcp_open(ppp_pcb *pcb); 157*5d5fbe79SDavid van Moolenbroek void lcp_close(ppp_pcb *pcb, const char *reason); 158*5d5fbe79SDavid van Moolenbroek void lcp_lowerup(ppp_pcb *pcb); 159*5d5fbe79SDavid van Moolenbroek void lcp_lowerdown(ppp_pcb *pcb); 160*5d5fbe79SDavid van Moolenbroek void lcp_sprotrej(ppp_pcb *pcb, u_char *p, int len); /* send protocol reject */ 161*5d5fbe79SDavid van Moolenbroek 162*5d5fbe79SDavid van Moolenbroek extern const struct protent lcp_protent; 163*5d5fbe79SDavid van Moolenbroek 164*5d5fbe79SDavid van Moolenbroek #if 0 /* moved to ppp_opts.h */ 165*5d5fbe79SDavid van Moolenbroek /* Default number of times we receive our magic number from the peer 166*5d5fbe79SDavid van Moolenbroek before deciding the link is looped-back. */ 167*5d5fbe79SDavid van Moolenbroek #define DEFLOOPBACKFAIL 10 168*5d5fbe79SDavid van Moolenbroek #endif /* moved to ppp_opts.h */ 169*5d5fbe79SDavid van Moolenbroek 170*5d5fbe79SDavid van Moolenbroek #endif /* LCP_H */ 171*5d5fbe79SDavid van Moolenbroek #endif /* PPP_SUPPORT */ 172