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