]> 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:42:09 +0000 (09:42 +0200)
pdns/dnsdistdist/dnsdist-backend.cc
pdns/dnsdistdist/dnsdist-lua.cc
pdns/xsk.cc
pdns/xsk.hh

index 495242f4934d9b87b3d599dcbd5a583d45877e95..c4ea77d1cb7e678b69524461ff6119af5ff85f37 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 ed127a735b8e9a3d8a7e1933bb39f7d04a0d5601..a87fdfce3d2fad6fdbccd8c1b2463dbba2b442cf 100644 (file)
@@ -816,12 +816,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());
       }
@@ -874,12 +872,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 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);