1 /* 2 * lcp.h - Link Control Protocol definitions. 3 * 4 * Copyright (c) 2000 by Sun Microsystems, Inc. 5 * All rights reserved. 6 * 7 * Copyright (c) 1989 Carnegie Mellon University. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms are permitted 11 * provided that the above copyright notice and this paragraph are 12 * duplicated in all such forms and that any documentation, 13 * advertising materials, and other materials related to such 14 * distribution and use acknowledge that the software was developed 15 * by Carnegie Mellon University. The name of the 16 * University may not be used to endorse or promote products derived 17 * from this software without specific prior written permission. 18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 20 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 21 * 22 * $Id: lcp.h,v 1.15 2000/04/04 07:06:51 paulus Exp $ 23 */ 24 25 #pragma ident "%Z%%M% %I% %E% SMI" 26 27 #ifndef __LCP_H_ 28 #define __LCP_H_ 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 /* 35 * Options. 36 */ 37 #define CI_MRU 1 /* Maximum Receive Unit */ 38 #define CI_ASYNCMAP 2 /* Async Control Character Map */ 39 #define CI_AUTHTYPE 3 /* Authentication Type */ 40 #define CI_QUALITY 4 /* Quality Protocol */ 41 #define CI_MAGICNUMBER 5 /* Magic Number */ 42 #define CI_PCOMPRESSION 7 /* Protocol Field Compression */ 43 #define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ 44 #define CI_FCSALTERN 9 /* FCS Alternatives */ 45 #define CI_NUMBERED 11 /* Numbered Mode */ 46 #define CI_CALLBACK 13 /* callback */ 47 #define CI_MRRU 17 /* max reconstructed receive unit; multilink */ 48 #define CI_SSNHF 18 /* short sequence numbers for multilink */ 49 #define CI_EPDISC 19 /* endpoint discriminator */ 50 #define CI_LINKDISC 23 /* Link Discriminator (BACP) */ 51 #define CI_COBS 25 /* Consistent Overhead Byte Stuffing */ 52 #define CI_PFXELISION 26 /* Prefix Elision */ 53 #define CI_MPHDRFMT 27 /* Multilink Header Format */ 54 #define CI_I18N 28 /* Internationalization */ 55 #define CI_SDL 29 /* Simple Data Link */ 56 #define CI_MUXING 30 /* PPP Muxing */ 57 58 /* 59 * LCP-specific packet types. 60 */ 61 #define CODE_PROTREJ 8 /* Protocol Reject */ 62 #define CODE_ECHOREQ 9 /* Echo Request */ 63 #define CODE_ECHOREP 10 /* Echo Reply */ 64 #define CODE_DISCREQ 11 /* Discard Request */ 65 #define CODE_IDENT 12 /* Identification */ 66 #define CODE_TIMEREMAIN 13 /* Time Remaining */ 67 68 /* 69 * Callback operation field values 70 */ 71 #define CBOP_AUTH 0 /* Location determined by user auth */ 72 #define CBOP_DIALSTR 1 /* Dialing string */ 73 #define CBOP_LOCATION 2 /* Location identifier */ 74 #define CBOP_E164 3 /* E.164 number */ 75 #define CBOP_X500 4 /* X.500 distinguished name */ 76 #define CBOP_CBCP 6 /* Use callback control protocol */ 77 78 /* FCS-Alternatives bits (RFC 1570) */ 79 #define FCSALT_NULL 1 /* None for network data; default otherwise */ 80 #define FCSALT_16 2 /* CRC-16 */ 81 #define FCSALT_32 4 /* CRC-32 */ 82 83 /* An endpoint discriminator, used with multilink. */ 84 #define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ 85 struct epdisc { 86 unsigned char class; 87 unsigned char length; 88 unsigned char value[MAX_ENDP_LEN]; 89 }; 90 91 /* values for epdisc.class */ 92 #define EPD_NULL 0 /* null discriminator, no data */ 93 #define EPD_LOCAL 1 94 #define EPD_IP 2 95 #define EPD_MAC 3 96 #define EPD_MAGIC 4 97 #define EPD_PHONENUM 5 98 99 /* 100 * The state of options is described by an lcp_options structure. 101 * 102 * We encode CHAP/MS-CHAP/MS-CHAPv2 options as Booleans. This is done 103 * so that we can represent the choices of requiring or refusing each 104 * separately. The chap_mdtype value can't do that. 105 */ 106 typedef struct lcp_options { 107 bool passive; /* Don't die if we don't get a response */ 108 bool silent; /* Wait for the other end to start first */ 109 bool restart; /* Restart vs. exit after close */ 110 bool neg_mru; /* Negotiate the MRU? */ 111 bool neg_asyncmap; /* Negotiate the async map? */ 112 bool neg_upap; /* Ask for UPAP authentication? */ 113 bool neg_chap; /* Ask for CHAP authentication? */ 114 bool neg_mschap; /* Ask for MS-CHAPv1 authentication? */ 115 bool neg_mschapv2; /* Ask for MS-CHAPv2 authentication? */ 116 bool neg_magicnumber; /* Ask for magic number? */ 117 bool neg_pcompression; /* HDLC Protocol Field Compression? */ 118 bool neg_accompression; /* HDLC Address/Control Field Compression? */ 119 bool neg_lqr; /* Negotiate use of Link Quality Reports */ 120 bool neg_cbcp; /* Negotiate use of CBCP */ 121 bool neg_mrru; /* negotiate multilink MRRU */ 122 #ifdef MUX_FRAME 123 u_int32_t pppmux; /* Negotiate for PPP Multiplexing option */ 124 #endif 125 bool neg_ssnhf; /* negotiate short sequence numbers */ 126 bool neg_endpoint; /* negotiate endpoint discriminator */ 127 bool neg_fcs; /* negotiate FCS alternatives */ 128 int mru; /* Value of MRU */ 129 int mrru; /* Value of MRRU, and multilink enable */ 130 u_char chap_mdtype; /* which MD type (hashing algorithm) */ 131 u_char fcs_type; /* selected FCS type(s) */ 132 u_int32_t asyncmap; /* Value of async map */ 133 u_int32_t magicnumber; 134 int numloops; /* Number of loops during magic number neg. */ 135 u_int32_t lqr_period; /* Reporting period for LQR 1/100ths second */ 136 struct epdisc endpoint; /* endpoint discriminator */ 137 } lcp_options; 138 139 /* 140 * The structure passed to lcp_settimeremaining(), holds the unit 141 * number of the link being timed, and the time remaining for that 142 * connection. 143 */ 144 struct lcp_timer { 145 int unit; 146 u_int32_t tr; 147 }; 148 149 extern fsm lcp_fsm[]; 150 extern lcp_options lcp_wantoptions[]; 151 extern lcp_options lcp_gotoptions[]; 152 extern lcp_options lcp_allowoptions[]; 153 extern lcp_options lcp_hisoptions[]; 154 extern u_int32_t xmit_accm[][8]; 155 156 void lcp_open __P((int)); 157 void lcp_close __P((int, char *)); 158 void lcp_lowerup __P((int)); 159 void lcp_lowerdown __P((int)); 160 void lcp_sprotrej __P((int, u_char *, int)); /* send protocol reject */ 161 void lcp_settimeremaining __P((int, u_int32_t, u_int32_t)); 162 163 /* 164 * Procedures exported from multilink.c 165 */ 166 extern char *epdisc_to_str __P((struct epdisc *)); 167 /* string from endpoint discriminator */ 168 extern int str_to_epdisc __P((struct epdisc *, char *)); 169 /* endpt discriminator from str */ 170 171 extern struct protent lcp_protent; 172 173 /* Default number of times we receive our magic number from the peer 174 before deciding the link is looped-back. */ 175 #define DEFLOOPBACKFAIL 10 176 177 #ifdef __cplusplus 178 } 179 #endif 180 181 #endif /* __LCP_H_ */ 182