2 * lcp.h - Link Control Protocol definitions.
4 * Copyright (c) 2000 by Sun Microsystems, Inc.
7 * Copyright (c) 1989 Carnegie Mellon University.
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.
22 * $Id: lcp.h,v 1.15 2000/04/04 07:06:51 paulus Exp $
25 #pragma ident "%Z%%M% %I% %E% SMI"
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 */
59 * LCP-specific packet types.
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 */
69 * Callback operation field values
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 */
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 */
83 /* An endpoint discriminator, used with multilink. */
84 #define MAX_ENDP_LEN 20 /* maximum length of discriminator value */
88 unsigned char value
[MAX_ENDP_LEN
];
91 /* values for epdisc.class */
92 #define EPD_NULL 0 /* null discriminator, no data */
97 #define EPD_PHONENUM 5
100 * The state of options is described by an lcp_options structure.
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.
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 */
123 u_int32_t pppmux
; /* Negotiate for PPP Multiplexing option */
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 */
140 * The structure passed to lcp_settimeremaining(), holds the unit
141 * number of the link being timed, and the time remaining for that
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];
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
));
164 * Procedures exported from multilink.c
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 */
171 extern struct protent lcp_protent
;
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
181 #endif /* __LCP_H_ */