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