18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * ppp-comp.h - Definitions for doing PPP packet compression. 38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (c) 1984 Paul Mackerras. All rights reserved. 58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Redistribution and use in source and binary forms, with or without 78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * modification, are permitted provided that the following conditions 88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * are met: 98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * notice, this list of conditions and the following disclaimer. 128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * notice, this list of conditions and the following disclaimer in 158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * the documentation and/or other materials provided with the 168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * distribution. 178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3. The name(s) of the authors of this software must not be used to 198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * endorse or promote products derived from this software without 208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * prior written permission. 218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 4. Redistributions of any form whatsoever must retain the following 238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * acknowledgment: 248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * "This product includes software developed by Paul Mackerras 258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * <paulus@samba.org>". 268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO 288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY 308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * $Id: ppp-comp.h,v 1.13 2002/12/06 09:49:15 paulus Exp $ 368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#ifndef _NET_PPP_COMP_H 398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define _NET_PPP_COMP_H 408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * The following symbols control whether we include code for 438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * various compression methods. 448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#ifndef DO_BSD_COMPRESS 468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DO_BSD_COMPRESS 1 /* by default, include BSD-Compress */ 478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#endif 488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#ifndef DO_DEFLATE 498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DO_DEFLATE 1 /* by default, include Deflate */ 508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#endif 518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DO_PREDICTOR_1 0 528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DO_PREDICTOR_2 0 538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Structure giving methods for compression/decompression. 568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#ifdef PACKETPTR 588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstruct compressor { 598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int compress_proto; /* CCP compression protocol number */ 608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Allocate space for a compressor (transmit side) */ 628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void *(*comp_alloc) __P((u_char *options, int opt_len)); 638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Free space used by a compressor */ 648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*comp_free) __P((void *state)); 658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Initialize a compressor */ 668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int (*comp_init) __P((void *state, u_char *options, int opt_len, 678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int unit, int hdrlen, int debug)); 688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Reset a compressor */ 698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*comp_reset) __P((void *state)); 708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Compress a packet */ 718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int (*compress) __P((void *state, PACKETPTR *mret, 728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project PACKETPTR mp, int orig_len, int max_len)); 738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Return compression statistics */ 748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*comp_stat) __P((void *state, struct compstat *stats)); 758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Allocate space for a decompressor (receive side) */ 778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void *(*decomp_alloc) __P((u_char *options, int opt_len)); 788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Free space used by a decompressor */ 798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*decomp_free) __P((void *state)); 808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Initialize a decompressor */ 818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int (*decomp_init) __P((void *state, u_char *options, int opt_len, 828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int unit, int hdrlen, int mru, int debug)); 838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Reset a decompressor */ 848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*decomp_reset) __P((void *state)); 858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Decompress a packet. */ 868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int (*decompress) __P((void *state, PACKETPTR mp, 878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project PACKETPTR *dmpp)); 888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Update state for an incompressible packet received */ 898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*incomp) __P((void *state, PACKETPTR mp)); 908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Return decompression statistics */ 918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project void (*decomp_stat) __P((void *state, struct compstat *stats)); 928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}; 938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#endif /* PACKETPTR */ 948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Return values for decompress routine. 978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * We need to make these distinctions so that we can disable certain 988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * useful functionality, namely sending a CCP reset-request as a result 998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * of an error detected after decompression. This is to avoid infringing 1008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * a patent held by Motorola. 1018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Don't you just lurve software patents. 1028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DECOMP_OK 0 /* everything went OK */ 1048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DECOMP_ERROR 1 /* error detected before decomp. */ 1058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DECOMP_FATALERROR 2 /* error detected after decomp. */ 1068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * CCP codes. 1098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_CONFREQ 1 1118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_CONFACK 2 1128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_TERMREQ 5 1138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_TERMACK 6 1148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_RESETREQ 14 1158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_RESETACK 15 1168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Max # bytes for a CCP option 1198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_MAX_OPTION_LENGTH 32 1218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Parts of a CCP packet. 1248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_CODE(dp) ((dp)[0]) 1268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_ID(dp) ((dp)[1]) 1278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_LENGTH(dp) (((dp)[2] << 8) + (dp)[3]) 1288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_HDRLEN 4 1298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_OPT_CODE(dp) ((dp)[0]) 1318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_OPT_LENGTH(dp) ((dp)[1]) 1328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CCP_OPT_MINLEN 2 1338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Definitions for BSD-Compress. 1368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_BSD_COMPRESS 21 /* config. option for BSD-Compress */ 1388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CILEN_BSD_COMPRESS 3 /* length of config. option */ 1398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* Macros for handling the 3rd byte of the BSD-Compress config option. */ 1418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define BSD_NBITS(x) ((x) & 0x1F) /* number of bits requested */ 1428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define BSD_VERSION(x) ((x) >> 5) /* version of option format */ 1438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define BSD_CURRENT_VERSION 1 /* current version number */ 1448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define BSD_MAKE_OPT(v, n) (((v) << 5) | (n)) 1458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define BSD_MIN_BITS 9 /* smallest code size supported */ 1478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define BSD_MAX_BITS 15 /* largest code size supported */ 1488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Definitions for Deflate. 1518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_DEFLATE 26 /* config option for Deflate */ 1538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_DEFLATE_DRAFT 24 /* value used in original draft RFC */ 1548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CILEN_DEFLATE 4 /* length of its config option */ 1558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_MIN_SIZE 8 1578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_MAX_SIZE 15 1588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_METHOD_VAL 8 1598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_SIZE(x) (((x) >> 4) + DEFLATE_MIN_SIZE) 1608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_METHOD(x) ((x) & 0x0F) 1618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_MAKE_OPT(w) ((((w) - DEFLATE_MIN_SIZE) << 4) \ 1628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project + DEFLATE_METHOD_VAL) 1638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define DEFLATE_CHK_SEQUENCE 0 1648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Definitions for MPPE. 1678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_MPPE 18 /* config option for MPPE */ 1698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CILEN_MPPE 6 /* length of config option */ 1708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_PAD 4 /* MPPE growth per frame */ 1728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ 1738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* option bits for ccp_options.mppe */ 1758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_40 0x01 /* 40 bit */ 1768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_128 0x02 /* 128 bit */ 1778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_STATEFUL 0x04 /* stateful mode */ 1788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* unsupported opts */ 1798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_56 0x08 /* 56 bit */ 1808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_MPPC 0x10 /* MPPC compression */ 1818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_D 0x20 /* Unknown */ 1828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) 1838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set */ 1848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * This is not nice ... the alternative is a bitfield struct though. 1878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * And unfortunately, we cannot share the same bits for the option 1888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * names above since C and H are the same bit. We could do a u_int32 1898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * but then we have to do a htonl() all the time and/or we still need 1908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * to know which octet is which. 1918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_C_BIT 0x01 /* MPPC */ 1938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */ 1948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_L_BIT 0x20 /* 40-bit */ 1958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_S_BIT 0x40 /* 128-bit */ 1968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_M_BIT 0x80 /* 56-bit, not supported */ 1978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) */ 1988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* Does not include H bit; used for least significant octet only. */ 2008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) 2018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* Build a CI from mppe opts (see RFC 3078) */ 2038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_OPTS_TO_CI(opts, ci) \ 2048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project do { \ 2058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project u_char *ptr = ci; /* u_char[4] */ \ 2068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* H bit */ \ 2088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (opts & MPPE_OPT_STATEFUL) \ 2098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr++ = 0x0; \ 2108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else \ 2118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr++ = MPPE_H_BIT; \ 2128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr++ = 0; \ 2138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr++ = 0; \ 2148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* S,L bits */ \ 2168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr = 0; \ 2178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (opts & MPPE_OPT_128) \ 2188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr |= MPPE_S_BIT; \ 2198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (opts & MPPE_OPT_40) \ 2208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ptr |= MPPE_L_BIT; \ 2218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* M,D,C bits not supported */ \ 2228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } while (/* CONSTCOND */ 0) 2238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* The reverse of the above */ 2258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define MPPE_CI_TO_OPTS(ci, opts) \ 2268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project do { \ 2278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project u_char *ptr = ci; /* u_char[4] */ \ 2288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts = 0; \ 2308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* H bit */ \ 2328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (!(ptr[0] & MPPE_H_BIT)) \ 2338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_STATEFUL; \ 2348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* S,L bits */ \ 2368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[3] & MPPE_S_BIT) \ 2378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_128; \ 2388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[3] & MPPE_L_BIT) \ 2398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_40; \ 2408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* M,D,C bits */ \ 2428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[3] & MPPE_M_BIT) \ 2438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_56; \ 2448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[3] & MPPE_D_BIT) \ 2458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_D; \ 2468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[3] & MPPE_C_BIT) \ 2478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_MPPC; \ 2488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project \ 2498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* Other bits */ \ 2508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[0] & ~MPPE_H_BIT) \ 2518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_UNKNOWN; \ 2528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[1] || ptr[2]) \ 2538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_UNKNOWN; \ 2548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (ptr[3] & ~MPPE_ALL_BITS) \ 2558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project opts |= MPPE_OPT_UNKNOWN; \ 2568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } while (/* CONSTCOND */ 0) 2578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 2598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Definitions for other, as yet unsupported, compression methods. 2608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 2618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_PREDICTOR_1 1 /* config option for Predictor-1 */ 2628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CILEN_PREDICTOR_1 2 /* length of its config option */ 2638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CI_PREDICTOR_2 2 /* config option for Predictor-2 */ 2648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define CILEN_PREDICTOR_2 2 /* length of its config option */ 2658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#endif /* _NET_PPP_COMP_H */ 267