7 #include <unordered_map>
49 #define PCPP_IP_REASSEMBLY_DEFAULT_MAX_PACKETS_TO_STORE 500000
106 : m_IpID(ipid), m_SrcIP(srcip), m_DstIP(dstip)
112 :
PacketKey(other), m_IpID(other.m_IpID), m_SrcIP(other.m_SrcIP), m_DstIP(other.m_DstIP)
119 m_IpID = other.m_IpID;
120 m_SrcIP = other.m_SrcIP;
121 m_DstIP = other.m_DstIP;
200 : m_FragmentID(fragmentID), m_SrcIP(srcip), m_DstIP(dstip)
206 :
PacketKey(other), m_FragmentID(other.m_FragmentID), m_SrcIP(other.m_SrcIP), m_DstIP(other.m_DstIP)
213 m_FragmentID = other.m_FragmentID;
214 m_SrcIP = other.m_SrcIP;
215 m_DstIP = other.m_DstIP;
241 m_FragmentID = fragID;
274 uint32_t m_FragmentID;
319 : m_PacketLRU(maxPacketsToStore), m_OnFragmentsCleanCallback(onFragmentsCleanCallback),
320 m_CallbackUserCookie(callbackUserCookie)
429 return m_FragmentMap.size();
435 uint16_t fragmentOffset;
437 uint8_t* fragmentData;
438 size_t fragmentDataLen;
442 lastFragment =
false;
443 fragmentData =
nullptr;
448 delete[] fragmentData;
452 struct IPFragmentData
454 uint16_t currentOffset;
458 PacketKey* packetKey;
459 PointerVector<IPFragment> outOfOrderFragments;
460 IPFragmentData(PacketKey* pktKey, uint32_t fragId)
471 if (deleteData && data !=
nullptr)
478 LRUList<uint32_t> m_PacketLRU;
479 std::unordered_map<uint32_t, IPFragmentData*> m_FragmentMap;
481 void* m_CallbackUserCookie;
483 void addNewFragment(uint32_t hash, IPFragmentData* fragData);
484 bool matchOutOfOrderFragments(IPFragmentData* fragData);
#define PCPP_IP_REASSEMBLY_DEFAULT_MAX_PACKETS_TO_STORE
Definition: IPReassembly.h:49
Definition: IPReassembly.h:95
uint32_t getHashValue() const override
void setDstIP(const IPv4Address &dstIP)
Definition: IPReassembly.h:159
IPv4PacketKey & operator=(const IPv4PacketKey &other)
Definition: IPReassembly.h:117
uint16_t getIpID() const
Definition: IPReassembly.h:126
ProtocolType getProtocolType() const override
Definition: IPReassembly.h:169
void setSrcIP(const IPv4Address &srcIP)
Definition: IPReassembly.h:152
IPv4PacketKey(uint16_t ipid, IPv4Address srcip, IPv4Address dstip)
Definition: IPReassembly.h:105
IPv4Address getSrcIP() const
Definition: IPReassembly.h:132
IPv4Address getDstIP() const
Definition: IPReassembly.h:138
IPv4PacketKey()
A default c'tor which zeros all members.
Definition: IPReassembly.h:98
void setIpID(uint16_t ipID)
Definition: IPReassembly.h:145
PacketKey * clone() const override
Definition: IPReassembly.h:174
IPv4PacketKey(const IPv4PacketKey &other)
Definition: IPReassembly.h:111
Definition: IPReassembly.h:189
IPv6PacketKey()
A default c'tor which zeros all members.
Definition: IPReassembly.h:192
IPv6PacketKey(uint32_t fragmentID, IPv6Address srcip, IPv6Address dstip)
Definition: IPReassembly.h:199
void setFragmentID(uint32_t fragID)
Definition: IPReassembly.h:239
void setSrcIP(const IPv6Address &srcIP)
Definition: IPReassembly.h:246
uint32_t getHashValue() const override
ProtocolType getProtocolType() const override
Definition: IPReassembly.h:263
uint32_t getFragmentID() const
Definition: IPReassembly.h:220
IPv6PacketKey & operator=(const IPv6PacketKey &other)
Definition: IPReassembly.h:211
void setDstIP(const IPv6Address &dstIP)
Definition: IPReassembly.h:253
IPv6PacketKey(const IPv6PacketKey &other)
Definition: IPReassembly.h:205
IPv6Address getDstIP() const
Definition: IPReassembly.h:232
PacketKey * clone() const override
Definition: IPReassembly.h:268
IPv6Address getSrcIP() const
Definition: IPReassembly.h:226
Definition: IPReassembly.h:69
virtual ~PacketKey()=default
A default virtual d'tor.
virtual ProtocolType getProtocolType() const =0
virtual PacketKey * clone() const =0
virtual uint32_t getHashValue() const =0
Definition: IPReassembly.h:63
Packet * getCurrentPacket(const PacketKey &key)
size_t getMaxCapacity() const
Get the maximum capacity as determined in the c'tor.
Definition: IPReassembly.h:421
void removePacket(const PacketKey &key)
IPReassembly(OnFragmentsClean onFragmentsCleanCallback=nullptr, void *callbackUserCookie=nullptr, size_t maxPacketsToStore=500000)
Definition: IPReassembly.h:317
void(* OnFragmentsClean)(const PacketKey *key, void *userCookie)
Definition: IPReassembly.h:287
Packet * processPacket(Packet *fragment, ReassemblyStatus &status, ProtocolType parseUntil=UnknownProtocol, OsiModelLayer parseUntilLayer=OsiModelLayerUnknown)
Packet * processPacket(RawPacket *fragment, ReassemblyStatus &status, ProtocolType parseUntil=UnknownProtocol, OsiModelLayer parseUntilLayer=OsiModelLayerUnknown)
ReassemblyStatus
An enum representing the status returned from processing a fragment.
Definition: IPReassembly.h:291
@ FIRST_FRAGMENT
The processed fragment is the first fragment.
Definition: IPReassembly.h:297
@ FRAGMENT
The processed fragment is a fragment (but not the first one)
Definition: IPReassembly.h:299
@ OUT_OF_ORDER_FRAGMENT
The processed fragment is not the fragment that was expected at this time.
Definition: IPReassembly.h:301
@ REASSEMBLED
Packet is now fully reassembled.
Definition: IPReassembly.h:306
@ MALFORMED_FRAGMENT
Definition: IPReassembly.h:304
@ NON_FRAGMENT
The processed packet isn't a fragment.
Definition: IPReassembly.h:295
@ NON_IP_PACKET
The processed packet isn't of type IPv4 or IPv6.
Definition: IPReassembly.h:293
~IPReassembly()
A d'tor for this class.
size_t getCurrentCapacity() const
Get the current number of packets being processed.
Definition: IPReassembly.h:427
Definition: IpAddress.h:28
Definition: IpAddress.h:156
size_t getMaxSize() const
Definition: LRUList.h:108
Definition: RawPacket.h:259
The main namespace for the PcapPlusPlus lib.
uint8_t ProtocolType
Definition: ProtocolType.h:13
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelLayerUnknown
Unknown / null layer.
Definition: ProtocolType.h:241
const ProtocolType IPv4
IPv4 protocol.
Definition: ProtocolType.h:26
const ProtocolType IPv6
IPv6 protocol.
Definition: ProtocolType.h:29
const ProtocolType UnknownProtocol
Unknown protocol (or unsupported by PcapPlusPlus)
Definition: ProtocolType.h:20