root/net/ppp-comp.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: ppp-comp.h,v 1.8 2002/09/13 00:12:07 deraadt Exp $    */
    2 
    3 /*
    4  * ppp-comp.h - Definitions for doing PPP packet compression.
    5  *
    6  * Copyright (c) 1989-2002 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@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 _NET_PPP_COMP_H_
   39 #define _NET_PPP_COMP_H_
   40 
   41 /*
   42  * The following symbols control whether we include code for
   43  * various compression methods.
   44  */
   45 #ifndef DO_BSD_COMPRESS
   46 #define DO_BSD_COMPRESS 1       /* by default, include BSD-Compress */
   47 #endif
   48 #ifndef DO_DEFLATE
   49 #define DO_DEFLATE      1       /* by default, include Deflate */
   50 #endif
   51 #define DO_PREDICTOR_1  0
   52 #define DO_PREDICTOR_2  0
   53 
   54 /*
   55  * Structure giving methods for compression/decompression.
   56  */
   57 #ifdef PACKETPTR
   58 struct compressor {
   59         int     compress_proto; /* CCP compression protocol number */
   60 
   61         /* Allocate space for a compressor (transmit side) */
   62         void    *(*comp_alloc)(u_char *options, int opt_len);
   63         /* Free space used by a compressor */
   64         void    (*comp_free)(void *state);
   65         /* Initialize a compressor */
   66         int     (*comp_init)(void *state, u_char *options, int opt_len,
   67                                   int unit, int hdrlen, int debug);
   68         /* Reset a compressor */
   69         void    (*comp_reset)(void *state);
   70         /* Compress a packet */
   71         int     (*compress)(void *state, PACKETPTR *mret,
   72                                  PACKETPTR mp, int orig_len, int max_len);
   73         /* Return compression statistics */
   74         void    (*comp_stat)(void *state, struct compstat *stats);
   75 
   76         /* Allocate space for a decompressor (receive side) */
   77         void    *(*decomp_alloc)(u_char *options, int opt_len);
   78         /* Free space used by a decompressor */
   79         void    (*decomp_free)(void *state);
   80         /* Initialize a decompressor */
   81         int     (*decomp_init)(void *state, u_char *options, int opt_len,
   82                                     int unit, int hdrlen, int mru, int debug);
   83         /* Reset a decompressor */
   84         void    (*decomp_reset)(void *state);
   85         /* Decompress a packet. */
   86         int     (*decompress)(void *state, PACKETPTR mp,
   87                                    PACKETPTR *dmpp);
   88         /* Update state for an incompressible packet received */
   89         void    (*incomp)(void *state, PACKETPTR mp);
   90         /* Return decompression statistics */
   91         void    (*decomp_stat)(void *state, struct compstat *stats);
   92 };
   93 #endif /* PACKETPTR */
   94 
   95 /*
   96  * Return values for decompress routine.
   97  * We need to make these distinctions so that we can disable certain
   98  * useful functionality, namely sending a CCP reset-request as a result
   99  * of an error detected after decompression.  This is to avoid infringing
  100  * a patent held by Motorola.
  101  * Don't you just lurve software patents.
  102  */
  103 #define DECOMP_OK               0       /* everything went OK */
  104 #define DECOMP_ERROR            1       /* error detected before decomp. */
  105 #define DECOMP_FATALERROR       2       /* error detected after decomp. */
  106 
  107 /*
  108  * CCP codes.
  109  */
  110 #define CCP_CONFREQ     1
  111 #define CCP_CONFACK     2
  112 #define CCP_TERMREQ     5
  113 #define CCP_TERMACK     6
  114 #define CCP_RESETREQ    14
  115 #define CCP_RESETACK    15
  116 
  117 /*
  118  * Max # bytes for a CCP option
  119  */
  120 #define CCP_MAX_OPTION_LENGTH   32
  121 
  122 /*
  123  * Parts of a CCP packet.
  124  */
  125 #define CCP_CODE(dp)            ((dp)[0])
  126 #define CCP_ID(dp)              ((dp)[1])
  127 #define CCP_LENGTH(dp)          (((dp)[2] << 8) + (dp)[3])
  128 #define CCP_HDRLEN              4
  129 
  130 #define CCP_OPT_CODE(dp)        ((dp)[0])
  131 #define CCP_OPT_LENGTH(dp)      ((dp)[1])
  132 #define CCP_OPT_MINLEN          2
  133 
  134 /*
  135  * Definitions for BSD-Compress.
  136  */
  137 #define CI_BSD_COMPRESS         21      /* config. option for BSD-Compress */
  138 #define CILEN_BSD_COMPRESS      3       /* length of config. option */
  139 
  140 /* Macros for handling the 3rd byte of the BSD-Compress config option. */
  141 #define BSD_NBITS(x)            ((x) & 0x1F)    /* number of bits requested */
  142 #define BSD_VERSION(x)          ((x) >> 5)      /* version of option format */
  143 #define BSD_CURRENT_VERSION     1               /* current version number */
  144 #define BSD_MAKE_OPT(v, n)      (((v) << 5) | (n))
  145 
  146 #define BSD_MIN_BITS            9       /* smallest code size supported */
  147 #define BSD_MAX_BITS            15      /* largest code size supported */
  148 
  149 /*
  150  * Definitions for Deflate.
  151  */
  152 #define CI_DEFLATE              26      /* config option for Deflate */
  153 #define CI_DEFLATE_DRAFT        24      /* value used in original draft RFC */
  154 #define CILEN_DEFLATE           4       /* length of its config option */
  155 
  156 #define DEFLATE_MIN_SIZE        8
  157 #define DEFLATE_MAX_SIZE        15
  158 #define DEFLATE_METHOD_VAL      8
  159 #define DEFLATE_SIZE(x)         (((x) >> 4) + DEFLATE_MIN_SIZE)
  160 #define DEFLATE_METHOD(x)       ((x) & 0x0F)
  161 #define DEFLATE_MAKE_OPT(w)     ((((w) - DEFLATE_MIN_SIZE) << 4) \
  162                                  + DEFLATE_METHOD_VAL)
  163 #define DEFLATE_CHK_SEQUENCE    0
  164 
  165 /*
  166  * Definitions for other, as yet unsupported, compression methods.
  167  */
  168 #define CI_PREDICTOR_1          1       /* config option for Predictor-1 */
  169 #define CILEN_PREDICTOR_1       2       /* length of its config option */
  170 #define CI_PREDICTOR_2          2       /* config option for Predictor-2 */
  171 #define CILEN_PREDICTOR_2       2       /* length of its config option */
  172 
  173 #endif /* _NET_PPP_COMP_H_ */

/* [<][>][^][v][top][bottom][index][help] */