21 #if (BYTE_ORDER == LITTLE_ENDIAN)
55 static_assert(
sizeof(
iphdr) == 20,
"iphdr size is not 20 bytes");
153 #define PCPP_IP_DONT_FRAGMENT 0x40
154 #define PCPP_IP_MORE_FRAGMENTS 0x20
219 std::vector<IPv4Address> res;
221 if (m_Data ==
nullptr)
228 uint8_t valueOffset =
static_cast<uint8_t
>(1);
230 while (
static_cast<size_t>(valueOffset) < dataSize)
233 memcpy(&curValue, m_Data->recordValue + valueOffset,
sizeof(uint32_t));
239 valueOffset +=
static_cast<uint8_t
>(4);
257 if (m_Data ==
nullptr)
269 uint8_t valueOffset =
static_cast<uint8_t
>(2);
272 while (
static_cast<size_t>(valueOffset) < dataSize)
275 memcpy(&curValue, m_Data->recordValue + valueOffset,
sizeof(uint32_t));
285 readIPAddr = !readIPAddr;
287 valueOffset +=
static_cast<uint8_t
>(4);
303 static bool canAssign(
const uint8_t* recordRawData,
size_t tlvDataLen)
305 auto data =
reinterpret_cast<TLVRawData const*
>(recordRawData);
309 if (tlvDataLen <
sizeof(TLVRawData::recordType))
313 data->recordType ==
static_cast<uint8_t
>(
IPV4OPT_NOP))
323 if (m_Data ==
nullptr)
327 m_Data->recordType ==
static_cast<uint8_t
>(
IPV4OPT_NOP))
328 return sizeof(uint8_t);
330 return static_cast<size_t>(m_Data->recordLen);
335 if (m_Data ==
nullptr)
339 m_Data->recordType ==
static_cast<uint8_t
>(
IPV4OPT_NOP))
342 return static_cast<size_t>(m_Data->recordLen) - (2 *
sizeof(uint8_t));
362 bool m_BuilderParamsValid;
375 m_BuilderParamsValid =
true;
385 m_BuilderParamsValid =
true;
449 return reinterpret_cast<iphdr*
>(m_Data);
584 m_TempHeaderExtension;
606 static inline bool isDataValid(
const uint8_t* data,
size_t dataLen);
609 int m_NumOfTrailingBytes;
610 int m_TempHeaderExtension;
613 void copyLayerData(
const IPv4Layer& other);
614 uint8_t* getOptionsBasePtr()
const
616 return m_Data +
sizeof(
iphdr);
618 IPv4Option addOptionAt(
const IPv4OptionBuilder& optionBuilder,
int offset);
619 void adjustOptionsTrailer(
size_t totalOptSize);
621 void initLayerInPacket(
bool setTotalLenAsDataLen);
628 const iphdr* hdr =
reinterpret_cast<const iphdr*
>(data);
Definition: IpAddress.h:276
Definition: IpAddress.h:28
uint32_t toInt() const
Definition: IpAddress.h:146
Definition: IPv4Layer.h:408
IPv4Option getNextOption(IPv4Option &option) const
iphdr * getIPv4Header() const
Definition: IPv4Layer.h:447
size_t getHeaderLen() const override
Definition: IPv4Layer.h:581
IPv4Layer()
A constructor that allocates a new IPv4 header with empty fields.
uint8_t getFragmentFlags() const
IPv4Address getSrcIPv4Address() const
Definition: IPv4Layer.h:462
IPAddress getDstIPAddress() const override
Definition: IPv4Layer.h:477
IPAddress getSrcIPAddress() const override
Definition: IPv4Layer.h:455
void parseNextLayer() override
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: IPv4Layer.h:626
IPv4Option addOption(const IPv4OptionBuilder &optionBuilder)
IPv4Layer(const IPv4Address &srcIP, const IPv4Address &dstIP)
IPv4Layer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
IPv4Option getOption(IPv4OptionTypes option) const
void setDstIPv4Address(const IPv4Address &ipAddr)
Definition: IPv4Layer.h:491
void setSrcIPv4Address(const IPv4Address &ipAddr)
Definition: IPv4Layer.h:469
IPv4Layer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet, bool setTotalLenAsDataLen)
void computeCalculateFields() override
OsiModelLayer getOsiModelLayer() const override
Definition: IPv4Layer.h:597
bool isLastFragment() const
IPv4Layer & operator=(const IPv4Layer &other)
IPv4Address getDstIPv4Address() const
Definition: IPv4Layer.h:484
IPv4Layer(const IPv4Layer &other)
A copy constructor that copy the entire header from the other IPv4Layer (including IPv4 options)
size_t getOptionCount() const
IPv4Option addOptionAfter(const IPv4OptionBuilder &optionBuilder, IPv4OptionTypes prevOptionType=IPV4OPT_Unknown)
IPv4Option getFirstOption() const
bool removeOption(IPv4OptionTypes option)
uint16_t getFragmentOffset() const
bool isFirstFragment() const
std::string toString() const override
Definition: IPv4Layer.h:360
IPv4OptionBuilder(IPv4OptionTypes optionType, const uint8_t *optionValue, uint8_t optionValueLen)
Definition: IPv4Layer.h:372
IPv4OptionBuilder(IPv4OptionTypes optionType, uint16_t optionValue)
Definition: IPv4Layer.h:382
IPv4OptionBuilder(const IPv4TimestampOptionValue ×tampValue)
IPv4OptionBuilder(IPv4OptionTypes optionType, const std::vector< IPv4Address > &ipList)
Definition: IPv4Layer.h:201
IPv4Option(uint8_t *optionRawData)
Definition: IPv4Layer.h:205
std::vector< IPv4Address > getValueAsIpList() const
Definition: IPv4Layer.h:217
~IPv4Option() override=default
A d'tor for this class, currently does nothing.
IPv4OptionTypes getIPv4OptionType() const
Definition: IPv4Layer.h:294
size_t getDataSize() const override
Definition: IPv4Layer.h:333
size_t getTotalSize() const override
Definition: IPv4Layer.h:321
static bool canAssign(const uint8_t *recordRawData, size_t tlvDataLen)
Definition: IPv4Layer.h:303
IPv4TimestampOptionValue getTimestampOptionValue() const
Definition: IPv4Layer.h:252
Definition: TLVData.h:357
static bool canAssign(const uint8_t *recordRawData, size_t tlvDataLen)
Definition: TLVData.h:66
Definition: TLVData.h:204
The main namespace for the PcapPlusPlus lib.
IPv4OptionTypes
An enum for supported IPv4 option types.
Definition: IPv4Layer.h:108
@ IPV4OPT_MTUReply
MTU Reply.
Definition: IPv4Layer.h:118
@ IPV4OPT_QuickStart
Quick-Start.
Definition: IPv4Layer.h:120
@ IPV4OPT_LooseSourceRoute
Loose Source Route.
Definition: IPv4Layer.h:128
@ IPV4OPT_Traceroute
Traceroute.
Definition: IPv4Layer.h:124
@ IPV4OPT_NOP
No Operation.
Definition: IPv4Layer.h:112
@ IPV4OPT_UpstreamMulticastPkt
Upstream Multicast Pkt.
Definition: IPv4Layer.h:148
@ IPV4OPT_DynamicPacketState
Dynamic Packet State.
Definition: IPv4Layer.h:146
@ IPV4OPT_EndOfOptionsList
End of Options List.
Definition: IPv4Layer.h:110
@ IPV4OPT_ExtendedSecurity
Extended Security.
Definition: IPv4Layer.h:130
@ IPV4OPT_RouterAlert
Router Alert.
Definition: IPv4Layer.h:142
@ IPV4OPT_SelectiveDirectedBroadcast
Selective Directed Broadcast.
Definition: IPv4Layer.h:144
@ IPV4OPT_Security
Security.
Definition: IPv4Layer.h:126
@ IPV4OPT_Timestamp
Timestamp.
Definition: IPv4Layer.h:122
@ IPV4OPT_Unknown
Unknown IPv4 option.
Definition: IPv4Layer.h:150
@ IPV4OPT_AddressExtension
Address Extension.
Definition: IPv4Layer.h:140
@ IPV4OPT_CommercialSecurity
Commercial Security.
Definition: IPv4Layer.h:132
@ IPV4OPT_MTUProbe
MTU Probe.
Definition: IPv4Layer.h:116
@ IPV4OPT_StrictSourceRoute
Strict Source Route.
Definition: IPv4Layer.h:136
@ IPV4OPT_ExtendedInternetProtocol
Extended Internet Protocol.
Definition: IPv4Layer.h:138
@ IPV4OPT_StreamID
Stream ID.
Definition: IPv4Layer.h:134
@ IPV4OPT_RecordRoute
Record Route.
Definition: IPv4Layer.h:114
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelNetworkLayer
Network layer (layer 3)
Definition: ProtocolType.h:231
IPProtocolTypes
An enum for all possible IPv4 and IPv6 protocol types.
Definition: IPv4Layer.h:59
@ PACKETPP_IPPROTO_ROUTING
IPv6 Routing header.
Definition: IPv4Layer.h:83
@ PACKETPP_IPPROTO_AH
authentication header
Definition: IPv4Layer.h:91
@ PACKETPP_IPPROTO_ICMP
Internet Control Message Protocol.
Definition: IPv4Layer.h:65
@ PACKETPP_IPPROTO_IPIP
IPIP tunnels (older KA9Q tunnels use 94)
Definition: IPv4Layer.h:69
@ PACKETPP_IPPROTO_FRAGMENT
IPv6 fragmentation header.
Definition: IPv4Layer.h:85
@ PACKETPP_IPPROTO_UDP
User Datagram Protocol.
Definition: IPv4Layer.h:77
@ PACKETPP_IPPROTO_IP
Dummy protocol for TCP.
Definition: IPv4Layer.h:61
@ PACKETPP_IPPROTO_ESP
encapsulating security payload
Definition: IPv4Layer.h:89
@ PACKETPP_IPPROTO_IGMP
Internet Gateway Management Protocol.
Definition: IPv4Layer.h:67
@ PACKETPP_IPPROTO_GRE
GRE protocol.
Definition: IPv4Layer.h:87
@ PACKETPP_IPPROTO_TCP
Transmission Control Protocol.
Definition: IPv4Layer.h:71
@ PACKETPP_IPPROTO_ICMPV6
ICMPv6.
Definition: IPv4Layer.h:93
@ PACKETPP_IPPROTO_PUP
PUP protocol.
Definition: IPv4Layer.h:75
@ PACKETPP_IPPROTO_VRRP
VRRP protocol.
Definition: IPv4Layer.h:99
@ PACKETPP_IPPROTO_IDP
XNS IDP protocol.
Definition: IPv4Layer.h:79
@ PACKETPP_IPPROTO_EGP
Exterior Gateway Protocol.
Definition: IPv4Layer.h:73
@ PACKETPP_IPPROTO_HOPOPTS
IPv6 Hop-by-Hop options.
Definition: IPv4Layer.h:63
@ PACKETPP_IPPROTO_DSTOPTS
IPv6 Destination options.
Definition: IPv4Layer.h:97
@ PACKETPP_IPPROTO_RAW
Raw IP packets.
Definition: IPv4Layer.h:101
@ PACKETPP_IPPROTO_NONE
IPv6 no next header.
Definition: IPv4Layer.h:95
@ PACKETPP_IPPROTO_MAX
Maximum value.
Definition: IPv4Layer.h:103
@ PACKETPP_IPPROTO_IPV6
IPv6 header.
Definition: IPv4Layer.h:81
Definition: IPv4Layer.h:160
TimestampType type
The timestamp value type.
Definition: IPv4Layer.h:175
std::vector< IPv4Address > ipAddresses
A list of IPv4 addresses parsed from the IPv4 timestamp option value.
Definition: IPv4Layer.h:181
TimestampType
An enum for IPv4 timestamp option types.
Definition: IPv4Layer.h:163
@ Unknown
Invalid or unknown value type.
Definition: IPv4Layer.h:171
@ TimestampsForPrespecifiedIPs
The IPv4 addresses are prespecified.
Definition: IPv4Layer.h:169
@ TimestampAndIP
Value containing both timestamps and IPv4 addresses.
Definition: IPv4Layer.h:167
@ TimestampOnly
Value containing only timestamps.
Definition: IPv4Layer.h:165
std::vector< uint32_t > timestamps
A list of timestamps parsed from the IPv4 timestamp option value.
Definition: IPv4Layer.h:178
void clear()
Definition: IPv4Layer.h:189
IPv4TimestampOptionValue()
The default constructor.
Definition: IPv4Layer.h:184
Definition: IPv4Layer.h:20
uint8_t typeOfService
type of service, same as Differentiated Services Code Point (DSCP)
Definition: IPv4Layer.h:33
uint32_t ipDst
IPv4 address of the receiver of the packet.
Definition: IPv4Layer.h:51
uint16_t headerChecksum
Error-checking of the header.
Definition: IPv4Layer.h:47
uint8_t ipVersion
IP version number, has the value of 4 for IPv4.
Definition: IPv4Layer.h:25
uint32_t ipSrc
IPv4 address of the sender of the packet.
Definition: IPv4Layer.h:49
uint8_t protocol
Defines the protocol used in the data portion of the IP datagram. Must be one of IPProtocolTypes.
Definition: IPv4Layer.h:45
uint16_t fragmentOffset
Fragment offset field, measured in units of eight-byte blocks (64 bits)
Definition: IPv4Layer.h:40
uint16_t ipId
Definition: IPv4Layer.h:38
uint8_t timeToLive
Definition: IPv4Layer.h:43
uint16_t totalLength
Entire packet (fragment) size, including header and data, in bytes.
Definition: IPv4Layer.h:35
uint8_t internetHeaderLength
IP header length, has the value of 5 for IPv4.
Definition: IPv4Layer.h:23