22 #if (BYTE_ORDER == LITTLE_ENDIAN)
47 static_assert(
sizeof(
ip6_hdr) == 40,
"ip6_hdr size is not 40 bytes");
84 return reinterpret_cast<ip6_hdr*
>(m_Data);
147 template <
class TIPv6Extension> TIPv6Extension*
addExtension(
const TIPv6Extension& extensionHeader);
159 static inline bool isDataValid(
const uint8_t* data,
size_t dataLen);
178 return sizeof(
ip6_hdr) + m_ExtensionsLen;
201 static std::vector<FieldDescriptor>
all()
206 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
217 static std::vector<FieldDescriptor>
all()
253 void parseExtensions();
254 void deleteExtensions();
258 size_t m_ExtensionsLen;
264 while (curExt !=
nullptr &&
dynamic_cast<TIPv6Extension*
>(curExt) ==
nullptr)
267 return static_cast<TIPv6Extension*
>(curExt);
272 int offsetToAddHeader =
static_cast<int>(
getHeaderLen());
273 if (!extendLayer(offsetToAddHeader, extensionHeader.getExtensionLen()))
278 TIPv6Extension* newHeader =
new TIPv6Extension(
this,
static_cast<size_t>(offsetToAddHeader));
279 (*newHeader) = extensionHeader;
281 if (m_FirstExtension !=
nullptr)
283 newHeader->getBaseHeader()->nextHeader = m_LastExtension->getBaseHeader()->nextHeader;
284 m_LastExtension->getBaseHeader()->nextHeader = newHeader->getExtensionType();
285 m_LastExtension->setNextHeader(newHeader);
286 m_LastExtension = newHeader;
290 m_FirstExtension = newHeader;
291 m_LastExtension = newHeader;
296 m_ExtensionsLen += newHeader->getExtensionLen();
305 auto ip6Header =
reinterpret_cast<const ip6_hdr*
>(data);
306 return canReinterpretAs<ip6_hdr>(data, dataLen) && ip6Header->
ipVersion == 6;
Definition: IpAddress.h:318
Definition: IpAddress.h:165
void copyTo(uint8_t **arr, size_t &length) const
Definition: IPv6Extensions.h:18
IPv6Extension * getNextHeader() const
Definition: IPv6Extensions.h:57
Definition: IPv6Layer.h:52
IPv6Address getSrcIPv6Address() const
Definition: IPv6Layer.h:97
void serializeLayer(ObjectScope &serializer) const override
IPv6Layer(const IPv6Address &srcIP, const IPv6Address &dstIP)
IPv6Layer(const IPv6Layer &other)
A copy constructor that copies the entire header from the other IPv6Layer (including IPv6 extensions)
void parseNextLayer() override
IPv6Address getDstIPv6Address() const
Definition: IPv6Layer.h:126
void removeAllExtensions()
Remove all IPv6 extensions in this layer.
TIPv6Extension * getExtensionOfType() const
Definition: IPv6Layer.h:261
void computeCalculateFields() override
OsiModelLayer getOsiModelLayer() const override
Definition: IPv6Layer.h:190
std::string toString() const override
ip6_hdr * getIPv6Header() const
Definition: IPv6Layer.h:82
void setDstIPv6Address(const IPv6Address &ipAddr)
Definition: IPv6Layer.h:111
size_t getHeaderLen() const override
Definition: IPv6Layer.h:176
IPv6Layer & operator=(const IPv6Layer &other)
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: IPv6Layer.h:303
IPv6Layer()
A constructor that allocates a new IPv6 header with empty fields.
void setSrcIPv6Address(const IPv6Address &ipAddr)
Definition: IPv6Layer.h:104
IPAddress getSrcIPAddress() const override
Definition: IPv6Layer.h:90
IPv6Layer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
size_t getExtensionCount() const
TIPv6Extension * addExtension(const TIPv6Extension &extensionHeader)
Definition: IPv6Layer.h:270
~IPv6Layer() override
A destructor for this layer.
IPAddress getDstIPAddress() const override
Definition: IPv6Layer.h:119
Definition: Serializers.h:230
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:420
@ OsiModelNetworkLayer
Network layer (layer 3)
Definition: ProtocolType.h:426
Definition: Serializers.h:18
Definition: IPv6Layer.h:213
static const FieldDescriptor Name
Extension type name (e.g. "Fragment", "Hop-By-Hop")
Definition: IPv6Layer.h:223
static std::vector< FieldDescriptor > all()
Definition: IPv6Layer.h:217
static const FieldDescriptor Type
Raw numeric extension type.
Definition: IPv6Layer.h:226
Definition: IPv6Layer.h:199
static std::vector< FieldDescriptor > all()
Definition: IPv6Layer.h:201
static const FieldDescriptor IsFragment
Whether this packet is a fragment.
Definition: IPv6Layer.h:239
static const FieldDescriptor NextHeader
Next Header field (first extension header, or upper-layer protocol if none)
Definition: IPv6Layer.h:242
static const FieldDescriptor PayloadLength
Payload length, in host byte order.
Definition: IPv6Layer.h:236
static const FieldDescriptor SrcIp
Source IP address, as a string.
Definition: IPv6Layer.h:230
static const FieldDescriptor Extensions
Array of extension headers; elements described by IPv6ExtensionObject.
Definition: IPv6Layer.h:245
static const FieldDescriptor DstIp
Destination IP address, as a string.
Definition: IPv6Layer.h:233
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
Definition: Serializers.h:49
ObjectFieldDescriptor(uint16_t fieldId, std::string fieldName)
Definition: Serializers.h:53
Definition: IPv6Layer.h:21
uint8_t trafficClass
Traffic class.
Definition: IPv6Layer.h:24
uint8_t flowLabel[3]
Flow label.
Definition: IPv6Layer.h:34
uint8_t hopLimit
Replaces the time to live field of IPv4.
Definition: IPv6Layer.h:40
uint8_t ipSrc[16]
Source address.
Definition: IPv6Layer.h:42
uint16_t payloadLength
The size of the payload in octets, including any extension headers.
Definition: IPv6Layer.h:36
uint8_t ipVersion
IP version number, has the value of 6 for IPv6.
Definition: IPv6Layer.h:26
uint8_t nextHeader
Specifies the type of the next header (protocol). Must be one of IPProtocolTypes.
Definition: IPv6Layer.h:38
uint8_t ipDst[16]
Destination address.
Definition: IPv6Layer.h:44