18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * lcp.h - Link Control Protocol definitions.
38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved.
58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Redistribution and use in source and binary forms, with or without
78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * modification, are permitted provided that the following conditions
88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * are met:
98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    notice, this list of conditions and the following disclaimer in
158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    the documentation and/or other materials provided with the
168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    distribution.
178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3. The name "Carnegie Mellon University" must not be used to
198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    endorse or promote products derived from this software without
208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    prior written permission. For permission or any legal
218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    details, please contact
228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *      Office of Technology Transfer
238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *      Carnegie Mellon University
248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *      5000 Forbes Avenue
258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *      Pittsburgh, PA  15213-3890
268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *      (412) 268-4387, fax: (412) 268-7395
278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *      tech-transfer@andrew.cmu.edu
288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 4. Redistributions of any form whatsoever must retain the following
308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    acknowledgment:
318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    "This product includes software developed by Computing Services
328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
421286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley * $Id: lcp.h,v 1.20 2004/11/14 22:53:42 carlsonj Exp $
438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Options.
478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
481286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_VENDOR	0	/* Vendor Specific */
498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_MRU		1	/* Maximum Receive Unit */
508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_ASYNCMAP	2	/* Async Control Character Map */
518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_AUTHTYPE	3	/* Authentication Type */
528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_QUALITY	4	/* Quality Protocol */
538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_MAGICNUMBER	5	/* Magic Number */
548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_PCOMPRESSION	7	/* Protocol Field Compression */
558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_ACCOMPRESSION 8	/* Address/Control Field Compression */
561286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_FCSALTERN	9	/* FCS-Alternatives */
571286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_SDP		10	/* Self-Describing-Pad */
581286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_NUMBERED	11	/* Numbered-Mode */
598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_CALLBACK	13	/* callback */
608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_MRRU		17	/* max reconstructed receive unit; multilink */
618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_SSNHF	18	/* short sequence numbers for multilink */
628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_EPDISC	19	/* endpoint discriminator */
631286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_MPPLUS	22	/* Multi-Link-Plus-Procedure */
641286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_LDISC	23	/* Link-Discriminator */
651286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_LCPAUTH	24	/* LCP Authentication */
661286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_COBS		25	/* Consistent Overhead Byte Stuffing */
671286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_PREFELIS	26	/* Prefix Elision */
681286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_MPHDRFMT	27	/* MP Header Format */
691286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_I18N		28	/* Internationalization */
701286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define CI_SDL		29	/* Simple Data Link */
718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
731286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley * LCP-specific packet types (code numbers).
748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define PROTREJ		8	/* Protocol Reject */
768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define ECHOREQ		9	/* Echo Request */
778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define ECHOREP		10	/* Echo Reply */
788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DISCREQ		11	/* Discard Request */
791286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define IDENTIF		12	/* Identification */
801286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley#define TIMEREM		13	/* Time Remaining */
811286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley
821286c078a4b93695b3812e8c7fe7918c28ea18b4Adam Langley/* Value used as data for CI_CALLBACK option */
838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CBCP_OPT	6	/* Use callback control protocol */
848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * The state of options is described by an lcp_options structure.
878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projecttypedef struct lcp_options {
898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool passive;		/* Don't die if we don't get a response */
908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool silent;		/* Wait for the other end to start first */
918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool restart;		/* Restart vs. exit after close */
928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_mru;		/* Negotiate the MRU? */
938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_asyncmap;		/* Negotiate the async map? */
948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_upap;		/* Ask for UPAP authentication? */
958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_chap;		/* Ask for CHAP authentication? */
968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_eap;		/* Ask for EAP authentication? */
978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_magicnumber;	/* Ask for magic number? */
988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_pcompression;	/* HDLC Protocol Field Compression? */
998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_accompression;	/* HDLC Address/Control Field Compression? */
1008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_lqr;		/* Negotiate use of Link Quality Reports */
1018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_cbcp;		/* Negotiate use of CBCP */
1028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_mrru;		/* negotiate multilink MRRU */
1038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_ssnhf;		/* negotiate short sequence numbers */
1048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    bool neg_endpoint;		/* negotiate endpoint discriminator */
1058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    int  mru;			/* Value of MRU */
1068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    int	 mrru;			/* Value of MRRU, and multilink enable */
1078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    u_char chap_mdtype;		/* which MD types (hashing algorithm) */
1088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    u_int32_t asyncmap;		/* Value of async map */
1098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    u_int32_t magicnumber;
1108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    int  numloops;		/* Number of loops during magic number neg. */
1118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    u_int32_t lqr_period;	/* Reporting period for LQR 1/100ths second */
1128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    struct epdisc endpoint;	/* endpoint discriminator */
1138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} lcp_options;
1148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectextern fsm lcp_fsm[];
1168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectextern lcp_options lcp_wantoptions[];
1178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectextern lcp_options lcp_gotoptions[];
1188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectextern lcp_options lcp_allowoptions[];
1198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectextern lcp_options lcp_hisoptions[];
1208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFMRU	1500		/* Try for this */
1228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MINMRU	128		/* No MRUs below this */
1238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MAXMRU	16384		/* Normally limit MRU to this */
1248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid lcp_open __P((int));
1268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid lcp_close __P((int, char *));
1278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid lcp_lowerup __P((int));
1288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid lcp_lowerdown __P((int));
1298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid lcp_sprotrej __P((int, u_char *, int));	/* send protocol reject */
1308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectextern struct protent lcp_protent;
1328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* Default number of times we receive our magic number from the peer
1348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project   before deciding the link is looped-back. */
1358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLOOPBACKFAIL	10
136