VBVX 0.1.0
Header-only C++23 library for safe, zero-copy parsing of packet buffers.
Loading...
Searching...
No Matches
icmp6.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
68
77struct [[gnu::packed]] ICMPv6Header {
78 uint8_t type;
79 uint8_t code;
80 uint16_t checksum_be;
81
82 constexpr auto type_u8() const noexcept -> uint8_t { return type; }
83 constexpr auto code_u8() const noexcept -> uint8_t { return code; }
84
85 constexpr auto checksum() const noexcept -> uint16_t {
86 return autoswap(checksum_be);
87 }
88
89 constexpr auto type_known() const noexcept -> std::optional<ICMPv6Type> {
90 using enum ICMPv6Type;
91
92 switch (type) {
93 case 1: return DestinationUnreachable;
94 case 2: return PacketTooBig;
95 case 3: return TimeExceeded;
96 case 4: return ParameterProblem;
97 case 100: return PrivateExperiment100;
98 case 101: return PrivateExperiment101;
99 case 128: return EchoRequest;
100 case 129: return EchoReply;
101 case 130: return MulticastListenerQuery;
102 case 131: return MulticastListenerReport;
103 case 132: return MulticastListenerDone;
104 case 133: return RouterSolicitation;
105 case 134: return RouterAdvertisement;
106 case 135: return NeighborSolicitation;
107 case 136: return NeighborAdvertisement;
108 case 137: return RedirectMessage;
109 case 138: return RouterRenumbering;
110 case 139: return NodeInformationQuery;
111 case 140: return NodeInformationResponse;
114 case 143: return Version2MulticastListenerReport;
115 case 144: return HomeAgentAddressDiscoveryRequest;
116 case 145: return HomeAgentAddressDiscoveryReply;
117 case 146: return MobilePrefixSolicitation;
118 case 147: return MobilePrefixAdvertisement;
119 case 150: return MobilityExperimental;
120 case 151: return MulticastRouterAdvertisement;
121 case 152: return MulticastRouterSolicitation;
122 case 153: return MulticastRouterTermination;
123 case 154: return FMIPv6;
124 case 155: return RPLControlMessage;
125 case 156: return ILNPv6LocatorUpdate;
126 case 157: return DuplicateAddressRequest;
127 case 158: return DuplicateAddressConfirmation;
128 case 159: return MPLControlMessage;
129 case 160: return ExtendedEchoRequest;
130 case 161: return ExtendedEchoReply;
131 case 200: return PrivateExperiment200;
132 case 201: return PrivateExperiment201;
133 case 255: return Reserved;
134 default: return std::nullopt;
135 }
136 }
137
138 constexpr void set_checksum(uint16_t v) noexcept {
140 }
141};
142
143static_assert(sizeof(ICMPv6Header) == 4, "Wrong ICMPv6 header size");
144static_assert(alignof(ICMPv6Header) == 1, "Wrong ICMPv6 header alignment");
145
146} // namespace vbvx
Definition arp.hxx:11
@ MobilityExperimental
Definition icmp4.hxx:48
@ ExtendedEchoReply
Definition icmp4.hxx:50
@ RouterAdvertisement
Definition icmp4.hxx:26
@ EchoRequest
Definition icmp4.hxx:25
@ TimeExceeded
Definition icmp4.hxx:28
@ RouterSolicitation
Definition icmp4.hxx:27
@ Reserved
Definition icmp4.hxx:53
@ ExtendedEchoRequest
Definition icmp4.hxx:49
@ ParameterProblem
Definition icmp4.hxx:29
@ DestinationUnreachable
Definition icmp4.hxx:21
@ EchoReply
Definition icmp4.hxx:20
constexpr _Tp autoswap(_Tp tp)
Byte-swap a value if the host is little-endian.
Definition utils.hxx:13
ICMPv6Type
ICMPv6 Type Numbers.
Definition icmp6.hxx:19
@ NeighborAdvertisement
Definition icmp6.hxx:38
@ NeighborSolicitation
Definition icmp6.hxx:37
@ HomeAgentAddressDiscoveryReply
Definition icmp6.hxx:47
@ RPLControlMessage
Definition icmp6.hxx:55
@ RouterRenumbering
Definition icmp6.hxx:40
@ FMIPv6
Definition icmp6.hxx:54
@ NodeInformationQuery
Definition icmp6.hxx:41
@ MulticastRouterAdvertisement
Definition icmp6.hxx:51
@ NodeInformationResponse
Definition icmp6.hxx:42
@ Version2MulticastListenerReport
Definition icmp6.hxx:45
@ MulticastRouterSolicitation
Definition icmp6.hxx:52
@ ILNPv6LocatorUpdate
Definition icmp6.hxx:56
@ PrivateExperiment201
Definition icmp6.hxx:64
@ DuplicateAddressConfirmation
Definition icmp6.hxx:58
@ MobilePrefixAdvertisement
Definition icmp6.hxx:49
@ InverseNeighborDiscoverySolicitation
Definition icmp6.hxx:43
@ MobilePrefixSolicitation
Definition icmp6.hxx:48
@ PrivateExperiment101
Definition icmp6.hxx:27
@ MPLControlMessage
Definition icmp6.hxx:59
@ PacketTooBig
Definition icmp6.hxx:21
@ DuplicateAddressRequest
Definition icmp6.hxx:57
@ PrivateExperiment100
Definition icmp6.hxx:26
@ RedirectMessage
Definition icmp6.hxx:39
@ HomeAgentAddressDiscoveryRequest
Definition icmp6.hxx:46
@ MulticastListenerQuery
Definition icmp6.hxx:32
@ PrivateExperiment200
Definition icmp6.hxx:63
@ MulticastListenerDone
Definition icmp6.hxx:34
@ InverseNeighborDiscoveryAdvertisement
Definition icmp6.hxx:44
@ MulticastRouterTermination
Definition icmp6.hxx:53
@ MulticastListenerReport
Definition icmp6.hxx:33
ICMPv6 header (type, code, checksum) (4 bytes).
Definition icmp6.hxx:77
uint16_t checksum_be
Definition icmp6.hxx:80
constexpr void set_checksum(uint16_t v) noexcept
Definition icmp6.hxx:138
uint8_t code
Definition icmp6.hxx:79
constexpr auto checksum() const noexcept -> uint16_t
Definition icmp6.hxx:85
constexpr auto type_u8() const noexcept -> uint8_t
Definition icmp6.hxx:82
constexpr auto code_u8() const noexcept -> uint8_t
Definition icmp6.hxx:83
constexpr auto type_known() const noexcept -> std::optional< ICMPv6Type >
Definition icmp6.hxx:89
uint8_t type
Definition icmp6.hxx:78