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
21namespace openvpn {
22
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)
std::uint8_t tos
Definition ip4.hpp:44
std::uint8_t ttl
Definition ip4.hpp:55
std::uint8_t protocol
Definition ip4.hpp:57
static unsigned int length(const std::uint8_t version_len)
Definition ip4.hpp:25
static bool is_df_set(const unsigned char *data)
Definition ip4.hpp:36
std::uint32_t daddr
Definition ip4.hpp:61
std::uint8_t version_len
Definition ip4.hpp:42
std::uint16_t check
Definition ip4.hpp:59
std::uint16_t frag_off
Definition ip4.hpp:53
std::uint16_t id
Definition ip4.hpp:46
static std::uint8_t ver_len(const unsigned int version, const unsigned int len)
Definition ip4.hpp:30
std::uint16_t tot_len
Definition ip4.hpp:45
std::uint32_t saddr
Definition ip4.hpp:60