]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Properly detect whether `bpf_xdp_query` is available
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 25 Jan 2024 11:32:09 +0000 (12:32 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 25 Jan 2024 11:32:09 +0000 (12:32 +0100)
It was added in libbpf 0.7 and EL8 only has 0.5, sadly.

pdns/dnsdistdist/m4/pdns_with_xsk.m4
pdns/xsk.cc

index 32cee27077657c039180334f24e1f7babbb68265..a8faf138063c32d48e8e31fd4ad0383988749005 100644 (file)
@@ -14,6 +14,13 @@ AC_DEFUN([PDNS_WITH_XSK],[
       ], [:])
       PKG_CHECK_MODULES([BPF], [libbpf], [
         AC_DEFINE([HAVE_BPF], [1], [Define to 1 if you have the BPF library])
+        save_CFLAGS=$CFLAGS
+        save_LIBS=$LIBS
+        CFLAGS="$BPF_CFLAGS $CFLAGS"
+        LIBS="$BPF_LIBS $LIBS"
+        AC_CHECK_FUNCS([bpf_xdp_query])
+        CFLAGS=$save_CFLAGS
+        LIBS=$save_LIBS
       ], [:])
     ])
   ])
index 7c6d67e1bd3be92673958744004228c9ae9568ad..ee05b3a37a6c64f81455dc67a68b1c104e43e95e 100644 (file)
@@ -472,9 +472,10 @@ std::string XskSocket::getMetrics() const
 
 [[nodiscard]] std::string XskSocket::getXDPMode() const
 {
+#ifdef HAVE_BPF_XDP_QUERY
   unsigned int itfIdx = if_nametoindex(ifName.c_str());
   if (itfIdx == 0) {
-    return {};
+    return "unable to get interface index";
   }
   bpf_xdp_query_opts info{};
   info.sz = sizeof(info);
@@ -491,6 +492,9 @@ std::string XskSocket::getMetrics() const
   default:
     return "unknown";
   }
+#else /* HAVE_BPF_XDP_QUERY */
+  return "undetected";
+#endif /* HAVE_BPF_XDP_QUERY */
 }
 
 void XskSocket::markAsFree(const XskPacket& packet)