1*10465441SEvalZero /***************************************************************************** 2*10465441SEvalZero * ppp.h - Network Point to Point Protocol header file. 3*10465441SEvalZero * 4*10465441SEvalZero * Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. 5*10465441SEvalZero * portions Copyright (c) 1997 Global Election Systems Inc. 6*10465441SEvalZero * 7*10465441SEvalZero * The authors hereby grant permission to use, copy, modify, distribute, 8*10465441SEvalZero * and license this software and its documentation for any purpose, provided 9*10465441SEvalZero * that existing copyright notices are retained in all copies and that this 10*10465441SEvalZero * notice and the following disclaimer are included verbatim in any 11*10465441SEvalZero * distributions. No written agreement, license, or royalty fee is required 12*10465441SEvalZero * for any of the authorized uses. 13*10465441SEvalZero * 14*10465441SEvalZero * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR 15*10465441SEvalZero * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16*10465441SEvalZero * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17*10465441SEvalZero * IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 18*10465441SEvalZero * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19*10465441SEvalZero * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20*10465441SEvalZero * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21*10465441SEvalZero * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22*10465441SEvalZero * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23*10465441SEvalZero * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24*10465441SEvalZero * 25*10465441SEvalZero ****************************************************************************** 26*10465441SEvalZero * REVISION HISTORY 27*10465441SEvalZero * 28*10465441SEvalZero * 03-01-01 Marc Boucher <[email protected]> 29*10465441SEvalZero * Ported to lwIP. 30*10465441SEvalZero * 97-11-05 Guy Lancaster <[email protected]>, Global Election Systems Inc. 31*10465441SEvalZero * Original derived from BSD codes. 32*10465441SEvalZero *****************************************************************************/ 33*10465441SEvalZero 34*10465441SEvalZero #ifndef PPP_H 35*10465441SEvalZero #define PPP_H 36*10465441SEvalZero 37*10465441SEvalZero #include "lwip/opt.h" 38*10465441SEvalZero 39*10465441SEvalZero #if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ 40*10465441SEvalZero 41*10465441SEvalZero #include "lwip/def.h" 42*10465441SEvalZero #include "lwip/sio.h" 43*10465441SEvalZero #include "lwip/stats.h" 44*10465441SEvalZero #include "lwip/mem.h" 45*10465441SEvalZero #include "lwip/netif.h" 46*10465441SEvalZero #include "lwip/sys.h" 47*10465441SEvalZero #include "lwip/timers.h" 48*10465441SEvalZero 49*10465441SEvalZero 50*10465441SEvalZero #ifndef __u_char_defined 51*10465441SEvalZero 52*10465441SEvalZero /* Type definitions for BSD code. */ 53*10465441SEvalZero typedef unsigned long u_long; 54*10465441SEvalZero typedef unsigned int u_int; 55*10465441SEvalZero typedef unsigned short u_short; 56*10465441SEvalZero typedef unsigned char u_char; 57*10465441SEvalZero 58*10465441SEvalZero #endif 59*10465441SEvalZero 60*10465441SEvalZero 61*10465441SEvalZero /************************* 62*10465441SEvalZero *** PUBLIC DEFINITIONS *** 63*10465441SEvalZero *************************/ 64*10465441SEvalZero 65*10465441SEvalZero /* Error codes. */ 66*10465441SEvalZero #define PPPERR_NONE 0 /* No error. */ 67*10465441SEvalZero #define PPPERR_PARAM -1 /* Invalid parameter. */ 68*10465441SEvalZero #define PPPERR_OPEN -2 /* Unable to open PPP session. */ 69*10465441SEvalZero #define PPPERR_DEVICE -3 /* Invalid I/O device for PPP. */ 70*10465441SEvalZero #define PPPERR_ALLOC -4 /* Unable to allocate resources. */ 71*10465441SEvalZero #define PPPERR_USER -5 /* User interrupt. */ 72*10465441SEvalZero #define PPPERR_CONNECT -6 /* Connection lost. */ 73*10465441SEvalZero #define PPPERR_AUTHFAIL -7 /* Failed authentication challenge. */ 74*10465441SEvalZero #define PPPERR_PROTOCOL -8 /* Failed to meet protocol. */ 75*10465441SEvalZero 76*10465441SEvalZero /* 77*10465441SEvalZero * PPP IOCTL commands. 78*10465441SEvalZero */ 79*10465441SEvalZero /* 80*10465441SEvalZero * Get the up status - 0 for down, non-zero for up. The argument must 81*10465441SEvalZero * point to an int. 82*10465441SEvalZero */ 83*10465441SEvalZero #define PPPCTLG_UPSTATUS 100 /* Get the up status - 0 down else up */ 84*10465441SEvalZero #define PPPCTLS_ERRCODE 101 /* Set the error code */ 85*10465441SEvalZero #define PPPCTLG_ERRCODE 102 /* Get the error code */ 86*10465441SEvalZero #define PPPCTLG_FD 103 /* Get the fd associated with the ppp */ 87*10465441SEvalZero 88*10465441SEvalZero /************************ 89*10465441SEvalZero *** PUBLIC DATA TYPES *** 90*10465441SEvalZero ************************/ 91*10465441SEvalZero 92*10465441SEvalZero struct ppp_addrs { 93*10465441SEvalZero ip_addr_t our_ipaddr, his_ipaddr, netmask, dns1, dns2; 94*10465441SEvalZero }; 95*10465441SEvalZero 96*10465441SEvalZero 97*10465441SEvalZero /*********************** 98*10465441SEvalZero *** PUBLIC FUNCTIONS *** 99*10465441SEvalZero ***********************/ 100*10465441SEvalZero 101*10465441SEvalZero /* Initialize the PPP subsystem. */ 102*10465441SEvalZero void pppInit(void); 103*10465441SEvalZero 104*10465441SEvalZero /* Warning: Using PPPAUTHTYPE_ANY might have security consequences. 105*10465441SEvalZero * RFC 1994 says: 106*10465441SEvalZero * 107*10465441SEvalZero * In practice, within or associated with each PPP server, there is a 108*10465441SEvalZero * database which associates "user" names with authentication 109*10465441SEvalZero * information ("secrets"). It is not anticipated that a particular 110*10465441SEvalZero * named user would be authenticated by multiple methods. This would 111*10465441SEvalZero * make the user vulnerable to attacks which negotiate the least secure 112*10465441SEvalZero * method from among a set (such as PAP rather than CHAP). If the same 113*10465441SEvalZero * secret was used, PAP would reveal the secret to be used later with 114*10465441SEvalZero * CHAP. 115*10465441SEvalZero * 116*10465441SEvalZero * Instead, for each user name there should be an indication of exactly 117*10465441SEvalZero * one method used to authenticate that user name. If a user needs to 118*10465441SEvalZero * make use of different authentication methods under different 119*10465441SEvalZero * circumstances, then distinct user names SHOULD be employed, each of 120*10465441SEvalZero * which identifies exactly one authentication method. 121*10465441SEvalZero * 122*10465441SEvalZero */ 123*10465441SEvalZero enum pppAuthType { 124*10465441SEvalZero PPPAUTHTYPE_NONE, 125*10465441SEvalZero PPPAUTHTYPE_ANY, 126*10465441SEvalZero PPPAUTHTYPE_PAP, 127*10465441SEvalZero PPPAUTHTYPE_CHAP 128*10465441SEvalZero }; 129*10465441SEvalZero 130*10465441SEvalZero void pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd); 131*10465441SEvalZero 132*10465441SEvalZero /* Link status callback function prototype */ 133*10465441SEvalZero typedef void (*pppLinkStatusCB_fn)(void *ctx, int errCode, void *arg); 134*10465441SEvalZero 135*10465441SEvalZero #if PPPOS_SUPPORT 136*10465441SEvalZero /* 137*10465441SEvalZero * Open a new PPP connection using the given serial I/O device. 138*10465441SEvalZero * This initializes the PPP control block but does not 139*10465441SEvalZero * attempt to negotiate the LCP session. 140*10465441SEvalZero * Return a new PPP connection descriptor on success or 141*10465441SEvalZero * an error code (negative) on failure. 142*10465441SEvalZero */ 143*10465441SEvalZero int pppOverSerialOpen(sio_fd_t fd, pppLinkStatusCB_fn linkStatusCB, void *linkStatusCtx); 144*10465441SEvalZero #endif /* PPPOS_SUPPORT */ 145*10465441SEvalZero 146*10465441SEvalZero #if PPPOE_SUPPORT 147*10465441SEvalZero /* 148*10465441SEvalZero * Open a new PPP Over Ethernet (PPPOE) connection. 149*10465441SEvalZero */ 150*10465441SEvalZero int pppOverEthernetOpen(struct netif *ethif, const char *service_name, const char *concentrator_name, 151*10465441SEvalZero pppLinkStatusCB_fn linkStatusCB, void *linkStatusCtx); 152*10465441SEvalZero #endif /* PPPOE_SUPPORT */ 153*10465441SEvalZero 154*10465441SEvalZero /* for source code compatibility */ 155*10465441SEvalZero #define pppOpen(fd,cb,ls) pppOverSerialOpen(fd,cb,ls) 156*10465441SEvalZero 157*10465441SEvalZero /* 158*10465441SEvalZero * Close a PPP connection and release the descriptor. 159*10465441SEvalZero * Any outstanding packets in the queues are dropped. 160*10465441SEvalZero * Return 0 on success, an error code on failure. 161*10465441SEvalZero */ 162*10465441SEvalZero int pppClose(int pd); 163*10465441SEvalZero 164*10465441SEvalZero /* 165*10465441SEvalZero * Indicate to the PPP process that the line has disconnected. 166*10465441SEvalZero */ 167*10465441SEvalZero void pppSigHUP(int pd); 168*10465441SEvalZero 169*10465441SEvalZero /* 170*10465441SEvalZero * Get and set parameters for the given connection. 171*10465441SEvalZero * Return 0 on success, an error code on failure. 172*10465441SEvalZero */ 173*10465441SEvalZero int pppIOCtl(int pd, int cmd, void *arg); 174*10465441SEvalZero 175*10465441SEvalZero /* 176*10465441SEvalZero * Return the Maximum Transmission Unit for the given PPP connection. 177*10465441SEvalZero */ 178*10465441SEvalZero u_short pppMTU(int pd); 179*10465441SEvalZero 180*10465441SEvalZero #if PPPOS_SUPPORT && !PPP_INPROC_OWNTHREAD 181*10465441SEvalZero /* 182*10465441SEvalZero * PPP over Serial: this is the input function to be called for received data. 183*10465441SEvalZero * If PPP_INPROC_OWNTHREAD==1, a seperate input thread using the blocking 184*10465441SEvalZero * sio_read() is used, so this is deactivated. 185*10465441SEvalZero */ 186*10465441SEvalZero void pppos_input(int pd, u_char* data, int len); 187*10465441SEvalZero #endif /* PPPOS_SUPPORT && !PPP_INPROC_OWNTHREAD */ 188*10465441SEvalZero 189*10465441SEvalZero 190*10465441SEvalZero #if LWIP_NETIF_STATUS_CALLBACK 191*10465441SEvalZero /* Set an lwIP-style status-callback for the selected PPP device */ 192*10465441SEvalZero void ppp_set_netif_statuscallback(int pd, netif_status_callback_fn status_callback); 193*10465441SEvalZero #endif /* LWIP_NETIF_STATUS_CALLBACK */ 194*10465441SEvalZero #if LWIP_NETIF_LINK_CALLBACK 195*10465441SEvalZero /* Set an lwIP-style link-callback for the selected PPP device */ 196*10465441SEvalZero void ppp_set_netif_linkcallback(int pd, netif_status_callback_fn link_callback); 197*10465441SEvalZero #endif /* LWIP_NETIF_LINK_CALLBACK */ 198*10465441SEvalZero 199*10465441SEvalZero #endif /* PPP_SUPPORT */ 200*10465441SEvalZero 201*10465441SEvalZero #endif /* PPP_H */ 202