]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Set the shared XSK frames in the XskWorker constructor
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 12 Jul 2024 07:41:53 +0000 (09:41 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 12 Jul 2024 07:46:00 +0000 (09:46 +0200)
(cherry picked from commit ae2d10d1c3eae6e5351a3914926bcf951db3fbfd)

pdns/dnsdist-lua.cc
pdns/dnsdistdist/dnsdist-backend.cc
pdns/xsk.cc
pdns/xsk.hh

index df1b0eb6df0dccbb2a05beaec8ddf6763b50639e..04003557afdbdfc97739136fe6bb0ee2b810cfff 100644 (file)
@@ -809,12 +809,10 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
       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());
       }
@@ -866,12 +864,10 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
       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());
       }
index 0710d39d66df0c3a25c463d4d8b7afae7f047373..d59a5df0dc0744d4b98a82b02a5696f763b085fe 100644 (file)
@@ -905,10 +905,9 @@ void DownstreamState::registerXsk(std::vector<std::shared_ptr<XskSocket>>& 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);
 }
index d21c075345bda2cc6f878f615d8929c6a45d0e5f..2d4ac83a4905804b9f023b9aa1d5523448e9c8a2 100644 (file)
@@ -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<LockGuarded<std::vector<uint64_t>>>& 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> 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)
@@ -1160,11 +1160,6 @@ void XskSocket::removeWorkerRoute(const ComboAddress& dest)
   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;
index a10e4f716d1f50e3da4e485ef248907258810bca..2f3e7c372e352a232e19f42dbba1219935f62596 100644 (file)
@@ -305,10 +305,9 @@ public:
 
   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);