/* * lcp.h - Link Control Protocol definitions. * * Copyright (c) 2000 by Sun Microsystems, Inc. * All rights reserved. * * Copyright (c) 1989 Carnegie Mellon University. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by Carnegie Mellon University. The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * $Id: lcp.h,v 1.15 2000/04/04 07:06:51 paulus Exp $ */ #ifndef __LCP_H_ #define __LCP_H_ #ifdef __cplusplus extern "C" { #endif /* * Options. */ #define CI_MRU 1 /* Maximum Receive Unit */ #define CI_ASYNCMAP 2 /* Async Control Character Map */ #define CI_AUTHTYPE 3 /* Authentication Type */ #define CI_QUALITY 4 /* Quality Protocol */ #define CI_MAGICNUMBER 5 /* Magic Number */ #define CI_PCOMPRESSION 7 /* Protocol Field Compression */ #define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ #define CI_FCSALTERN 9 /* FCS Alternatives */ #define CI_NUMBERED 11 /* Numbered Mode */ #define CI_CALLBACK 13 /* callback */ #define CI_MRRU 17 /* max reconstructed receive unit; multilink */ #define CI_SSNHF 18 /* short sequence numbers for multilink */ #define CI_EPDISC 19 /* endpoint discriminator */ #define CI_LINKDISC 23 /* Link Discriminator (BACP) */ #define CI_COBS 25 /* Consistent Overhead Byte Stuffing */ #define CI_PFXELISION 26 /* Prefix Elision */ #define CI_MPHDRFMT 27 /* Multilink Header Format */ #define CI_I18N 28 /* Internationalization */ #define CI_SDL 29 /* Simple Data Link */ #define CI_MUXING 30 /* PPP Muxing */ /* * LCP-specific packet types. */ #define CODE_PROTREJ 8 /* Protocol Reject */ #define CODE_ECHOREQ 9 /* Echo Request */ #define CODE_ECHOREP 10 /* Echo Reply */ #define CODE_DISCREQ 11 /* Discard Request */ #define CODE_IDENT 12 /* Identification */ #define CODE_TIMEREMAIN 13 /* Time Remaining */ /* * Callback operation field values */ #define CBOP_AUTH 0 /* Location determined by user auth */ #define CBOP_DIALSTR 1 /* Dialing string */ #define CBOP_LOCATION 2 /* Location identifier */ #define CBOP_E164 3 /* E.164 number */ #define CBOP_X500 4 /* X.500 distinguished name */ #define CBOP_CBCP 6 /* Use callback control protocol */ /* FCS-Alternatives bits (RFC 1570) */ #define FCSALT_NULL 1 /* None for network data; default otherwise */ #define FCSALT_16 2 /* CRC-16 */ #define FCSALT_32 4 /* CRC-32 */ /* An endpoint discriminator, used with multilink. */ #define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ struct epdisc { unsigned char class; unsigned char length; unsigned char value[MAX_ENDP_LEN]; }; /* values for epdisc.class */ #define EPD_NULL 0 /* null discriminator, no data */ #define EPD_LOCAL 1 #define EPD_IP 2 #define EPD_MAC 3 #define EPD_MAGIC 4 #define EPD_PHONENUM 5 /* * The state of options is described by an lcp_options structure. * * We encode CHAP/MS-CHAP/MS-CHAPv2 options as Booleans. This is done * so that we can represent the choices of requiring or refusing each * separately. The chap_mdtype value can't do that. */ typedef struct lcp_options { bool passive; /* Don't die if we don't get a response */ bool silent; /* Wait for the other end to start first */ bool restart; /* Restart vs. exit after close */ bool neg_mru; /* Negotiate the MRU? */ bool neg_asyncmap; /* Negotiate the async map? */ bool neg_upap; /* Ask for UPAP authentication? */ bool neg_chap; /* Ask for CHAP authentication? */ bool neg_mschap; /* Ask for MS-CHAPv1 authentication? */ bool neg_mschapv2; /* Ask for MS-CHAPv2 authentication? */ bool neg_magicnumber; /* Ask for magic number? */ bool neg_pcompression; /* HDLC Protocol Field Compression? */ bool neg_accompression; /* HDLC Address/Control Field Compression? */ bool neg_lqr; /* Negotiate use of Link Quality Reports */ bool neg_cbcp; /* Negotiate use of CBCP */ bool neg_mrru; /* negotiate multilink MRRU */ #ifdef MUX_FRAME u_int32_t pppmux; /* Negotiate for PPP Multiplexing option */ #endif bool neg_ssnhf; /* negotiate short sequence numbers */ bool neg_endpoint; /* negotiate endpoint discriminator */ bool neg_fcs; /* negotiate FCS alternatives */ int mru; /* Value of MRU */ int mrru; /* Value of MRRU, and multilink enable */ u_char chap_mdtype; /* which MD type (hashing algorithm) */ u_char fcs_type; /* selected FCS type(s) */ u_int32_t asyncmap; /* Value of async map */ u_int32_t magicnumber; int numloops; /* Number of loops during magic number neg. */ u_int32_t lqr_period; /* Reporting period for LQR 1/100ths second */ struct epdisc endpoint; /* endpoint discriminator */ } lcp_options; /* * The structure passed to lcp_settimeremaining(), holds the unit * number of the link being timed, and the time remaining for that * connection. */ struct lcp_timer { int unit; u_int32_t tr; }; extern fsm lcp_fsm[]; extern lcp_options lcp_wantoptions[]; extern lcp_options lcp_gotoptions[]; extern lcp_options lcp_allowoptions[]; extern lcp_options lcp_hisoptions[]; extern u_int32_t xmit_accm[][8]; void lcp_open __P((int)); void lcp_close __P((int, char *)); void lcp_lowerup __P((int)); void lcp_lowerdown __P((int)); void lcp_sprotrej __P((int, u_char *, int)); /* send protocol reject */ void lcp_settimeremaining __P((int, u_int32_t, u_int32_t)); /* * Procedures exported from multilink.c */ extern char *epdisc_to_str __P((struct epdisc *)); /* string from endpoint discriminator */ extern int str_to_epdisc __P((struct epdisc *, char *)); /* endpt discriminator from str */ extern struct protent lcp_protent; /* Default number of times we receive our magic number from the peer before deciding the link is looped-back. */ #define DEFLOOPBACKFAIL 10 #ifdef __cplusplus } #endif #endif /* __LCP_H_ */