xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/ppp-comp.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /*
2*53ee8cc1Swenshuai.xi  * ppp-comp.h - Definitions for doing PPP packet compression.
3*53ee8cc1Swenshuai.xi  *
4*53ee8cc1Swenshuai.xi  * Copyright (c) 1994 The Australian National University.
5*53ee8cc1Swenshuai.xi  * All rights reserved.
6*53ee8cc1Swenshuai.xi  *
7*53ee8cc1Swenshuai.xi  * Permission to use, copy, modify, and distribute this software and its
8*53ee8cc1Swenshuai.xi  * documentation is hereby granted, provided that the above copyright
9*53ee8cc1Swenshuai.xi  * notice appears in all copies.  This software is provided without any
10*53ee8cc1Swenshuai.xi  * warranty, express or implied. The Australian National University
11*53ee8cc1Swenshuai.xi  * makes no representations about the suitability of this software for
12*53ee8cc1Swenshuai.xi  * any purpose.
13*53ee8cc1Swenshuai.xi  *
14*53ee8cc1Swenshuai.xi  * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
15*53ee8cc1Swenshuai.xi  * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16*53ee8cc1Swenshuai.xi  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
17*53ee8cc1Swenshuai.xi  * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
18*53ee8cc1Swenshuai.xi  * OF SUCH DAMAGE.
19*53ee8cc1Swenshuai.xi  *
20*53ee8cc1Swenshuai.xi  * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
21*53ee8cc1Swenshuai.xi  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22*53ee8cc1Swenshuai.xi  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
23*53ee8cc1Swenshuai.xi  * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
24*53ee8cc1Swenshuai.xi  * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
25*53ee8cc1Swenshuai.xi  * OR MODIFICATIONS.
26*53ee8cc1Swenshuai.xi  *
27*53ee8cc1Swenshuai.xi  * $Id: ppp-comp.h,v 1.6 1997/11/27 06:04:44 paulus Exp $
28*53ee8cc1Swenshuai.xi  */
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi /*
31*53ee8cc1Swenshuai.xi  *  ==FILEVERSION 980319==
32*53ee8cc1Swenshuai.xi  *
33*53ee8cc1Swenshuai.xi  *  NOTE TO MAINTAINERS:
34*53ee8cc1Swenshuai.xi  *     If you modify this file at all, please set the above date.
35*53ee8cc1Swenshuai.xi  *     ppp-comp.h is shipped with a PPP distribution as well as with the kernel;
36*53ee8cc1Swenshuai.xi  *     if everyone increases the FILEVERSION number above, then scripts
37*53ee8cc1Swenshuai.xi  *     can do the right thing when deciding whether to install a new ppp-comp.h
38*53ee8cc1Swenshuai.xi  *     file.  Don't change the format of that line otherwise, so the
39*53ee8cc1Swenshuai.xi  *     installation script can recognize it.
40*53ee8cc1Swenshuai.xi  */
41*53ee8cc1Swenshuai.xi 
42*53ee8cc1Swenshuai.xi #ifndef _NET_PPP_COMP_H
43*53ee8cc1Swenshuai.xi #define _NET_PPP_COMP_H
44*53ee8cc1Swenshuai.xi 
45*53ee8cc1Swenshuai.xi struct module;
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi /*
48*53ee8cc1Swenshuai.xi  * The following symbols control whether we include code for
49*53ee8cc1Swenshuai.xi  * various compression methods.
50*53ee8cc1Swenshuai.xi  */
51*53ee8cc1Swenshuai.xi 
52*53ee8cc1Swenshuai.xi #ifndef DO_BSD_COMPRESS
53*53ee8cc1Swenshuai.xi #define DO_BSD_COMPRESS	1	/* by default, include BSD-Compress */
54*53ee8cc1Swenshuai.xi #endif
55*53ee8cc1Swenshuai.xi #ifndef DO_DEFLATE
56*53ee8cc1Swenshuai.xi #define DO_DEFLATE	1	/* by default, include Deflate */
57*53ee8cc1Swenshuai.xi #endif
58*53ee8cc1Swenshuai.xi #define DO_PREDICTOR_1	0
59*53ee8cc1Swenshuai.xi #define DO_PREDICTOR_2	0
60*53ee8cc1Swenshuai.xi 
61*53ee8cc1Swenshuai.xi /*
62*53ee8cc1Swenshuai.xi  * Structure giving methods for compression/decompression.
63*53ee8cc1Swenshuai.xi  */
64*53ee8cc1Swenshuai.xi 
65*53ee8cc1Swenshuai.xi struct compressor {
66*53ee8cc1Swenshuai.xi 	int	compress_proto;	/* CCP compression protocol number */
67*53ee8cc1Swenshuai.xi 
68*53ee8cc1Swenshuai.xi 	/* Allocate space for a compressor (transmit side) */
69*53ee8cc1Swenshuai.xi 	void	*(*comp_alloc) (unsigned char *options, int opt_len);
70*53ee8cc1Swenshuai.xi 
71*53ee8cc1Swenshuai.xi 	/* Free space used by a compressor */
72*53ee8cc1Swenshuai.xi 	void	(*comp_free) (void *state);
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi 	/* Initialize a compressor */
75*53ee8cc1Swenshuai.xi 	int	(*comp_init) (void *state, unsigned char *options,
76*53ee8cc1Swenshuai.xi 			      int opt_len, int unit, int opthdr, int debug);
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi 	/* Reset a compressor */
79*53ee8cc1Swenshuai.xi 	void	(*comp_reset) (void *state);
80*53ee8cc1Swenshuai.xi 
81*53ee8cc1Swenshuai.xi 	/* Compress a packet */
82*53ee8cc1Swenshuai.xi 	int     (*compress) (void *state, unsigned char *rptr,
83*53ee8cc1Swenshuai.xi 			      unsigned char *obuf, int isize, int osize);
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi 	/* Return compression statistics */
86*53ee8cc1Swenshuai.xi 	void	(*comp_stat) (void *state, struct compstat *stats);
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi 	/* Allocate space for a decompressor (receive side) */
89*53ee8cc1Swenshuai.xi 	void	*(*decomp_alloc) (unsigned char *options, int opt_len);
90*53ee8cc1Swenshuai.xi 
91*53ee8cc1Swenshuai.xi 	/* Free space used by a decompressor */
92*53ee8cc1Swenshuai.xi 	void	(*decomp_free) (void *state);
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi 	/* Initialize a decompressor */
95*53ee8cc1Swenshuai.xi 	int	(*decomp_init) (void *state, unsigned char *options,
96*53ee8cc1Swenshuai.xi 				int opt_len, int unit, int opthdr, int mru,
97*53ee8cc1Swenshuai.xi 				int debug);
98*53ee8cc1Swenshuai.xi 
99*53ee8cc1Swenshuai.xi 	/* Reset a decompressor */
100*53ee8cc1Swenshuai.xi 	void	(*decomp_reset) (void *state);
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi 	/* Decompress a packet. */
103*53ee8cc1Swenshuai.xi 	int	(*decompress) (void *state, unsigned char *ibuf, int isize,
104*53ee8cc1Swenshuai.xi 				unsigned char *obuf, int osize);
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi 	/* Update state for an incompressible packet received */
107*53ee8cc1Swenshuai.xi 	void	(*incomp) (void *state, unsigned char *ibuf, int icnt);
108*53ee8cc1Swenshuai.xi 
109*53ee8cc1Swenshuai.xi 	/* Return decompression statistics */
110*53ee8cc1Swenshuai.xi 	void	(*decomp_stat) (void *state, struct compstat *stats);
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi 	/* Used in locking compressor modules */
113*53ee8cc1Swenshuai.xi 	struct module *owner;
114*53ee8cc1Swenshuai.xi 	/* Extra skb space needed by the compressor algorithm */
115*53ee8cc1Swenshuai.xi 	unsigned int comp_extra;
116*53ee8cc1Swenshuai.xi };
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi /*
119*53ee8cc1Swenshuai.xi  * The return value from decompress routine is the length of the
120*53ee8cc1Swenshuai.xi  * decompressed packet if successful, otherwise DECOMP_ERROR
121*53ee8cc1Swenshuai.xi  * or DECOMP_FATALERROR if an error occurred.
122*53ee8cc1Swenshuai.xi  *
123*53ee8cc1Swenshuai.xi  * We need to make this distinction so that we can disable certain
124*53ee8cc1Swenshuai.xi  * useful functionality, namely sending a CCP reset-request as a result
125*53ee8cc1Swenshuai.xi  * of an error detected after decompression.  This is to avoid infringing
126*53ee8cc1Swenshuai.xi  * a patent held by Motorola.
127*53ee8cc1Swenshuai.xi  * Don't you just lurve software patents.
128*53ee8cc1Swenshuai.xi  */
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi #define DECOMP_ERROR		-1	/* error detected before decomp. */
131*53ee8cc1Swenshuai.xi #define DECOMP_FATALERROR	-2	/* error detected after decomp. */
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi /*
134*53ee8cc1Swenshuai.xi  * CCP codes.
135*53ee8cc1Swenshuai.xi  */
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi #define CCP_CONFREQ	1
138*53ee8cc1Swenshuai.xi #define CCP_CONFACK	2
139*53ee8cc1Swenshuai.xi #define CCP_TERMREQ	5
140*53ee8cc1Swenshuai.xi #define CCP_TERMACK	6
141*53ee8cc1Swenshuai.xi #define CCP_RESETREQ	14
142*53ee8cc1Swenshuai.xi #define CCP_RESETACK	15
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi /*
145*53ee8cc1Swenshuai.xi  * Max # bytes for a CCP option
146*53ee8cc1Swenshuai.xi  */
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi #define CCP_MAX_OPTION_LENGTH	32
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi /*
151*53ee8cc1Swenshuai.xi  * Parts of a CCP packet.
152*53ee8cc1Swenshuai.xi  */
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #define CCP_CODE(dp)		((dp)[0])
155*53ee8cc1Swenshuai.xi #define CCP_ID(dp)		((dp)[1])
156*53ee8cc1Swenshuai.xi #define CCP_LENGTH(dp)		(((dp)[2] << 8) + (dp)[3])
157*53ee8cc1Swenshuai.xi #define CCP_HDRLEN		4
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi #define CCP_OPT_CODE(dp)	((dp)[0])
160*53ee8cc1Swenshuai.xi #define CCP_OPT_LENGTH(dp)	((dp)[1])
161*53ee8cc1Swenshuai.xi #define CCP_OPT_MINLEN		2
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi /*
164*53ee8cc1Swenshuai.xi  * Definitions for BSD-Compress.
165*53ee8cc1Swenshuai.xi  */
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi #define CI_BSD_COMPRESS		21	/* config. option for BSD-Compress */
168*53ee8cc1Swenshuai.xi #define CILEN_BSD_COMPRESS	3	/* length of config. option */
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi /* Macros for handling the 3rd byte of the BSD-Compress config option. */
171*53ee8cc1Swenshuai.xi #define BSD_NBITS(x)		((x) & 0x1F)	/* number of bits requested */
172*53ee8cc1Swenshuai.xi #define BSD_VERSION(x)		((x) >> 5)	/* version of option format */
173*53ee8cc1Swenshuai.xi #define BSD_CURRENT_VERSION	1		/* current version number */
174*53ee8cc1Swenshuai.xi #define BSD_MAKE_OPT(v, n)	(((v) << 5) | (n))
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi #define BSD_MIN_BITS		9	/* smallest code size supported */
177*53ee8cc1Swenshuai.xi #define BSD_MAX_BITS		15	/* largest code size supported */
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi /*
180*53ee8cc1Swenshuai.xi  * Definitions for Deflate.
181*53ee8cc1Swenshuai.xi  */
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi #define CI_DEFLATE		26	/* config option for Deflate */
184*53ee8cc1Swenshuai.xi #define CI_DEFLATE_DRAFT	24	/* value used in original draft RFC */
185*53ee8cc1Swenshuai.xi #define CILEN_DEFLATE		4	/* length of its config option */
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi #define DEFLATE_MIN_SIZE	9
188*53ee8cc1Swenshuai.xi #define DEFLATE_MAX_SIZE	15
189*53ee8cc1Swenshuai.xi #define DEFLATE_METHOD_VAL	8
190*53ee8cc1Swenshuai.xi #define DEFLATE_SIZE(x)		(((x) >> 4) + 8)
191*53ee8cc1Swenshuai.xi #define DEFLATE_METHOD(x)	((x) & 0x0F)
192*53ee8cc1Swenshuai.xi #define DEFLATE_MAKE_OPT(w)	((((w) - 8) << 4) + DEFLATE_METHOD_VAL)
193*53ee8cc1Swenshuai.xi #define DEFLATE_CHK_SEQUENCE	0
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi /*
196*53ee8cc1Swenshuai.xi  * Definitions for MPPE.
197*53ee8cc1Swenshuai.xi  */
198*53ee8cc1Swenshuai.xi 
199*53ee8cc1Swenshuai.xi #define CI_MPPE                18      /* config option for MPPE */
200*53ee8cc1Swenshuai.xi #define CILEN_MPPE              6      /* length of config option */
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi /*
203*53ee8cc1Swenshuai.xi  * Definitions for other, as yet unsupported, compression methods.
204*53ee8cc1Swenshuai.xi  */
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi #define CI_PREDICTOR_1		1	/* config option for Predictor-1 */
207*53ee8cc1Swenshuai.xi #define CILEN_PREDICTOR_1	2	/* length of its config option */
208*53ee8cc1Swenshuai.xi #define CI_PREDICTOR_2		2	/* config option for Predictor-2 */
209*53ee8cc1Swenshuai.xi #define CILEN_PREDICTOR_2	2	/* length of its config option */
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi #endif /* _NET_PPP_COMP_H */
213