1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
/*
* 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 $
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#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_ */
|