Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 24 additions & 18 deletions Pcap++/src/DpdkDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "rte_malloc.h"
#include "rte_cycles.h"
#include <string>
#include <memory>
#include <unistd.h>
#include <chrono>
#include <thread>
Expand Down Expand Up @@ -1169,26 +1170,28 @@ namespace pcpp

for (size_t i = 0; i < arrLength; i++)
{
MBufRawPacket* rawPacket = nullptr;
MBufRawPacket* mBufRawPacket = nullptr;
uint8_t rawPacketType = packetsArr[i]->getRawPacketReadOnly()->getObjectType();
if (rawPacketType != MBUFRAWPACKET_OBJECT_TYPE)
{
rawPacket = new MBufRawPacket();
if (unlikely(!rawPacket->initFromRawPacket(packetsArr[i]->getRawPacketReadOnly(), this)))
auto mBufRawPacketTemp = std::make_unique<MBufRawPacket>();
if (unlikely(!mBufRawPacketTemp->initFromRawPacket(packetsArr[i]->getRawPacketReadOnly(), this)))
{
delete rawPacket;
return 0;
}

mBufVec.pushBack(rawPacket);
// Set the packet pointer to the newly created MBufRawPacket and add it register it to lifetime
// management
mBufRawPacket = mBufRawPacketTemp.get();
mBufVec.pushBack(std::move(mBufRawPacketTemp));
}
else
{
rawPacket = (MBufRawPacket*)packetsArr[i]->getRawPacketReadOnly();
mBufRawPacket = static_cast<MBufRawPacket*>(packetsArr[i]->getRawPacket());
}

mBufArr[i] = rawPacket->getMBuf();
mBufRawPacketArr[i] = rawPacket;
mBufArr[i] = mBufRawPacket->getMBuf();
mBufRawPacketArr[i] = mBufRawPacket;
}

uint16_t packetsSent =
Expand All @@ -1209,28 +1212,31 @@ namespace pcpp
MBufRawPacketVector mBufVec;
int mBufIndex = 0;

for (RawPacketVector::ConstVectorIterator iter = rawPacketsVec.begin(); iter != rawPacketsVec.end(); iter++)
for (auto* rawPacket : rawPacketsVec)
{
MBufRawPacket* rawPacket = nullptr;
uint8_t rawPacketType = (*iter)->getObjectType();
MBufRawPacket* mBufRawPacket = nullptr;
uint8_t rawPacketType = rawPacket->getObjectType();
if (rawPacketType != MBUFRAWPACKET_OBJECT_TYPE)
{
rawPacket = new MBufRawPacket();
if (unlikely(!rawPacket->initFromRawPacket(*iter, this)))
// Copy the raw packet into a MBufRawPacket
auto mbufRawPacketTemp = std::make_unique<MBufRawPacket>();
if (unlikely(!mbufRawPacketTemp->initFromRawPacket(rawPacket, this)))
{
delete rawPacket;
return 0;
}

mBufVec.pushBack(rawPacket);
// Set the packet pointer to the newly created MBufRawPacket and add it to lifetime management
mBufRawPacket = mbufRawPacketTemp.get();
mBufVec.pushBack(std::move(mbufRawPacketTemp));
}
else
{
rawPacket = (MBufRawPacket*)(*iter);
// If the raw packet is already a MBufRawPacket, use it directly
mBufRawPacket = static_cast<MBufRawPacket*>(rawPacket);
}

mBufRawPacketArr[mBufIndex] = rawPacket;
mBufArr[mBufIndex++] = rawPacket->getMBuf();
mBufRawPacketArr[mBufIndex] = mBufRawPacket;
mBufArr[mBufIndex++] = mBufRawPacket->getMBuf();
}

uint16_t packetsSent =
Expand Down
20 changes: 10 additions & 10 deletions Pcap++/src/KniDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#include <cerrno>
#include <cstdio>
#include <memory>
#include <cstring>
#include <algorithm>

Expand Down Expand Up @@ -727,31 +728,30 @@ namespace pcpp
}

struct rte_mbuf* mbuf;
std::unique_ptr<MBufRawPacket> mbufRawPacketTemp;
MBufRawPacket* mbufRawPacket = nullptr;
bool sent = false;
bool wasAllocated = false;

if (rawPacket.getObjectType() != MBUFRAWPACKET_OBJECT_TYPE)
{
mbufRawPacket = new MBufRawPacket();
if (unlikely(!mbufRawPacket->initFromRawPacket(&rawPacket, this)))
mbufRawPacketTemp = std::make_unique<MBufRawPacket>();
if (unlikely(!mbufRawPacketTemp->initFromRawPacket(&rawPacket, this)))
{
delete mbufRawPacket;
return sent;
}
mbuf = mbufRawPacket->getMBuf();
wasAllocated = true;

// Sets the mbuf pointer from the temporary object
mbufRawPacket = mbufRawPacketTemp.get();
}
else
{
mbufRawPacket = (MBufRawPacket*)(&rawPacket);
mbuf = mbufRawPacket->getMBuf();
// Casts the raw packet to MBufRawPacket
mbufRawPacket = static_cast<MBufRawPacket*>(&rawPacket);
}

mbuf = mbufRawPacket->getMBuf();
sent = rte_kni_tx_burst(m_Device, &mbuf, 1);
mbufRawPacket->setFreeMbuf(!sent);
if (wasAllocated)
delete mbufRawPacket;

return sent;
}
Expand Down
Loading