Home | History | Annotate | Download | only in ppp
      1 /*****************************************************************************
      2 * lcp.h - Network Link Control Protocol header file.
      3 *
      4 * Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc.
      5 * portions Copyright (c) 1997 Global Election Systems Inc.
      6 *
      7 * The authors hereby grant permission to use, copy, modify, distribute,
      8 * and license this software and its documentation for any purpose, provided
      9 * that existing copyright notices are retained in all copies and that this
     10 * notice and the following disclaimer are included verbatim in any
     11 * distributions. No written agreement, license, or royalty fee is required
     12 * for any of the authorized uses.
     13 *
     14 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
     15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     17 * IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24 *
     25 ******************************************************************************
     26 * REVISION HISTORY
     27 *
     28 * 03-01-01 Marc Boucher <marc (at) mbsi.ca>
     29 *   Ported to lwIP.
     30 * 97-11-05 Guy Lancaster <glanca (at) gesn.com>, Global Election Systems Inc.
     31 *   Original derived from BSD codes.
     32 *****************************************************************************/
     33 /*
     34  * lcp.h - Link Control Protocol definitions.
     35  *
     36  * Copyright (c) 1989 Carnegie Mellon University.
     37  * All rights reserved.
     38  *
     39  * Redistribution and use in source and binary forms are permitted
     40  * provided that the above copyright notice and this paragraph are
     41  * duplicated in all such forms and that any documentation,
     42  * advertising materials, and other materials related to such
     43  * distribution and use acknowledge that the software was developed
     44  * by Carnegie Mellon University.  The name of the
     45  * University may not be used to endorse or promote products derived
     46  * from this software without specific prior written permission.
     47  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
     48  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
     49  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
     50  *
     51  * $Id: lcp.h,v 1.4 2010/01/18 20:49:43 goldsimon Exp $
     52  */
     53 
     54 #ifndef LCP_H
     55 #define LCP_H
     56 /*
     57  * Options.
     58  */
     59 #define CI_MRU           1  /* Maximum Receive Unit */
     60 #define CI_ASYNCMAP      2  /* Async Control Character Map */
     61 #define CI_AUTHTYPE      3  /* Authentication Type */
     62 #define CI_QUALITY       4  /* Quality Protocol */
     63 #define CI_MAGICNUMBER   5  /* Magic Number */
     64 #define CI_PCOMPRESSION  7  /* Protocol Field Compression */
     65 #define CI_ACCOMPRESSION 8  /* Address/Control Field Compression */
     66 #define CI_CALLBACK      13 /* callback */
     67 #define CI_MRRU          17 /* max reconstructed receive unit; multilink */
     68 #define CI_SSNHF         18 /* short sequence numbers for multilink */
     69 #define CI_EPDISC        19 /* endpoint discriminator */
     70 
     71 /*
     72  * LCP-specific packet types (code numbers).
     73  */
     74 #define PROTREJ          8  /* Protocol Reject */
     75 #define ECHOREQ          9  /* Echo Request */
     76 #define ECHOREP          10 /* Echo Reply */
     77 #define DISCREQ          11 /* Discard Request */
     78 #define CBCP_OPT         6  /* Use callback control protocol */
     79 
     80 /*
     81  * The state of options is described by an lcp_options structure.
     82  */
     83 typedef struct lcp_options {
     84     u_int passive           : 1; /* Don't die if we don't get a response */
     85     u_int silent            : 1; /* Wait for the other end to start first */
     86     u_int restart           : 1; /* Restart vs. exit after close */
     87     u_int neg_mru           : 1; /* Negotiate the MRU? */
     88     u_int neg_asyncmap      : 1; /* Negotiate the async map? */
     89     u_int neg_upap          : 1; /* Ask for UPAP authentication? */
     90     u_int neg_chap          : 1; /* Ask for CHAP authentication? */
     91     u_int neg_magicnumber   : 1; /* Ask for magic number? */
     92     u_int neg_pcompression  : 1; /* HDLC Protocol Field Compression? */
     93     u_int neg_accompression : 1; /* HDLC Address/Control Field Compression? */
     94     u_int neg_lqr           : 1; /* Negotiate use of Link Quality Reports */
     95     u_int neg_cbcp          : 1; /* Negotiate use of CBCP */
     96 #ifdef PPP_MULTILINK
     97     u_int neg_mrru          : 1; /* Negotiate multilink MRRU */
     98     u_int neg_ssnhf         : 1; /* Negotiate short sequence numbers */
     99     u_int neg_endpoint      : 1; /* Negotiate endpoint discriminator */
    100 #endif
    101     u_short mru;                 /* Value of MRU */
    102 #ifdef PPP_MULTILINK
    103     u_short mrru;                /* Value of MRRU, and multilink enable */
    104 #endif
    105     u_char chap_mdtype;          /* which MD type (hashing algorithm) */
    106     u32_t asyncmap;              /* Value of async map */
    107     u32_t magicnumber;
    108     int numloops;                /* Number of loops during magic number neg. */
    109     u32_t lqr_period;            /* Reporting period for LQR 1/100ths second */
    110 #ifdef PPP_MULTILINK
    111     struct epdisc endpoint;      /* endpoint discriminator */
    112 #endif
    113 } lcp_options;
    114 
    115 /*
    116  * Values for phase from BSD pppd.h based on RFC 1661.
    117  */
    118 typedef enum {
    119   PHASE_DEAD = 0,
    120   PHASE_INITIALIZE,
    121   PHASE_ESTABLISH,
    122   PHASE_AUTHENTICATE,
    123   PHASE_CALLBACK,
    124   PHASE_NETWORK,
    125   PHASE_TERMINATE
    126 } LinkPhase;
    127 
    128 
    129 
    130 extern LinkPhase lcp_phase[NUM_PPP]; /* Phase of link session (RFC 1661) */
    131 extern lcp_options lcp_wantoptions[];
    132 extern lcp_options lcp_gotoptions[];
    133 extern lcp_options lcp_allowoptions[];
    134 extern lcp_options lcp_hisoptions[];
    135 extern ext_accm xmit_accm[];
    136 
    137 
    138 void lcp_init     (int);
    139 void lcp_open     (int);
    140 void lcp_close    (int, char *);
    141 void lcp_lowerup  (int);
    142 void lcp_lowerdown(int);
    143 void lcp_sprotrej (int, u_char *, int); /* send protocol reject */
    144 
    145 extern struct protent lcp_protent;
    146 
    147 /* Default number of times we receive our magic number from the peer
    148    before deciding the link is looped-back. */
    149 #define DEFLOOPBACKFAIL 10
    150 
    151 #endif /* LCP_H */
    152