doc/doxygen/doc_data_control.h
98619012
 /*
  *  OpenVPN -- An application to securely tunnel IP networks
  *             over a single TCP/UDP port, with support for SSL/TLS-based
  *             session authentication and key exchange,
  *             packet encryption, packet authentication, and
  *             packet compression.
  *
49979459
  *  Copyright (C) 2010-2018 Fox Crypto B.V. <openvpn@fox-it.com>
98619012
  *
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2
  *  as published by the Free Software Foundation.
  *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
caa54ac3
  *  You should have received a copy of the GNU General Public License along
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
98619012
  */
 
 /**
  * @file
  * Data Channel Control module documentation file.
  */
 
 /**
  * @defgroup data_control Data Channel Control module
  *
  * This module controls the processing of packets as they pass through the
  * data channel.
  *
  * The Data Channel Control module controls the processing of packets as
  * they pass through the data channel.  The processing includes packet
  * compression, fragmentation, and the performing of security operations
  * on the packets.  This module does not do the processing itself, but
  * passes the packet to other data channel modules to perform the
  * appropriate actions.
  *
  * Packets can travel in two directions through the data channel.  They
  * can be going to a remote destination which is reachable through a VPN
  * tunnel, in which case this module prepares them to be sent out through
  * a VPN tunnel.  On the other hand, they can have been received through a
  * VPN tunnel from a remote OpenVPN peer, in which case this module
  * retrieves the packet in its original form as it was before entering the
  * VPN tunnel on the remote OpenVPN peer.  How this module processes
  * packets traveling in the two directions is discussed in more detail
  * below.
  *
  * @par Packets to be sent to a remote OpenVPN peer
  * This module's main function for processing packets traveling in this
  * direction is \c encrypt_sign(), which performs the following processing
  * steps:
  * - Call the \link compression Data Channel Compression module\endlink to
  *   perform packet compression if necessary.
  * - Call the \link fragmentation Data Channel Fragmentation
  *   module\endlink to perform packet fragmentation if necessary.
  * - Call the \link data_crypto Data Channel Crypto module\endlink to
  *   perform the required security operations.
  *
  * @par
  * See the \c encrypt_sign() documentation for details of these
  * interactions.
  *
  * @par
  * After the above processing is complete, the packet is ready to be sent
  * to a remote OpenVPN peer as a VPN tunnel packet.  The actual sending of
  * the packet is handled by the \link external_multiplexer External
  * Multiplexer\endlink.
  *
  * @par Packets received from a remote OpenVPN peer
  * The function that controls how packets traveling in this direction are
  * processed is \c process_incoming_link().  That function, however, also
  * performs some of the tasks required for the \link external_multiplexer
  * External Multiplexer\endlink and is therefore listed as part of that
  * module, instead of here.
  *
  * @par
  * After the \c process_incoming_link() function has determined that a
  * received packet is a data channel packet, it performs the following
  * processing steps:
  * - Call the \link data_crypto Data Channel Crypto module\endlink to
  *   perform the required security operations.
  * - Call the \link fragmentation Data Channel Fragmentation
  *   module\endlink to perform packet reassembly if necessary.
  * - Call the \link compression Data Channel Compression module\endlink to
  *   perform packet decompression if necessary.
  *
  * @par
  * See the \c process_incoming_link() documentation for details of these
  * interactions.
  *
  * @par
  * After the above processing is complete, the packet is in its original
  * form again as it was received by the remote OpenVPN peer.  It can now
  * be routed further to its final destination.  If that destination is a
  * locally reachable host, then the \link internal_multiplexer Internal
  * Multiplexer\endlink will send it there.
  */