Home | History | Annotate | Download | only in net
      1 /*	$Id: ppp_defs.h,v 1.17 2002/12/06 09:49:15 paulus Exp $	*/
      2 
      3 /*
      4  * ppp_defs.h - PPP definitions.
      5  *
      6  * Copyright (c) 1984 Paul Mackerras. All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  *
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  *
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in
     17  *    the documentation and/or other materials provided with the
     18  *    distribution.
     19  *
     20  * 3. The name(s) of the authors of this software must not be used to
     21  *    endorse or promote products derived from this software without
     22  *    prior written permission.
     23  *
     24  * 4. Redistributions of any form whatsoever must retain the following
     25  *    acknowledgment:
     26  *    "This product includes software developed by Paul Mackerras
     27  *     <paulus (at) samba.org>".
     28  *
     29  * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
     30  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
     31  * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
     32  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     33  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
     34  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
     35  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     36  */
     37 
     38 #ifndef _PPP_DEFS_H_
     39 #define _PPP_DEFS_H_
     40 
     41 /*
     42  * The basic PPP frame.
     43  */
     44 #define PPP_HDRLEN	4	/* octets for standard ppp header */
     45 #define PPP_FCSLEN	2	/* octets for FCS */
     46 
     47 /*
     48  * Packet sizes
     49  *
     50  * Note - lcp shouldn't be allowed to negotiate stuff outside these
     51  *	  limits.  See lcp.h in the pppd directory.
     52  * (XXX - these constants should simply be shared by lcp.c instead
     53  *	  of living in lcp.h)
     54  */
     55 #define	PPP_MTU		1500	/* Default MTU (size of Info field) */
     56 #define PPP_MAXMTU	65535 - (PPP_HDRLEN + PPP_FCSLEN)
     57 #define PPP_MINMTU	64
     58 #define PPP_MRU		1500	/* default MRU = max length of info field */
     59 #define PPP_MAXMRU	65000	/* Largest MRU we allow */
     60 #define PPP_MINMRU	128
     61 
     62 #define PPP_ADDRESS(p)	(((u_char *)(p))[0])
     63 #define PPP_CONTROL(p)	(((u_char *)(p))[1])
     64 #define PPP_PROTOCOL(p)	((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3])
     65 
     66 /*
     67  * Significant octet values.
     68  */
     69 #define	PPP_ALLSTATIONS	0xff	/* All-Stations broadcast address */
     70 #define	PPP_UI		0x03	/* Unnumbered Information */
     71 #define	PPP_FLAG	0x7e	/* Flag Sequence */
     72 #define	PPP_ESCAPE	0x7d	/* Asynchronous Control Escape */
     73 #define	PPP_TRANS	0x20	/* Asynchronous transparency modifier */
     74 
     75 /*
     76  * Protocol field values.
     77  */
     78 #define PPP_IP		0x21	/* Internet Protocol */
     79 #define PPP_AT		0x29	/* AppleTalk Protocol */
     80 #define PPP_IPX		0x2b	/* IPX protocol */
     81 #define	PPP_VJC_COMP	0x2d	/* VJ compressed TCP */
     82 #define	PPP_VJC_UNCOMP	0x2f	/* VJ uncompressed TCP */
     83 #define PPP_IPV6	0x57	/* Internet Protocol Version 6 */
     84 #define PPP_COMP	0xfd	/* compressed packet */
     85 #define PPP_IPCP	0x8021	/* IP Control Protocol */
     86 #define PPP_ATCP	0x8029	/* AppleTalk Control Protocol */
     87 #define PPP_IPXCP	0x802b	/* IPX Control Protocol */
     88 #define PPP_IPV6CP	0x8057	/* IPv6 Control Protocol */
     89 #define PPP_CCP		0x80fd	/* Compression Control Protocol */
     90 #define PPP_ECP		0x8053	/* Encryption Control Protocol */
     91 #define PPP_LCP		0xc021	/* Link Control Protocol */
     92 #define PPP_PAP		0xc023	/* Password Authentication Protocol */
     93 #define PPP_LQR		0xc025	/* Link Quality Report protocol */
     94 #define PPP_CHAP	0xc223	/* Cryptographic Handshake Auth. Protocol */
     95 #define PPP_CBCP	0xc029	/* Callback Control Protocol */
     96 #define PPP_EAP		0xc227	/* Extensible Authentication Protocol */
     97 
     98 /*
     99  * Values for FCS calculations.
    100  */
    101 #define PPP_INITFCS	0xffff	/* Initial FCS value */
    102 #define PPP_GOODFCS	0xf0b8	/* Good final FCS value */
    103 #define PPP_FCS(fcs, c)	(((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
    104 
    105 /*
    106  * A 32-bit unsigned integral type.
    107  */
    108 
    109 #if !defined(__BIT_TYPES_DEFINED__) && !defined(_BITYPES) \
    110  && !defined(__FreeBSD__) && (NS_TARGET < 40)
    111 #ifdef	UINT32_T
    112 typedef UINT32_T	u_int32_t;
    113 #else
    114 typedef unsigned int	u_int32_t;
    115 typedef unsigned short  u_int16_t;
    116 #endif
    117 #endif
    118 
    119 /*
    120  * Extended asyncmap - allows any character to be escaped.
    121  */
    122 typedef u_int32_t	ext_accm[8];
    123 
    124 /*
    125  * What to do with network protocol (NP) packets.
    126  */
    127 enum NPmode {
    128     NPMODE_PASS,		/* pass the packet through */
    129     NPMODE_DROP,		/* silently drop the packet */
    130     NPMODE_ERROR,		/* return an error */
    131     NPMODE_QUEUE		/* save it up for later. */
    132 };
    133 
    134 /*
    135  * Statistics.
    136  */
    137 struct pppstat	{
    138     unsigned int ppp_ibytes;	/* bytes received */
    139     unsigned int ppp_ipackets;	/* packets received */
    140     unsigned int ppp_ierrors;	/* receive errors */
    141     unsigned int ppp_obytes;	/* bytes sent */
    142     unsigned int ppp_opackets;	/* packets sent */
    143     unsigned int ppp_oerrors;	/* transmit errors */
    144 };
    145 
    146 struct vjstat {
    147     unsigned int vjs_packets;	/* outbound packets */
    148     unsigned int vjs_compressed; /* outbound compressed packets */
    149     unsigned int vjs_searches;	/* searches for connection state */
    150     unsigned int vjs_misses;	/* times couldn't find conn. state */
    151     unsigned int vjs_uncompressedin; /* inbound uncompressed packets */
    152     unsigned int vjs_compressedin; /* inbound compressed packets */
    153     unsigned int vjs_errorin;	/* inbound unknown type packets */
    154     unsigned int vjs_tossed;	/* inbound packets tossed because of error */
    155 };
    156 
    157 struct ppp_stats {
    158     struct pppstat p;		/* basic PPP statistics */
    159     struct vjstat vj;		/* VJ header compression statistics */
    160 };
    161 
    162 struct compstat {
    163     unsigned int unc_bytes;	/* total uncompressed bytes */
    164     unsigned int unc_packets;	/* total uncompressed packets */
    165     unsigned int comp_bytes;	/* compressed bytes */
    166     unsigned int comp_packets;	/* compressed packets */
    167     unsigned int inc_bytes;	/* incompressible bytes */
    168     unsigned int inc_packets;	/* incompressible packets */
    169     unsigned int ratio;		/* recent compression ratio << 8 */
    170 };
    171 
    172 struct ppp_comp_stats {
    173     struct compstat c;		/* packet compression statistics */
    174     struct compstat d;		/* packet decompression statistics */
    175 };
    176 
    177 /*
    178  * The following structure records the time in seconds since
    179  * the last NP packet was sent or received.
    180  */
    181 struct ppp_idle {
    182     time_t xmit_idle;		/* time since last NP packet sent */
    183     time_t recv_idle;		/* time since last NP packet received */
    184 };
    185 
    186 #ifndef __P
    187 #ifdef __STDC__
    188 #define __P(x)	x
    189 #else
    190 #define __P(x)	()
    191 #endif
    192 #endif
    193 
    194 #endif /* _PPP_DEFS_H_ */
    195