]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Keep processing XSK packets on exception
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 18 May 2026 11:04:42 +0000 (13:04 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 18 May 2026 11:04:42 +0000 (13:04 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/xsk.cc
pdns/dnsdistdist/xsk.hh

index 3017f121b8649380e9e56083cccfb9084b4e0e94..1a754e7e28fe81400ddc8f4b2c9e23cceb2ea453 100644 (file)
@@ -391,7 +391,7 @@ void XskSocket::recv(std::vector<XskPacket>& packets, uint32_t recvSizeMax, uint
     try {
       const auto* desc = xsk_ring_cons__rx_desc(&rx, idx++);
       // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast,performance-no-int-to-ptr)
-      XskPacket packet = XskPacket(reinterpret_cast<uint8_t*>(desc->addr + baseAddr), desc->len, frameSize);
+      auto packet = XskPacket(reinterpret_cast<uint8_t*>(desc->addr + baseAddr), desc->len, frameSize);
 #ifdef DEBUG_UMEM
       checkUmemIntegrity(__PRETTY_FUNCTION__, __LINE__, sharedEmptyFrameOffset, frameOffset(packet), {UmemEntryStatus::Status::FillQueue}, UmemEntryStatus::Status::Received);
 #endif /* DEBUG_UMEM */
@@ -407,12 +407,12 @@ void XskSocket::recv(std::vector<XskPacket>& packets, uint32_t recvSizeMax, uint
     catch (const std::exception& exp) {
       ++failed;
       ++processed;
-      break;
+      continue;
     }
     catch (...) {
       ++failed;
       ++processed;
-      break;
+      continue;
     }
   }
 
@@ -819,7 +819,7 @@ bool XskPacket::isIPV6() const noexcept
   return v6;
 }
 
-XskPacket::XskPacket(uint8_t* frame_, size_t dataSize, size_t frameSize_) :
+XskPacket::XskPacket(uint8_t* frame_, size_t dataSize, size_t frameSize_) noexcept :
   frame(frame_), frameLength(dataSize), frameSize(frameSize_ - XDP_PACKET_HEADROOM)
 {
 }
index bc1bb02654301580a01381a40b5c74073cc5a7d4..fc594118060ff99f907108d59804a37c67e42664 100644 (file)
@@ -260,7 +260,7 @@ public:
   /* Rewrite the headers, usually called after setAddr() then setPayload() */
   void rewrite() noexcept;
   void setHeader(PacketBuffer& buf);
-  XskPacket(uint8_t* frame, size_t dataSize, size_t frameSize);
+  XskPacket(uint8_t* frame, size_t dataSize, size_t frameSize) noexcept;
   void addDelay(int relativeMilliseconds) noexcept;
   /* If the payload has been updated, and the headers have not been rewritten via rewrite() yet,
      exchange the source and destination addresses (ethernet and IP) and rewrite the headers.