From: Remi Gacogne Date: Fri, 12 Jul 2024 07:41:53 +0000 (+0200) Subject: dnsdist: Set the shared XSK frames in the XskWorker constructor X-Git-Tag: rec-5.2.0-alpha1~179^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ae2d10d1c3eae6e5351a3914926bcf951db3fbfd;p=thirdparty%2Fpdns.git dnsdist: Set the shared XSK frames in the XskWorker constructor --- diff --git a/pdns/dnsdistdist/dnsdist-backend.cc b/pdns/dnsdistdist/dnsdist-backend.cc index 495242f493..c4ea77d1cb 100644 --- a/pdns/dnsdistdist/dnsdist-backend.cc +++ b/pdns/dnsdistdist/dnsdist-backend.cc @@ -905,10 +905,9 @@ void DownstreamState::registerXsk(std::vector>& xsks) 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); } diff --git a/pdns/dnsdistdist/dnsdist-lua.cc b/pdns/dnsdistdist/dnsdist-lua.cc index ed127a735b..a87fdfce3d 100644 --- a/pdns/dnsdistdist/dnsdist-lua.cc +++ b/pdns/dnsdistdist/dnsdist-lua.cc @@ -816,12 +816,10 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) std::shared_ptr 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()); } @@ -874,12 +872,10 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) std::shared_ptr 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()); } diff --git a/pdns/xsk.cc b/pdns/xsk.cc index d21c075345..2d4ac83a49 100644 --- a/pdns/xsk.cc +++ b/pdns/xsk.cc @@ -860,8 +860,8 @@ void XskWorker::notify(int desc) } } -XskWorker::XskWorker(XskWorker::Type type) : - d_type(type), workerWaker(createEventfd()), xskSocketWaker(createEventfd()) +XskWorker::XskWorker(XskWorker::Type type, const std::shared_ptr>>& frames) : + d_sharedEmptyFrameOffset(frames), d_type(type), workerWaker(createEventfd()), xskSocketWaker(createEventfd()) { } @@ -1134,9 +1134,9 @@ void XskWorker::notifyXskSocket() const notify(xskSocketWaker); } -std::shared_ptr XskWorker::create(Type type) +std::shared_ptr XskWorker::create(Type type, const std::shared_ptr>>& frames) { - return std::make_shared(type); + return std::make_shared(type, frames); } void XskSocket::addWorker(std::shared_ptr worker) @@ -1160,11 +1160,6 @@ void XskSocket::removeWorkerRoute(const ComboAddress& dest) d_workerRoutes.lock()->erase(dest); } -void XskWorker::setSharedFrames(std::shared_ptr>>& frames) -{ - d_sharedEmptyFrameOffset = frames; -} - void XskWorker::setUmemBufBase(uint8_t* base) { d_umemBufBase = base; diff --git a/pdns/xsk.hh b/pdns/xsk.hh index a10e4f716d..2f3e7c372e 100644 --- a/pdns/xsk.hh +++ b/pdns/xsk.hh @@ -305,10 +305,9 @@ public: static int createEventfd(); static void notify(int desc); - static std::shared_ptr create(Type); + static std::shared_ptr create(Type type, const std::shared_ptr>>& frames); - XskWorker(Type); - void setSharedFrames(std::shared_ptr>>& frames); + XskWorker(Type type, const std::shared_ptr>>& frames); void setUmemBufBase(uint8_t* base); void pushToProcessingQueue(XskPacket& packet); void pushToSendQueue(XskPacket& packet);