if ((pollfds[0].revents & POLLIN) != 0) {
needNotify = true;
xskInfo->cleanSocketNotification();
- xskInfo->processIncomingFrames([&](XskPacket& packet) {
+ xskInfo->processIncomingFrames([&](XskPacket packet) {
if (packet.getDataLen() < sizeof(dnsheader)) {
xskInfo->markAsFree(packet);
return;
if ((fds.at(fdIndex).revents & POLLIN) != 0) {
ready--;
const auto& info = xsk->getWorkerByDescriptor(fds.at(fdIndex).fd);
- info->processOutgoingFrames([&](XskPacket& packet) {
+ info->processOutgoingFrames([&](XskPacket packet) {
if ((packet.getFlags() & XskPacket::UPDATE) == 0) {
xsk->markAsFree(packet);
return;
while (!xskInfo->hasIncomingFrames()) {
xskInfo->waitForXskSocket();
}
- xskInfo->processIncomingFrames([&](XskPacket& packet) {
+ xskInfo->processIncomingFrames([&](XskPacket packet) {
if (XskProcessQuery(*clientState, packet)) {
packet.updatePacket();
xskInfo->pushToSendQueue(packet);
return d_incomingPacketsQueue.read_available() != 0U;
}
-void XskWorker::processIncomingFrames(const std::function<void(XskPacket& packet)>& callback)
+void XskWorker::processIncomingFrames(const std::function<void(XskPacket packet)>& callback)
{
if (d_type == Type::OutgoingOnly) {
throw std::runtime_error("Looking for incoming packets in an outgoing-only XSK Worker");
d_incomingPacketsQueue.consume_all(callback);
}
-void XskWorker::processOutgoingFrames(const std::function<void(XskPacket& packet)>& callback)
+void XskWorker::processOutgoingFrames(const std::function<void(XskPacket packet)>& callback)
{
d_outgoingPacketsQueue.consume_all(callback);
}
void pushToProcessingQueue(XskPacket& packet);
void pushToSendQueue(XskPacket& packet);
bool hasIncomingFrames();
- void processIncomingFrames(const std::function<void(XskPacket& packet)>& callback);
- void processOutgoingFrames(const std::function<void(XskPacket& packet)>& callback);
+ void processIncomingFrames(const std::function<void(XskPacket packet)>& callback);
+ void processOutgoingFrames(const std::function<void(XskPacket packet)>& callback);
void markAsFree(const XskPacket& packet);
// notify worker that at least one packet is available for processing
void notifyWorker() const;