📄 ppp-comp.h
字号:
/* * ppp-comp.h - Definitions for doing PPP packet compression. * * Copyright (c) 1984 Paul Mackerras. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name(s) of the authors of this software must not be used to * endorse or promote products derived from this software without * prior written permission. * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Paul Mackerras * <paulus@samba.org>". * * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * $Id: ppp-comp.h,v 1.10 2002/12/06 09:49:15 paulus Exp $ *//* * ==FILEVERSION 20020319== * * NOTE TO MAINTAINERS: * If you modify this file at all, please set the above date. * ppp-comp.h is shipped with a PPP distribution as well as with the kernel; * if everyone increases the FILEVERSION number above, then scripts * can do the right thing when deciding whether to install a new ppp-comp.h * file. Don't change the format of that line otherwise, so the * installation script can recognize it. */#ifndef _NET_PPP_COMP_H#define _NET_PPP_COMP_H/* * The following symbols control whether we include code for * various compression methods. */#ifndef DO_BSD_COMPRESS#define DO_BSD_COMPRESS 1 /* by default, include BSD-Compress */#endif#ifndef DO_DEFLATE#define DO_DEFLATE 1 /* by default, include Deflate */#endif#define DO_PREDICTOR_1 0#define DO_PREDICTOR_2 0/* * Structure giving methods for compression/decompression. */struct compressor { int compress_proto; /* CCP compression protocol number */ /* Allocate space for a compressor (transmit side) */ void *(*comp_alloc) (unsigned char *options, int opt_len); /* Free space used by a compressor */ void (*comp_free) (void *state); /* Initialize a compressor */ int (*comp_init) (void *state, unsigned char *options, int opt_len, int unit, int opthdr, int debug); /* Reset a compressor */ void (*comp_reset) (void *state); /* Compress a packet */ int (*compress) (void *state, unsigned char *rptr, unsigned char *obuf, int isize, int osize); /* Return compression statistics */ void (*comp_stat) (void *state, struct compstat *stats); /* Allocate space for a decompressor (receive side) */ void *(*decomp_alloc) (unsigned char *options, int opt_len); /* Free space used by a decompressor */ void (*decomp_free) (void *state); /* Initialize a decompressor */ int (*decomp_init) (void *state, unsigned char *options, int opt_len, int unit, int opthdr, int mru, int debug); /* Reset a decompressor */ void (*decomp_reset) (void *state); /* Decompress a packet. */ int (*decompress) (void *state, unsigned char *ibuf, int isize, unsigned char *obuf, int osize); /* Update state for an incompressible packet received */ void (*incomp) (void *state, unsigned char *ibuf, int icnt); /* Return decompression statistics */ void (*decomp_stat) (void *state, struct compstat *stats);};/* * The return value from decompress routine is the length of the * decompressed packet if successful, otherwise DECOMP_ERROR * or DECOMP_FATALERROR if an error occurred. * * We need to make this distinction so that we can disable certain * useful functionality, namely sending a CCP reset-request as a result * of an error detected after decompression. This is to avoid infringing * a patent held by Motorola. * Don't you just lurve software patents. */#define DECOMP_ERROR -1 /* error detected before decomp. */#define DECOMP_FATALERROR -2 /* error detected after decomp. *//* * CCP codes. */#define CCP_CONFREQ 1#define CCP_CONFACK 2#define CCP_TERMREQ 5#define CCP_TERMACK 6#define CCP_RESETREQ 14#define CCP_RESETACK 15/* * Max # bytes for a CCP option */#define CCP_MAX_OPTION_LENGTH 32/* * Parts of a CCP packet. */#define CCP_CODE(dp) ((dp)[0])#define CCP_ID(dp) ((dp)[1])#define CCP_LENGTH(dp) (((dp)[2] << 8) + (dp)[3])#define CCP_HDRLEN 4#define CCP_OPT_CODE(dp) ((dp)[0])#define CCP_OPT_LENGTH(dp) ((dp)[1])#define CCP_OPT_MINLEN 2/* * Definitions for BSD-Compress. */#define CI_BSD_COMPRESS 21 /* config. option for BSD-Compress */#define CILEN_BSD_COMPRESS 3 /* length of config. option *//* Macros for handling the 3rd byte of the BSD-Compress config option. */#define BSD_NBITS(x) ((x) & 0x1F) /* number of bits requested */#define BSD_VERSION(x) ((x) >> 5) /* version of option format */#define BSD_CURRENT_VERSION 1 /* current version number */#define BSD_MAKE_OPT(v, n) (((v) << 5) | (n))#define BSD_MIN_BITS 9 /* smallest code size supported */#define BSD_MAX_BITS 15 /* largest code size supported *//* * Definitions for Deflate. */#define CI_DEFLATE 26 /* config option for Deflate */#define CI_DEFLATE_DRAFT 24 /* value used in original draft RFC */#define CILEN_DEFLATE 4 /* length of its config option */#define DEFLATE_MIN_SIZE 8#define DEFLATE_MAX_SIZE 15#define DEFLATE_METHOD_VAL 8#define DEFLATE_SIZE(x) (((x) >> 4) + DEFLATE_MIN_SIZE)#define DEFLATE_METHOD(x) ((x) & 0x0F)#define DEFLATE_MAKE_OPT(w) ((((w) - DEFLATE_MIN_SIZE) << 4) \ + DEFLATE_METHOD_VAL)#define DEFLATE_CHK_SEQUENCE 0/* * Definitions for MPPE. */#define CI_MPPE 18 /* config option for MPPE */#define CILEN_MPPE 6 /* length of config option */#define MPPE_PAD 4 /* MPPE growth per frame */#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) *//* option bits for ccp_options.mppe */#define MPPE_OPT_40 0x01 /* 40 bit */#define MPPE_OPT_128 0x02 /* 128 bit */#define MPPE_OPT_STATEFUL 0x04 /* stateful mode *//* unsupported opts */#define MPPE_OPT_56 0x08 /* 56 bit */#define MPPE_OPT_MPPC 0x10 /* MPPC compression */#define MPPE_OPT_D 0x20 /* Unknown */#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D)#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set *//* * This is not nice ... the alternative is a bitfield struct though. * And unfortunately, we cannot share the same bits for the option * names above since C and H are the same bit. We could do a u_int32 * but then we have to do a htonl() all the time and/or we still need * to know which octet is which. */#define MPPE_C_BIT 0x01 /* MPPC */#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */#define MPPE_L_BIT 0x20 /* 40-bit */#define MPPE_S_BIT 0x40 /* 128-bit */#define MPPE_M_BIT 0x80 /* 56-bit, not supported */#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) *//* Does not include H bit; used for least significant octet only. */#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT)/* Build a CI from mppe opts (see RFC 3078) */#define MPPE_OPTS_TO_CI(opts, ci) \ do { \ u_char *ptr = ci; /* u_char[4] */ \ \ /* H bit */ \ if (opts & MPPE_OPT_STATEFUL) \ *ptr++ = 0x0; \ else \ *ptr++ = MPPE_H_BIT; \ *ptr++ = 0; \ *ptr++ = 0; \ \ /* S,L bits */ \ *ptr = 0; \ if (opts & MPPE_OPT_128) \ *ptr |= MPPE_S_BIT; \ if (opts & MPPE_OPT_40) \ *ptr |= MPPE_L_BIT; \ /* M,D,C bits not supported */ \ } while (/* CONSTCOND */ 0)/* The reverse of the above */#define MPPE_CI_TO_OPTS(ci, opts) \ do { \ u_char *ptr = ci; /* u_char[4] */ \ \ opts = 0; \ \ /* H bit */ \ if (!(ptr[0] & MPPE_H_BIT)) \ opts |= MPPE_OPT_STATEFUL; \ \ /* S,L bits */ \ if (ptr[3] & MPPE_S_BIT) \ opts |= MPPE_OPT_128; \ if (ptr[3] & MPPE_L_BIT) \ opts |= MPPE_OPT_40; \ \ /* M,D,C bits */ \ if (ptr[3] & MPPE_M_BIT) \ opts |= MPPE_OPT_56; \ if (ptr[3] & MPPE_D_BIT) \ opts |= MPPE_OPT_D; \ if (ptr[3] & MPPE_C_BIT) \ opts |= MPPE_OPT_MPPC; \ \ /* Other bits */ \ if (ptr[0] & ~MPPE_H_BIT) \ opts |= MPPE_OPT_UNKNOWN; \ if (ptr[1] || ptr[2]) \ opts |= MPPE_OPT_UNKNOWN; \ if (ptr[3] & ~MPPE_ALL_BITS) \ opts |= MPPE_OPT_UNKNOWN; \ } while (/* CONSTCOND */ 0)/* * Definitions for other, as yet unsupported, compression methods. */#define CI_PREDICTOR_1 1 /* config option for Predictor-1 */#define CILEN_PREDICTOR_1 2 /* length of its config option */#define CI_PREDICTOR_2 2 /* config option for Predictor-2 */#define CILEN_PREDICTOR_2 2 /* length of its config option */#ifdef __KERNEL__extern int ppp_register_compressor(struct compressor *);extern void ppp_unregister_compressor(struct compressor *);#endif /* __KERNEL__ */#endif /* _NET_PPP_COMP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -