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
102
|
/*
* 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-2018 Fox Crypto B.V. <openvpn@fox-it.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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/**
* @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.
*/
|