d_config.sourceMACAddr = d_xskSockets.at(0)->getSourceMACAddress();
for (auto& xsk : d_xskSockets) {
- auto xskInfo = XskWorker::create(XskWorker::Type::Bidirectional);
+ auto xskInfo = XskWorker::create(XskWorker::Type::Bidirectional, xsk->sharedEmptyFrameOffset);
d_xskInfos.push_back(xskInfo);
xsk->addWorker(xskInfo);
- xskInfo->setSharedFrames(xsk->sharedEmptyFrameOffset);
}
reconnect(false);
}
std::shared_ptr<XskSocket> socket;
parseXskVars(vars, socket);
if (socket) {
- udpCS->xskInfo = XskWorker::create(XskWorker::Type::Bidirectional);
- udpCS->xskInfo->setSharedFrames(socket->sharedEmptyFrameOffset);
+ udpCS->xskInfo = XskWorker::create(XskWorker::Type::Bidirectional, socket->sharedEmptyFrameOffset);
socket->addWorker(udpCS->xskInfo);
socket->addWorkerRoute(udpCS->xskInfo, loc);
- udpCS->xskInfoResponder = XskWorker::create(XskWorker::Type::OutgoingOnly);
- udpCS->xskInfoResponder->setSharedFrames(socket->sharedEmptyFrameOffset);
+ udpCS->xskInfoResponder = XskWorker::create(XskWorker::Type::OutgoingOnly, socket->sharedEmptyFrameOffset);
socket->addWorker(udpCS->xskInfoResponder);
vinfolog("Enabling XSK in %s mode for incoming UDP packets to %s", socket->getXDPMode(), loc.toStringWithPort());
}
std::shared_ptr<XskSocket> socket;
parseXskVars(vars, socket);
if (socket) {
- udpCS->xskInfo = XskWorker::create(XskWorker::Type::Bidirectional);
- udpCS->xskInfo->setSharedFrames(socket->sharedEmptyFrameOffset);
+ udpCS->xskInfo = XskWorker::create(XskWorker::Type::Bidirectional, socket->sharedEmptyFrameOffset);
socket->addWorker(udpCS->xskInfo);
socket->addWorkerRoute(udpCS->xskInfo, loc);
- udpCS->xskInfoResponder = XskWorker::create(XskWorker::Type::OutgoingOnly);
- udpCS->xskInfoResponder->setSharedFrames(socket->sharedEmptyFrameOffset);
+ udpCS->xskInfoResponder = XskWorker::create(XskWorker::Type::OutgoingOnly, socket->sharedEmptyFrameOffset);
socket->addWorker(udpCS->xskInfoResponder);
vinfolog("Enabling XSK in %s mode for incoming UDP packets to %s", socket->getXDPMode(), loc.toStringWithPort());
}
}
}
-XskWorker::XskWorker(XskWorker::Type type) :
- d_type(type), workerWaker(createEventfd()), xskSocketWaker(createEventfd())
+XskWorker::XskWorker(XskWorker::Type type, const std::shared_ptr<LockGuarded<std::vector<uint64_t>>>& frames) :
+ d_sharedEmptyFrameOffset(frames), d_type(type), workerWaker(createEventfd()), xskSocketWaker(createEventfd())
{
}
notify(xskSocketWaker);
}
-std::shared_ptr<XskWorker> XskWorker::create(Type type)
+std::shared_ptr<XskWorker> XskWorker::create(Type type, const std::shared_ptr<LockGuarded<std::vector<uint64_t>>>& frames)
{
- return std::make_shared<XskWorker>(type);
+ return std::make_shared<XskWorker>(type, frames);
}
void XskSocket::addWorker(std::shared_ptr<XskWorker> worker)
d_workerRoutes.lock()->erase(dest);
}
-void XskWorker::setSharedFrames(std::shared_ptr<LockGuarded<vector<uint64_t>>>& frames)
-{
- d_sharedEmptyFrameOffset = frames;
-}
-
void XskWorker::setUmemBufBase(uint8_t* base)
{
d_umemBufBase = base;
static int createEventfd();
static void notify(int desc);
- static std::shared_ptr<XskWorker> create(Type);
+ static std::shared_ptr<XskWorker> create(Type type, const std::shared_ptr<LockGuarded<std::vector<uint64_t>>>& frames);
- XskWorker(Type);
- void setSharedFrames(std::shared_ptr<LockGuarded<vector<uint64_t>>>& frames);
+ XskWorker(Type type, const std::shared_ptr<LockGuarded<std::vector<uint64_t>>>& frames);
void setUmemBufBase(uint8_t* base);
void pushToProcessingQueue(XskPacket& packet);
void pushToSendQueue(XskPacket& packet);