1 /*
2  * ecp.c - PPP Encryption Control Protocol.
3  *
4  * Copyright (c) 2002 Google, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in
16  *    the documentation and/or other materials provided with the
17  *    distribution.
18  *
19  * 3. The name(s) of the authors of this software must not be used to
20  *    endorse or promote products derived from this software without
21  *    prior written permission.
22  *
23  * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
24  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
25  * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
26  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
27  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
28  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
29  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30  *
31  * Derived from ccp.c, which is:
32  *
33  * Copyright (c) 1994-2002 Paul Mackerras. All rights reserved.
34  *
35  * Redistribution and use in source and binary forms, with or without
36  * modification, are permitted provided that the following conditions
37  * are met:
38  *
39  * 1. Redistributions of source code must retain the above copyright
40  *    notice, this list of conditions and the following disclaimer.
41  *
42  * 2. The name(s) of the authors of this software must not be used to
43  *    endorse or promote products derived from this software without
44  *    prior written permission.
45  *
46  * 3. Redistributions of any form whatsoever must retain the following
47  *    acknowledgment:
48  *    "This product includes software developed by Paul Mackerras
49  *     <paulus@samba.org>".
50  *
51  * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
52  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
53  * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
54  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
55  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
56  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
57  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
58  */
59 
60 #include "netif/ppp/ppp_opts.h"
61 #if PPP_SUPPORT && ECP_SUPPORT  /* don't build if not configured for use in lwipopts.h */
62 
63 #include <string.h>
64 
65 #include "netif/ppp/ppp_impl.h"
66 
67 #include "netif/ppp/fsm.h"
68 #include "netif/ppp/ecp.h"
69 
70 #if PPP_OPTIONS
71 static option_t ecp_option_list[] = {
72     { "noecp", o_bool, &ecp_protent.enabled_flag,
73       "Disable ECP negotiation" },
74     { "-ecp", o_bool, &ecp_protent.enabled_flag,
75       "Disable ECP negotiation", OPT_ALIAS },
76 
77     { NULL }
78 };
79 #endif /* PPP_OPTIONS */
80 
81 /*
82  * Protocol entry points from main code.
83  */
84 static void ecp_init (int unit);
85 /*
86 static void ecp_open (int unit);
87 static void ecp_close (int unit, char *);
88 static void ecp_lowerup (int unit);
89 static void ecp_lowerdown (int);
90 static void ecp_input (int unit, u_char *pkt, int len);
91 static void ecp_protrej (int unit);
92 */
93 #if PRINTPKT_SUPPORT
94 static int  ecp_printpkt (const u_char *pkt, int len,
95 			      void (*printer) (void *, char *, ...),
96 			      void *arg);
97 #endif /* PRINTPKT_SUPPORT */
98 /*
99 static void ecp_datainput (int unit, u_char *pkt, int len);
100 */
101 
102 const struct protent ecp_protent = {
103     PPP_ECP,
104     ecp_init,
105     NULL, /* ecp_input, */
106     NULL, /* ecp_protrej, */
107     NULL, /* ecp_lowerup, */
108     NULL, /* ecp_lowerdown, */
109     NULL, /* ecp_open, */
110     NULL, /* ecp_close, */
111 #if PRINTPKT_SUPPORT
112     ecp_printpkt,
113 #endif /* PRINTPKT_SUPPORT */
114 #if PPP_DATAINPUT
115     NULL, /* ecp_datainput, */
116 #endif /* PPP_DATAINPUT */
117 #if PRINTPKT_SUPPORT
118     "ECP",
119     "Encrypted",
120 #endif /* PRINTPKT_SUPPORT */
121 #if PPP_OPTIONS
122     ecp_option_list,
123     NULL,
124 #endif /* PPP_OPTIONS */
125 #if DEMAND_SUPPORT
126     NULL,
127     NULL
128 #endif /* DEMAND_SUPPORT */
129 };
130 
131 fsm ecp_fsm[NUM_PPP];
132 ecp_options ecp_wantoptions[NUM_PPP];	/* what to request the peer to use */
133 ecp_options ecp_gotoptions[NUM_PPP];	/* what the peer agreed to do */
134 ecp_options ecp_allowoptions[NUM_PPP];	/* what we'll agree to do */
135 ecp_options ecp_hisoptions[NUM_PPP];	/* what we agreed to do */
136 
137 static const fsm_callbacks ecp_callbacks = {
138     NULL, /* ecp_resetci, */
139     NULL, /* ecp_cilen, */
140     NULL, /* ecp_addci, */
141     NULL, /* ecp_ackci, */
142     NULL, /* ecp_nakci, */
143     NULL, /* ecp_rejci, */
144     NULL, /* ecp_reqci, */
145     NULL, /* ecp_up, */
146     NULL, /* ecp_down, */
147     NULL,
148     NULL,
149     NULL,
150     NULL,
151     NULL, /* ecp_extcode, */
152     "ECP"
153 };
154 
155 /*
156  * ecp_init - initialize ECP.
157  */
158 static void
ecp_init(unit)159 ecp_init(unit)
160     int unit;
161 {
162     fsm *f = &ecp_fsm[unit];
163 
164     f->unit = unit;
165     f->protocol = PPP_ECP;
166     f->callbacks = &ecp_callbacks;
167     fsm_init(f);
168 
169 #if 0 /* Not necessary, everything is cleared in ppp_new() */
170     memset(&ecp_wantoptions[unit],  0, sizeof(ecp_options));
171     memset(&ecp_gotoptions[unit],   0, sizeof(ecp_options));
172     memset(&ecp_allowoptions[unit], 0, sizeof(ecp_options));
173     memset(&ecp_hisoptions[unit],   0, sizeof(ecp_options));
174 #endif /* 0 */
175 
176 }
177 
178 
179 #if PRINTPKT_SUPPORT
180 static int
ecp_printpkt(p,plen,printer,arg)181 ecp_printpkt(p, plen, printer, arg)
182     const u_char *p;
183     int plen;
184     void (*printer) (void *, char *, ...);
185     void *arg;
186 {
187     return 0;
188 }
189 #endif /* PRINTPKT_SUPPORT */
190 
191 #endif /* PPP_SUPPORT && ECP_SUPPORT */
192