18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * ecp.c - PPP Encryption Control Protocol.
38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (c) 2002 The Android Open Source Project
58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * All rights reserved.
68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Redistribution and use in source and binary forms, with or without
88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * modification, are permitted provided that the following conditions
98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * are met:
108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    notice, this list of conditions and the following disclaimer in
168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    the documentation and/or other materials provided with the
178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    distribution.
188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3. The name(s) of the authors of this software must not be used to
208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    endorse or promote products derived from this software without
218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    prior written permission.
228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Derived from ccp.c, which is:
328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (c) 1994-2002 Paul Mackerras. All rights reserved.
348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Redistribution and use in source and binary forms, with or without
368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * modification, are permitted provided that the following conditions
378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * are met:
388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2. The name(s) of the authors of this software must not be used to
438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    endorse or promote products derived from this software without
448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    prior written permission.
458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3. Redistributions of any form whatsoever must retain the following
478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    acknowledgment:
488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *    "This product includes software developed by Paul Mackerras
498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *     <paulus@samba.org>".
508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define RCSID	"$Id: ecp.c,v 1.4 2004/11/04 10:02:26 paulus Exp $"
618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic const char rcsid[] = RCSID;
638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <string.h>
658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include "pppd.h"
678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include "fsm.h"
688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include "ecp.h"
698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic option_t ecp_option_list[] = {
718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    { "noecp", o_bool, &ecp_protent.enabled_flag,
728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project      "Disable ECP negotiation" },
738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    { "-ecp", o_bool, &ecp_protent.enabled_flag,
748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project      "Disable ECP negotiation", OPT_ALIAS },
758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    { NULL }
778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project};
788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Protocol entry points from main code.
818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_init __P((int unit));
838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_open __P((int unit));
858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_close __P((int unit, char *));
868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_lowerup __P((int unit));
878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_lowerdown __P((int));
888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_input __P((int unit, u_char *pkt, int len));
898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_protrej __P((int unit));
908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project*/
918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic int  ecp_printpkt __P((u_char *pkt, int len,
928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project			      void (*printer) __P((void *, char *, ...)),
938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project			      void *arg));
948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void ecp_datainput __P((int unit, u_char *pkt, int len));
968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project*/
978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstruct protent ecp_protent = {
998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    PPP_ECP,
1008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    ecp_init,
1018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_input, */
1028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_protrej, */
1038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_lowerup, */
1048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_lowerdown, */
1058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_open, */
1068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_close, */
1078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    ecp_printpkt,
1088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_datainput, */
1098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    0,
1108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    "ECP",
1118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    "Encrypted",
1128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    ecp_option_list,
1138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL,
1148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL,
1158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL
1168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project};
1178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectfsm ecp_fsm[NUM_PPP];
1198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectecp_options ecp_wantoptions[NUM_PPP];	/* what to request the peer to use */
1208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectecp_options ecp_gotoptions[NUM_PPP];	/* what the peer agreed to do */
1218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectecp_options ecp_allowoptions[NUM_PPP];	/* what we'll agree to do */
1228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectecp_options ecp_hisoptions[NUM_PPP];	/* what we agreed to do */
1238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic fsm_callbacks ecp_callbacks = {
1258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_resetci, */
1268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_cilen, */
1278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_addci, */
1288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_ackci, */
1298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_nakci, */
1308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_rejci, */
1318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_reqci, */
1328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_up, */
1338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_down, */
1348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL,
1358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL,
1368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL,
1378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL,
1388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    NULL, /* ecp_extcode, */
1398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    "ECP"
1408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project};
1418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
1438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * ecp_init - initialize ECP.
1448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
1458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void
1468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectecp_init(unit)
1478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    int unit;
1488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{
1498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    fsm *f = &ecp_fsm[unit];
1508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    f->unit = unit;
1528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    f->protocol = PPP_ECP;
1538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    f->callbacks = &ecp_callbacks;
1548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    fsm_init(f);
1558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    memset(&ecp_wantoptions[unit],  0, sizeof(ecp_options));
1578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    memset(&ecp_gotoptions[unit],   0, sizeof(ecp_options));
1588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    memset(&ecp_allowoptions[unit], 0, sizeof(ecp_options));
1598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    memset(&ecp_hisoptions[unit],   0, sizeof(ecp_options));
1608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}
1628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
1648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic int
1658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectecp_printpkt(p, plen, printer, arg)
1668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    u_char *p;
1678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    int plen;
1688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    void (*printer) __P((void *, char *, ...));
1698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    void *arg;
1708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{
1718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project    return 0;
1728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}
1738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
174