summaryrefslogtreecommitdiff
path: root/tool/mbed/mbed-sdk/libraries/net/lwip/lwip/netif/ppp/lcp.h
blob: b9201eeb50bf9a2e7b1031b6ae1473455d81275d (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
/*****************************************************************************
* lcp.h - Network Link Control Protocol header file.
*
* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc.
* portions Copyright (c) 1997 Global Election Systems Inc.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice and the following disclaimer are included verbatim in any 
* distributions. No written agreement, license, or royalty fee is required
* for any of the authorized uses.
*
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
* REVISION HISTORY
*
* 03-01-01 Marc Boucher <marc@mbsi.ca>
*   Ported to lwIP.
* 97-11-05 Guy Lancaster <glanca@gesn.com>, Global Election Systems Inc.
*   Original derived from BSD codes.
*****************************************************************************/
/*
 * lcp.h - Link Control Protocol definitions.
 *
 * 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.4 2010/01/18 20:49:43 goldsimon Exp $
 */

#ifndef LCP_H
#define LCP_H
/*
 * 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_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 */

/*
 * LCP-specific packet types (code numbers).
 */
#define PROTREJ          8  /* Protocol Reject */
#define ECHOREQ          9  /* Echo Request */
#define ECHOREP          10 /* Echo Reply */
#define DISCREQ          11 /* Discard Request */
#define CBCP_OPT         6  /* Use callback control protocol */

/*
 * The state of options is described by an lcp_options structure.
 */
typedef struct lcp_options {
    u_int passive           : 1; /* Don't die if we don't get a response */
    u_int silent            : 1; /* Wait for the other end to start first */
    u_int restart           : 1; /* Restart vs. exit after close */
    u_int neg_mru           : 1; /* Negotiate the MRU? */
    u_int neg_asyncmap      : 1; /* Negotiate the async map? */
    u_int neg_upap          : 1; /* Ask for UPAP authentication? */
    u_int neg_chap          : 1; /* Ask for CHAP authentication? */
    u_int neg_magicnumber   : 1; /* Ask for magic number? */
    u_int neg_pcompression  : 1; /* HDLC Protocol Field Compression? */
    u_int neg_accompression : 1; /* HDLC Address/Control Field Compression? */
    u_int neg_lqr           : 1; /* Negotiate use of Link Quality Reports */
    u_int neg_cbcp          : 1; /* Negotiate use of CBCP */
#ifdef PPP_MULTILINK
    u_int neg_mrru          : 1; /* Negotiate multilink MRRU */
    u_int neg_ssnhf         : 1; /* Negotiate short sequence numbers */
    u_int neg_endpoint      : 1; /* Negotiate endpoint discriminator */
#endif
    u_short mru;                 /* Value of MRU */
#ifdef PPP_MULTILINK
    u_short mrru;                /* Value of MRRU, and multilink enable */
#endif
    u_char chap_mdtype;          /* which MD type (hashing algorithm) */
    u32_t asyncmap;              /* Value of async map */
    u32_t magicnumber;
    int numloops;                /* Number of loops during magic number neg. */
    u32_t lqr_period;            /* Reporting period for LQR 1/100ths second */
#ifdef PPP_MULTILINK
    struct epdisc endpoint;      /* endpoint discriminator */
#endif
} lcp_options;

/*
 * Values for phase from BSD pppd.h based on RFC 1661.
 */
typedef enum {
  PHASE_DEAD = 0,
  PHASE_INITIALIZE,
  PHASE_ESTABLISH,
  PHASE_AUTHENTICATE,
  PHASE_CALLBACK,
  PHASE_NETWORK,
  PHASE_TERMINATE
} LinkPhase;



extern LinkPhase lcp_phase[NUM_PPP]; /* Phase of link session (RFC 1661) */
extern lcp_options lcp_wantoptions[];
extern lcp_options lcp_gotoptions[];
extern lcp_options lcp_allowoptions[];
extern lcp_options lcp_hisoptions[];
extern ext_accm xmit_accm[];


void lcp_init     (int);
void lcp_open     (int);
void lcp_close    (int, char *);
void lcp_lowerup  (int);
void lcp_lowerdown(int);
void lcp_sprotrej (int, u_char *, int); /* send protocol reject */

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

#endif /* LCP_H */