1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * ppp-comp.h - Definitions for doing PPP packet compression. 41da177e4SLinus Torvalds * 5784db3f0SPaul Mackerras * Copyright 1994-1998 Paul Mackerras. 61da177e4SLinus Torvalds */ 71da177e4SLinus Torvalds #ifndef _NET_PPP_COMP_H 81da177e4SLinus Torvalds #define _NET_PPP_COMP_H 91da177e4SLinus Torvalds 10607ca46eSDavid Howells #include <uapi/linux/ppp-comp.h> 11607ca46eSDavid Howells 12*5f10376bSJakub Kicinski struct compstat; 131da177e4SLinus Torvalds struct module; 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds /* 161da177e4SLinus Torvalds * The following symbols control whether we include code for 171da177e4SLinus Torvalds * various compression methods. 181da177e4SLinus Torvalds */ 191da177e4SLinus Torvalds 201da177e4SLinus Torvalds #ifndef DO_BSD_COMPRESS 211da177e4SLinus Torvalds #define DO_BSD_COMPRESS 1 /* by default, include BSD-Compress */ 221da177e4SLinus Torvalds #endif 231da177e4SLinus Torvalds #ifndef DO_DEFLATE 241da177e4SLinus Torvalds #define DO_DEFLATE 1 /* by default, include Deflate */ 251da177e4SLinus Torvalds #endif 261da177e4SLinus Torvalds #define DO_PREDICTOR_1 0 271da177e4SLinus Torvalds #define DO_PREDICTOR_2 0 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds /* 301da177e4SLinus Torvalds * Structure giving methods for compression/decompression. 311da177e4SLinus Torvalds */ 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds struct compressor { 341da177e4SLinus Torvalds int compress_proto; /* CCP compression protocol number */ 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds /* Allocate space for a compressor (transmit side) */ 371da177e4SLinus Torvalds void *(*comp_alloc) (unsigned char *options, int opt_len); 381da177e4SLinus Torvalds 391da177e4SLinus Torvalds /* Free space used by a compressor */ 401da177e4SLinus Torvalds void (*comp_free) (void *state); 411da177e4SLinus Torvalds 421da177e4SLinus Torvalds /* Initialize a compressor */ 431da177e4SLinus Torvalds int (*comp_init) (void *state, unsigned char *options, 441da177e4SLinus Torvalds int opt_len, int unit, int opthdr, int debug); 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds /* Reset a compressor */ 471da177e4SLinus Torvalds void (*comp_reset) (void *state); 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds /* Compress a packet */ 501da177e4SLinus Torvalds int (*compress) (void *state, unsigned char *rptr, 511da177e4SLinus Torvalds unsigned char *obuf, int isize, int osize); 521da177e4SLinus Torvalds 531da177e4SLinus Torvalds /* Return compression statistics */ 541da177e4SLinus Torvalds void (*comp_stat) (void *state, struct compstat *stats); 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds /* Allocate space for a decompressor (receive side) */ 571da177e4SLinus Torvalds void *(*decomp_alloc) (unsigned char *options, int opt_len); 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds /* Free space used by a decompressor */ 601da177e4SLinus Torvalds void (*decomp_free) (void *state); 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds /* Initialize a decompressor */ 631da177e4SLinus Torvalds int (*decomp_init) (void *state, unsigned char *options, 641da177e4SLinus Torvalds int opt_len, int unit, int opthdr, int mru, 651da177e4SLinus Torvalds int debug); 661da177e4SLinus Torvalds 671da177e4SLinus Torvalds /* Reset a decompressor */ 681da177e4SLinus Torvalds void (*decomp_reset) (void *state); 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds /* Decompress a packet. */ 711da177e4SLinus Torvalds int (*decompress) (void *state, unsigned char *ibuf, int isize, 721da177e4SLinus Torvalds unsigned char *obuf, int osize); 731da177e4SLinus Torvalds 741da177e4SLinus Torvalds /* Update state for an incompressible packet received */ 751da177e4SLinus Torvalds void (*incomp) (void *state, unsigned char *ibuf, int icnt); 761da177e4SLinus Torvalds 771da177e4SLinus Torvalds /* Return decompression statistics */ 781da177e4SLinus Torvalds void (*decomp_stat) (void *state, struct compstat *stats); 791da177e4SLinus Torvalds 801da177e4SLinus Torvalds /* Used in locking compressor modules */ 811da177e4SLinus Torvalds struct module *owner; 82b3f9b92aSMatt Domsch /* Extra skb space needed by the compressor algorithm */ 83b3f9b92aSMatt Domsch unsigned int comp_extra; 841da177e4SLinus Torvalds }; 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds /* 871da177e4SLinus Torvalds * The return value from decompress routine is the length of the 881da177e4SLinus Torvalds * decompressed packet if successful, otherwise DECOMP_ERROR 891da177e4SLinus Torvalds * or DECOMP_FATALERROR if an error occurred. 901da177e4SLinus Torvalds * 911da177e4SLinus Torvalds * We need to make this distinction so that we can disable certain 921da177e4SLinus Torvalds * useful functionality, namely sending a CCP reset-request as a result 931da177e4SLinus Torvalds * of an error detected after decompression. This is to avoid infringing 941da177e4SLinus Torvalds * a patent held by Motorola. 951da177e4SLinus Torvalds * Don't you just lurve software patents. 961da177e4SLinus Torvalds */ 971da177e4SLinus Torvalds 981da177e4SLinus Torvalds #define DECOMP_ERROR -1 /* error detected before decomp. */ 991da177e4SLinus Torvalds #define DECOMP_FATALERROR -2 /* error detected after decomp. */ 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds extern int ppp_register_compressor(struct compressor *); 1021da177e4SLinus Torvalds extern void ppp_unregister_compressor(struct compressor *); 1031da177e4SLinus Torvalds #endif /* _NET_PPP_COMP_H */ 104