OpenVPN
Data Channel Compression module

This module offers compression of data channel packets. More...

This module offers compression of data channel packets.

State structures
The Data Channel Compression module stores its internal state in a lzo_compress_workspace structure. This state includes flags which control the module's behavior and preallocated working memory. One such structure is present for each VPN tunnel, and is stored in the context.c2.lzo_compwork of the context associated with that VPN tunnel.
Initialization and cleanup
Every time a new lzo_compress_workspace is needed, it must be initialized using the lzo_compress_init() function. Similarly, every time a lzo_compress_workspace is no longer needed, it must be cleaned up using the lzo_compress_uninit() function. These functions take care of the allocation and freeing of internal working memory, but not of the lzo_compress_workspace structures themselves.
Because of the one-to-one relationship between lzo_compress_workspace structures and VPN tunnels, the above-mentioned initialization and cleanup functions are called directly from the init_instance() and close_instance() functions, which control the initialization and cleanup of VPN tunnel instances and their associated context structures.
Packet processing functions
This module receives data channel packets from the Data Channel Control module and processes them according to the settings of the packet's VPN tunnel. The Data Channel Control module uses the following interface functions:
  • For packets which will be sent to a remote OpenVPN peer: lzo_compress()
  • For packets which have been received from a remote OpenVPN peer: lzo_decompress()
Settings that control this module's activity
Whether or not the Data Channel Compression module is active depends on the compile-time ENABLE_LZO preprocessor macro and the runtime flags stored in lzo_compress_workspace.flags of the associated VPN tunnel. The latter are initialized from options.lzo, which gets its value from the process's configuration sources, such as its configuration file or command line options.
Adaptive compression
The compression module supports adaptive compression. If this feature is enabled, the compression routines monitor their own performance and turn compression on or off depending on whether it is leading to significantly reduced payload size.
Compression algorithms
This module uses the Lempel-Ziv-Oberhumer (LZO) compression algorithms. These offer lossless compression and are designed for high-performance decompression. This module uses the external lzo library's implementation of the algorithms.
For more information on the LZO library, see:
http://www.oberhumer.com/opensource/lzo/