1 /* 2 * OpenVPN -- An application to securely tunnel IP networks 3 * over a single UDP port, with support for SSL/TLS-based 4 * session authentication and key exchange, 5 * packet encryption, packet authentication, and 6 * packet compression. 7 * 8 * Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 12 * as published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write to the Free Software Foundation, Inc., 21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22 */ 23 24 #ifndef OPENVPN_LZO_H 25 #define OPENVPN_LZO_H 26 27 28 /** 29 * @file 30 * Data Channel Compression module header file. 31 */ 32 33 34 #if defined(ENABLE_LZO) 35 36 /** 37 * @addtogroup compression 38 * @{ 39 */ 40 41 #if defined(HAVE_LZO_LZOUTIL_H) 42 #include <lzo/lzoutil.h> 43 #elif defined(HAVE_LZOUTIL_H) 44 #include <lzoutil.h> 45 #endif 46 #if defined(HAVE_LZO_LZO1X_H) 47 #include <lzo/lzo1x.h> 48 #elif defined(HAVE_LZO1X_H) 49 #include <lzo1x.h> 50 #endif 51 52 #include "buffer.h" 53 #include "mtu.h" 54 #include "common.h" 55 #include "status.h" 56 57 extern const struct compress_alg lzo_alg; 58 59 /**************************************************************************/ 60 /** @name LZO library interface defines *//** @{ *//***********************/ 61 #define LZO_COMPRESS lzo1x_1_15_compress 62 /**< LZO library compression function. 63 * 64 * Use \c lzo1x_1_15_compress because it 65 * is described as faster than the 66 * standard routine, although it does 67 * need a bit more memory. */ 68 #define LZO_WORKSPACE LZO1X_1_15_MEM_COMPRESS 69 /**< The size in bytes of the memory 70 * %buffer required by the LZO library 71 * compression algorithm. */ 72 #define LZO_DECOMPRESS lzo1x_decompress_safe 73 /**< LZO library decompression function. 74 * 75 * Use safe decompress because it 76 * includes checks for possible %buffer 77 * overflows. If speed is essential and 78 * you will always be using a MAC to 79 * verify the integrity of incoming 80 * packets, you might want to consider 81 * using the non-safe version. */ 82 /** @} name LZO library interface *//**************************************/ 83 84 85 /**************************************************************************/ 86 /** @name Adaptive compression defines *//** @{ *//************************/ 87 #define AC_SAMP_SEC 2 /**< Number of seconds in a sample period. */ 88 #define AC_MIN_BYTES 1000 /**< Minimum number of bytes a sample 89 * period must contain for it to be 90 * evaluated. */ 91 #define AC_SAVE_PCT 5 /**< Minimum size reduction percentage 92 * below which compression will be 93 * turned off. */ 94 #define AC_OFF_SEC 60 /**< Seconds to wait after compression has 95 * been turned off before retesting. */ 96 /** @} name Adaptive compression defines *//*******************************/ 97 98 /** 99 * Adaptive compression state. 100 */ 101 struct lzo_adaptive_compress { 102 bool compress_state; 103 time_t next; 104 int n_total; 105 int n_comp; 106 }; 107 108 109 /** 110 * State for the compression and decompression routines. 111 * 112 * This structure contains compression module state, such as whether 113 * compression is enabled and the status of the adaptive compression 114 * routines. It also contains an allocated working buffer. 115 * 116 * One of these compression workspace structures is maintained for each 117 * VPN tunnel. 118 */ 119 struct lzo_compress_workspace 120 { 121 lzo_voidp wmem; 122 int wmem_size; 123 struct lzo_adaptive_compress ac; 124 }; 125 126 /** @} addtogroup compression */ 127 128 129 #endif /* ENABLE_LZO && USE_COMP */ 130 #endif /* ifndef OPENVPN_LZO_H */ 131