OpenVPN 3 Core Library
Loading...
Searching...
No Matches
ip4.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
// IPv4 header
13
14
#pragma once
15
16
#include <cstdint>
// for std::uint32_t, uint16_t, uint8_t
17
18
#pragma pack(push)
19
#pragma pack(1)
20
21
namespace
openvpn
{
22
23
struct
IPv4Header
24
{
25
static
unsigned
int
length
(
const
std::uint8_t
version_len
)
26
{
27
return
(
version_len
& 0x0F) << 2;
28
}
29
30
static
std::uint8_t
ver_len
(
const
unsigned
int
version,
31
const
unsigned
int
len)
32
{
33
return
static_cast<
uint8_t
>
(((len >> 2) & 0x0F) | (version & 0x0F) << 4);
34
}
35
36
static
bool
is_df_set
(
const
unsigned
char
*data)
37
{
38
auto
*hdr =
reinterpret_cast<
const
IPv4Header
*
>
(data);
39
return
ntohs(hdr->frag_off) &
IPv4Header::DF
;
40
}
41
42
std::uint8_t
version_len
;
43
44
std::uint8_t
tos
;
45
std::uint16_t
tot_len
;
46
std::uint16_t
id
;
47
48
enum
49
{
50
OFFMASK
= 0x1fff,
51
DF
= 0x4000,
52
};
53
std::uint16_t
frag_off
;
54
55
std::uint8_t
ttl
;
56
57
std::uint8_t
protocol
;
58
59
std::uint16_t
check
;
60
std::uint32_t
saddr
;
61
std::uint32_t
daddr
;
62
/* The options start here. */
63
};
64
}
// namespace openvpn
65
66
#pragma pack(pop)
openvpn
Definition
ovpncli.cpp:97
openvpn::IPv4Header
Definition
ip4.hpp:24
openvpn::IPv4Header::tos
std::uint8_t tos
Definition
ip4.hpp:44
openvpn::IPv4Header::ttl
std::uint8_t ttl
Definition
ip4.hpp:55
openvpn::IPv4Header::protocol
std::uint8_t protocol
Definition
ip4.hpp:57
openvpn::IPv4Header::length
static unsigned int length(const std::uint8_t version_len)
Definition
ip4.hpp:25
openvpn::IPv4Header::is_df_set
static bool is_df_set(const unsigned char *data)
Definition
ip4.hpp:36
openvpn::IPv4Header::daddr
std::uint32_t daddr
Definition
ip4.hpp:61
openvpn::IPv4Header::version_len
std::uint8_t version_len
Definition
ip4.hpp:42
openvpn::IPv4Header::check
std::uint16_t check
Definition
ip4.hpp:59
openvpn::IPv4Header::frag_off
std::uint16_t frag_off
Definition
ip4.hpp:53
openvpn::IPv4Header::id
std::uint16_t id
Definition
ip4.hpp:46
openvpn::IPv4Header::DF
@ DF
Definition
ip4.hpp:51
openvpn::IPv4Header::OFFMASK
@ OFFMASK
Definition
ip4.hpp:50
openvpn::IPv4Header::ver_len
static std::uint8_t ver_len(const unsigned int version, const unsigned int len)
Definition
ip4.hpp:30
openvpn::IPv4Header::tot_len
std::uint16_t tot_len
Definition
ip4.hpp:45
openvpn::IPv4Header::saddr
std::uint32_t saddr
Definition
ip4.hpp:60
openvpn
ip
ip4.hpp
Generated by
1.9.8