summaryrefslogtreecommitdiff
path: root/acinclude.m4
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2022-12-22 01:06:20 +0100
committerIlya Maximets <i.maximets@ovn.org>2023-01-03 16:06:21 +0100
commit1dcc490d44879f33392337dfd9175645fcc4118e (patch)
tree6308d1212ab5f45dce27136800fde8a1f9e7a371 /acinclude.m4
parent0d8318db633fb24936a0f55e869331f0c27f243f (diff)
downloadopenvswitch-1dcc490d44879f33392337dfd9175645fcc4118e.tar.gz
netdev-afxdp: Allow building with libxdp and newer libbpf.
AF_XDP functions was deprecated in libbpf 0.7 and moved to libxdp. Functions bpf_get/set_link_xdp_id() was deprecated in libbpf 0.8 and replaced with bpf_xdp_query_id() and bpf_xdp_attach/detach(). Updating configuration and source code to accommodate above changes and allow building OVS with AF_XDP support on newer systems: - Checking the version of libbpf by detecting availability of bpf_xdp_detach. - Checking availability of the libxdp in a system by looking for a library providing libxdp_strerror(), if libbpf is newer than 0.6. And checking for xsk.h header provided by libxdp-dev[el]. - Use xsk.h from libbpf if it is older than 0.7 and not linking with libxdp in this case as there are known incompatible versions of libxdp in distributions. - Check for the NEED_WAKEUP feature replaced with direct checking in the source code if XDP_USE_NEED_WAKEUP is defined. - Checking availability of bpf_xdp_query_id and bpf_xdp_detach and using them instead of deprecated APIs. Fall back to old functions if not found. - Dropped LIBBPF_LDADD variable as it makes library and function detection much harder without providing any actual benefits. AC_SEARCH_LIBS is used instead and it allows use of AC_CHECK_FUNCS. - Header includes moved around to files where they are actually used. - Removed libelf dependency as it is not really used. With these changes it should be possible to build OVS with either: - libbpf built from the kernel sources (5.19 or older). - libbpf < 0.7 provided in distributions. - libxdp and libbpf >= 0.7 provided in newer distributions. While it is technically possible to build with libbpf 0.7+ without libxdp at the moment we're not allowing that for a few reasons. First, required functions in libbpf are deprecated and can be removed in future releases. Second, support for all these combinations makes the detection code fairly complex. AFAIK, most of the distributions packaging libbpf 0.7+ do package libxdp as well. libxdp added as a build dependency for Fedora build since all supported versions of Fedora are packaging this library. Acked-by: Eelco Chaudron <echaudro@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'acinclude.m4')
-rw-r--r--acinclude.m428
1 files changed, 17 insertions, 11 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index aa9af5506..e47e925b3 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -251,7 +251,7 @@ AC_DEFUN([OVS_FIND_DEPENDENCY], [
dnl OVS_CHECK_LINUX_AF_XDP
dnl
-dnl Check both Linux kernel AF_XDP and libbpf support
+dnl Check both Linux kernel AF_XDP and libbpf/libxdp support
AC_DEFUN([OVS_CHECK_LINUX_AF_XDP], [
AC_ARG_ENABLE([afxdp],
[AS_HELP_STRING([--enable-afxdp], [Enable AF-XDP support])],
@@ -270,8 +270,21 @@ AC_DEFUN([OVS_CHECK_LINUX_AF_XDP], [
AC_CHECK_HEADER([linux/if_xdp.h], [],
[AC_MSG_ERROR([unable to find linux/if_xdp.h for AF_XDP support])])
- AC_CHECK_HEADER([bpf/xsk.h], [],
- [AC_MSG_ERROR([unable to find bpf/xsk.h for AF_XDP support])])
+ OVS_FIND_DEPENDENCY([libbpf_strerror], [bpf], [libbpf])
+ AC_CHECK_FUNCS([bpf_xdp_query_id bpf_xdp_detach])
+
+ if test "x$ac_cv_func_bpf_xdp_detach" = xyes; then
+ dnl We have libbpf >= 0.7. Look for libxdp as xsk functions
+ dnl were moved into this library.
+ OVS_FIND_DEPENDENCY([libxdp_strerror], [xdp], [libxdp])
+ AC_CHECK_HEADER([xdp/xsk.h],
+ AC_DEFINE([HAVE_LIBXDP], [1], [xsk.h is supplied with libxdp]),
+ AC_MSG_ERROR([unable to find xdp/xsk.h for AF_XDP support]))
+ else
+ dnl libbpf < 0.7 contains all the necessary functionality.
+ AC_CHECK_HEADER([bpf/xsk.h], [],
+ [AC_MSG_ERROR([unable to find bpf/xsk.h for AF_XDP support])])
+ fi
AC_CHECK_FUNCS([pthread_spin_lock], [],
[AC_MSG_ERROR([unable to find pthread_spin_lock for AF_XDP support])])
@@ -280,13 +293,6 @@ AC_DEFUN([OVS_CHECK_LINUX_AF_XDP], [
AC_DEFINE([HAVE_AF_XDP], [1],
[Define to 1 if AF_XDP support is available and enabled.])
- LIBBPF_LDADD=" -lbpf -lelf"
- AC_SUBST([LIBBPF_LDADD])
-
- AC_CHECK_DECL([xsk_ring_prod__needs_wakeup], [
- AC_DEFINE([HAVE_XDP_NEED_WAKEUP], [1],
- [XDP need wakeup support detected in xsk.h.])
- ], [], [[#include <bpf/xsk.h>]])
fi
AM_CONDITIONAL([HAVE_AF_XDP], test "$AF_XDP_ENABLE" = true)
])
@@ -357,7 +363,7 @@ AC_DEFUN([OVS_CHECK_DPDK], [
], [], [[#include <rte_config.h>]])
AC_CHECK_DECL([RTE_NET_AF_XDP], [
- LIBBPF_LDADD="-lbpf"
+ OVS_FIND_DEPENDENCY([libbpf_strerror], [bpf], [libbpf])
], [], [[#include <rte_config.h>]])
AC_CHECK_DECL([RTE_LIBRTE_VHOST_NUMA], [