20 #if (BYTE_ORDER == LITTLE_ENDIAN)
45 static_assert(
sizeof(
ip6_hdr) == 40,
"ip6_hdr size is not 40 bytes");
82 return reinterpret_cast<ip6_hdr*
>(m_Data);
145 template <
class TIPv6Extension> TIPv6Extension*
addExtension(
const TIPv6Extension& extensionHeader);
157 static inline bool isDataValid(
const uint8_t* data,
size_t dataLen);
176 return sizeof(
ip6_hdr) + m_ExtensionsLen;
195 void parseExtensions();
196 void deleteExtensions();
200 size_t m_ExtensionsLen;
206 while (curExt !=
nullptr &&
dynamic_cast<TIPv6Extension*
>(curExt) ==
nullptr)
209 return static_cast<TIPv6Extension*
>(curExt);
214 int offsetToAddHeader =
static_cast<int>(
getHeaderLen());
215 if (!extendLayer(offsetToAddHeader, extensionHeader.getExtensionLen()))
220 TIPv6Extension* newHeader =
new TIPv6Extension(
this,
static_cast<size_t>(offsetToAddHeader));
221 (*newHeader) = extensionHeader;
223 if (m_FirstExtension !=
nullptr)
225 newHeader->getBaseHeader()->nextHeader = m_LastExtension->getBaseHeader()->nextHeader;
226 m_LastExtension->getBaseHeader()->nextHeader = newHeader->getExtensionType();
227 m_LastExtension->setNextHeader(newHeader);
228 m_LastExtension = newHeader;
232 m_FirstExtension = newHeader;
233 m_LastExtension = newHeader;
238 m_ExtensionsLen += newHeader->getExtensionLen();
247 return data && dataLen >=
sizeof(
ip6_hdr);
Definition: IpAddress.h:276
Definition: IpAddress.h:156
void copyTo(uint8_t **arr, size_t &length) const
Definition: IPv6Extensions.h:18
IPv6Extension * getNextHeader() const
Definition: IPv6Extensions.h:55
Definition: IPv6Layer.h:50
IPv6Address getSrcIPv6Address() const
Definition: IPv6Layer.h:95
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:124
void removeAllExtensions()
Remove all IPv6 extensions in this layer.
TIPv6Extension * getExtensionOfType() const
Definition: IPv6Layer.h:203
void computeCalculateFields() override
OsiModelLayer getOsiModelLayer() const override
Definition: IPv6Layer.h:188
std::string toString() const override
ip6_hdr * getIPv6Header() const
Definition: IPv6Layer.h:80
void setDstIPv6Address(const IPv6Address &ipAddr)
Definition: IPv6Layer.h:109
size_t getHeaderLen() const override
Definition: IPv6Layer.h:174
IPv6Layer & operator=(const IPv6Layer &other)
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: IPv6Layer.h:245
IPv6Layer()
A constructor that allocates a new IPv6 header with empty fields.
void setSrcIPv6Address(const IPv6Address &ipAddr)
Definition: IPv6Layer.h:102
IPAddress getSrcIPAddress() const override
Definition: IPv6Layer.h:88
IPv6Layer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
size_t getExtensionCount() const
TIPv6Extension * addExtension(const TIPv6Extension &extensionHeader)
Definition: IPv6Layer.h:212
~IPv6Layer() override
A destructor for this layer.
IPAddress getDstIPAddress() const override
Definition: IPv6Layer.h:117
The main namespace for the PcapPlusPlus lib.
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelNetworkLayer
Network layer (layer 3)
Definition: ProtocolType.h:231
Definition: IPv6Layer.h:19
uint8_t trafficClass
Traffic class.
Definition: IPv6Layer.h:22
uint8_t flowLabel[3]
Flow label.
Definition: IPv6Layer.h:32
uint8_t hopLimit
Replaces the time to live field of IPv4.
Definition: IPv6Layer.h:38
uint8_t ipSrc[16]
Source address.
Definition: IPv6Layer.h:40
uint16_t payloadLength
The size of the payload in octets, including any extension headers.
Definition: IPv6Layer.h:34
uint8_t ipVersion
IP version number, has the value of 6 for IPv6.
Definition: IPv6Layer.h:24
uint8_t nextHeader
Specifies the type of the next header (protocol). Must be one of IPProtocolTypes.
Definition: IPv6Layer.h:36
uint8_t ipDst[16]
Destination address.
Definition: IPv6Layer.h:42