1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
/*
* 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.
*
* Copyright (C) 2010-2026 Sentyron B.V. <openvpn@sentyron.com>
*
*
* 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.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see <https://www.gnu.org/licenses/>.
*/
/**
* @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.
*/
|