VBVX 0.1.0
Header-only C++23 library for safe, zero-copy parsing of packet buffers.
Loading...
Searching...
No Matches
icmp4.hxx
Go to the documentation of this file.
1#pragma once
2
3#include <bit>
4#include <cstdint>
5#include <optional>
6
7#include "utils.hxx"
8
9namespace vbvx {
10
55
64struct [[gnu::packed]] ICMPv4Header {
65 uint8_t type;
66 uint8_t code;
67 uint16_t checksum_be;
68
69 constexpr auto type_u8() const noexcept -> uint8_t { return type; }
70 constexpr auto code_u8() const noexcept -> uint8_t { return code; }
71
72 constexpr auto checksum() const noexcept -> uint16_t {
73 return autoswap(checksum_be);
74 }
75
76 constexpr auto type_known() const noexcept -> std::optional<ICMPv4Type> {
77 using enum ICMPv4Type;
78
79 switch (type) {
80 case 0: return EchoReply;
81 case 3: return DestinationUnreachable;
82 case 4: return SourceQuench;
83 case 5: return Redirect;
84 case 6: return AlternateHostAddress;
85 case 8: return EchoRequest;
86 case 9: return RouterAdvertisement;
87 case 10: return RouterSolicitation;
88 case 11: return TimeExceeded;
89 case 12: return ParameterProblem;
90 case 13: return Timestamp;
91 case 14: return TimestampReply;
92 case 15: return InformationRequest;
93 case 16: return InformationReply;
94 case 17: return AddressMaskRequest;
95 case 18: return AddressMaskReply;
96 case 19: return ReservedForSecurity;
97 case 30: return Traceroute;
98 case 31: return DatagramConversionError;
99 case 32: return MobileHostRedirect;
100 case 33: return IPv6WhereAreYou;
101 case 34: return IPv6IamHere;
102 case 35: return MobileRegistrationRequest;
103 case 36: return MobileRegistrationReply;
104 case 37: return DomainNameRequest;
105 case 38: return DomainNameReply;
106 case 39: return SKIP;
107 case 40: return Photuris;
108 case 41: return MobilityExperimental;
109 case 42: return ExtendedEchoRequest;
110 case 43: return ExtendedEchoReply;
111 case 253: return Experiment1;
112 case 254: return Experiment2;
113 case 255: return Reserved;
114 default: return std::nullopt;
115 }
116 }
117
118 constexpr void set_checksum(uint16_t v) noexcept {
120 }
121};
122
123static_assert(sizeof(ICMPv4Header) == 4, "Wrong ICMP header size");
124static_assert(alignof(ICMPv4Header) == 1, "Wrong ICMP header alignment");
125
126} // namespace vbvx
Definition arp.hxx:11
ICMPv4Type
ICMPv4 Type Numbers.
Definition icmp4.hxx:19
@ AddressMaskReply
Definition icmp4.hxx:35
@ ReservedForSecurity
Definition icmp4.hxx:36
@ Traceroute
Definition icmp4.hxx:37
@ Photuris
Definition icmp4.hxx:47
@ MobilityExperimental
Definition icmp4.hxx:48
@ SourceQuench
Definition icmp4.hxx:22
@ ExtendedEchoReply
Definition icmp4.hxx:50
@ DomainNameRequest
Definition icmp4.hxx:44
@ Redirect
Definition icmp4.hxx:23
@ RouterAdvertisement
Definition icmp4.hxx:26
@ Experiment1
Definition icmp4.hxx:51
@ AddressMaskRequest
Definition icmp4.hxx:34
@ EchoRequest
Definition icmp4.hxx:25
@ TimestampReply
Definition icmp4.hxx:31
@ Experiment2
Definition icmp4.hxx:52
@ IPv6IamHere
Definition icmp4.hxx:41
@ MobileRegistrationRequest
Definition icmp4.hxx:42
@ TimeExceeded
Definition icmp4.hxx:28
@ RouterSolicitation
Definition icmp4.hxx:27
@ InformationReply
Definition icmp4.hxx:33
@ InformationRequest
Definition icmp4.hxx:32
@ Reserved
Definition icmp4.hxx:53
@ MobileRegistrationReply
Definition icmp4.hxx:43
@ Timestamp
Definition icmp4.hxx:30
@ AlternateHostAddress
Definition icmp4.hxx:24
@ ExtendedEchoRequest
Definition icmp4.hxx:49
@ IPv6WhereAreYou
Definition icmp4.hxx:40
@ SKIP
Definition icmp4.hxx:46
@ ParameterProblem
Definition icmp4.hxx:29
@ MobileHostRedirect
Definition icmp4.hxx:39
@ DomainNameReply
Definition icmp4.hxx:45
@ DestinationUnreachable
Definition icmp4.hxx:21
@ DatagramConversionError
Definition icmp4.hxx:38
@ EchoReply
Definition icmp4.hxx:20
constexpr _Tp autoswap(_Tp tp)
Byte-swap a value if the host is little-endian.
Definition utils.hxx:13
ICMP header (type, code, checksum) (4 bytes).
Definition icmp4.hxx:64
constexpr auto checksum() const noexcept -> uint16_t
Definition icmp4.hxx:72
constexpr auto code_u8() const noexcept -> uint8_t
Definition icmp4.hxx:70
uint16_t checksum_be
Definition icmp4.hxx:67
uint8_t type
Definition icmp4.hxx:65
constexpr auto type_known() const noexcept -> std::optional< ICMPv4Type >
Definition icmp4.hxx:76
constexpr auto type_u8() const noexcept -> uint8_t
Definition icmp4.hxx:69
uint8_t code
Definition icmp4.hxx:66
constexpr void set_checksum(uint16_t v) noexcept
Definition icmp4.hxx:118