summaryrefslogtreecommitdiff
path: root/usr/src/cmd/cmd-inet/usr.bin/pppd/lcp.h
blob: a58d35f6405f520144297ca3120fe328faf60e3c (plain)
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_ */