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