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