OpenVPN 3 Core Library
Loading...
Searching...
No Matches
frame_init.hpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12// Method to generate a Frame object for typical OpenVPN usage
13
14#ifndef OPENVPN_FRAME_FRAME_INIT_H
15#define OPENVPN_FRAME_FRAME_INIT_H
16
17#include <algorithm>
18
20
21namespace openvpn {
22
23inline Frame::Ptr frame_init(const bool align_adjust_3_1,
24 const size_t tun_mtu_max,
25 const size_t control_channel_payload,
26 const bool verbose)
27{
28 const size_t payload = std::max(tun_mtu_max + 512, size_t(2048));
29 const size_t headroom = 512;
30 const size_t tailroom = 512;
31 const size_t align_block = 16;
32 const unsigned int buffer_flags = 0;
33
34 Frame::Ptr frame(new Frame(Frame::Context(headroom, payload, tailroom, 0, align_block, buffer_flags)));
35 if (align_adjust_3_1)
36 {
37 (*frame)[Frame::READ_LINK_TCP] = Frame::Context(headroom, payload, tailroom, 3, align_block, buffer_flags);
38 (*frame)[Frame::READ_LINK_UDP] = Frame::Context(headroom, payload, tailroom, 1, align_block, buffer_flags);
39 }
41 std::min(control_channel_payload, payload),
42 tailroom,
43 0,
44 align_block,
45 buffer_flags);
46 (*frame)[Frame::WRITE_SSL_CLEARTEXT] = Frame::Context(headroom,
47 payload,
48 tailroom,
49 0,
50 align_block,
52 frame->standardize_capacity(~0);
53
54 if (verbose)
55 OPENVPN_LOG("Frame=" << headroom << '/' << payload << '/' << tailroom
56 << " mssfix-ctrl=" << (*frame)[Frame::READ_BIO_MEMQ_STREAM].payload());
57
58 return frame;
59}
60
61inline Frame::Context frame_init_context_simple(const size_t payload)
62{
63 const size_t headroom = 512;
64 const size_t tailroom = 512;
65 const size_t align_block = 16;
66 const unsigned int buffer_flags = 0;
67 return Frame::Context(headroom, payload, tailroom, 0, align_block, buffer_flags);
68}
69
70inline Frame::Ptr frame_init_simple(const size_t payload)
71{
72 Frame::Ptr frame = new Frame(frame_init_context_simple(payload));
73 frame->standardize_capacity(~0);
74 return frame;
75}
76
77} // namespace openvpn
78
79#endif // OPENVPN_FRAME_FRAME_INIT_H
void standardize_capacity(const unsigned int context_mask)
Definition frame.hpp:297
@ WRITE_SSL_CLEARTEXT
Definition frame.hpp:44
@ READ_BIO_MEMQ_STREAM
Definition frame.hpp:41
#define OPENVPN_LOG(args)
Support deferred server-side state creation when client connects.
Definition ovpncli.cpp:95
Frame::Ptr frame_init_simple(const size_t payload)
Frame::Context frame_init_context_simple(const size_t payload)
Frame::Ptr frame_init(const bool align_adjust_3_1, const size_t tun_mtu_max, const size_t control_channel_payload, const bool verbose)
@ GROW
if enabled, buffer will grow (otherwise buffer_full exception will be thrown)
Definition buffer.hpp:872
static bool verbose
Definition test_ip.cpp:31