summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2022-12-22 01:06:24 +0100
committerIlya Maximets <i.maximets@ovn.org>2023-01-03 16:06:30 +0100
commite44e80343189fcb7ec10d776f1b62747d7095c18 (patch)
tree3a3a73291c444a36764e02732c19e114b23cef52
parent771a55825f4a1d84c18439ae5a7485807169b0f9 (diff)
downloadopenvswitch-e44e80343189fcb7ec10d776f1b62747d7095c18.tar.gz
acinclude.m4: Build with AF_XDP support by default if possible.
With this change we will try to detect all the netdev-afxdp dependencies and enable AF_XDP support by default if they are present at the build time. Configuration script behaves in a following way: - ./configure --enable-afxdp Will check for AF_XDP dependencies and fail if they are not available. - ./configure --disable-afxdp Disables checking for AF_XDP. Build will not support AF_XDP even if all dependencies are installed. - Just ./configure or ./configure --enable-afxdp=auto Will check for AF_XDP dependencies. Will print a warning if they are not available, but will continue without AF_XDP support. If dependencies are available in a system, this option is equal to --enable-afxdp. '--disable-afxdp' added to the debian and fedora package builds to keep predictable behavior. Acked-by: Eelco Chaudron <echaudro@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rw-r--r--Documentation/intro/install/afxdp.rst6
-rw-r--r--NEWS3
-rw-r--r--acinclude.m472
-rwxr-xr-xdebian/rules25
-rw-r--r--rhel/openvswitch-fedora.spec.in2
5 files changed, 72 insertions, 36 deletions
diff --git a/Documentation/intro/install/afxdp.rst b/Documentation/intro/install/afxdp.rst
index a4f0b87fe..51c24bf5b 100644
--- a/Documentation/intro/install/afxdp.rst
+++ b/Documentation/intro/install/afxdp.rst
@@ -30,8 +30,7 @@ This document describes how to build and install Open vSwitch using
AF_XDP netdev.
.. warning::
- The AF_XDP support of Open vSwitch is considered 'experimental',
- and it is not compiled in by default.
+ The AF_XDP support of Open vSwitch is considered 'experimental'.
Introduction
@@ -137,6 +136,9 @@ bootstrap/configure the package::
./boot.sh && ./configure --enable-afxdp
+``--enable-afxdp`` here is optional, but it will ensure that all dependencies
+are available at the build time.
+
Finally, build and install OVS::
make && make install
diff --git a/NEWS b/NEWS
index ce5d11d73..2f6ededfe 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,9 @@ Post-v3.0.0
of handler and revalidator threads if necessary.
- AF_XDP:
* Added support for building with libxdp and libbpf >= 0.7.
+ * Support for AF_XDP is now enabled by default if all dependencies are
+ available at the build time. Use --disable-afxdp to disable.
+ Use --enable-afxdp to fail the build if dependencies are not present.
- ovs-appctl:
* "ovs-appctl ofproto/trace" command can now display port names with the
"--names" option.
diff --git a/acinclude.m4 b/acinclude.m4
index e47e925b3..8aecfb63d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -253,46 +253,70 @@ dnl OVS_CHECK_LINUX_AF_XDP
dnl
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])],
- [], [enable_afxdp=no])
+ AC_ARG_ENABLE(
+ [afxdp],
+ [AS_HELP_STRING([--disable-afxdp], [Disable AF-XDP support])],
+ [case "${enableval}" in
+ (yes | no | auto) ;;
+ (*) AC_MSG_ERROR([bad value ${enableval} for --enable-afxdp]) ;;
+ esac],
+ [enable_afxdp=auto])
+
AC_MSG_CHECKING([whether AF_XDP is enabled])
- if test "$enable_afxdp" != yes; then
+ if test "$enable_afxdp" == no; then
AC_MSG_RESULT([no])
AF_XDP_ENABLE=false
else
- AC_MSG_RESULT([yes])
+ AC_MSG_RESULT([$enable_afxdp])
AF_XDP_ENABLE=true
+ failed_dep=none
+ dnl Saving libs to restore in case we will end up not building with AF_XDP.
+ save_LIBS=$LIBS
- AC_CHECK_HEADER([bpf/libbpf.h], [],
- [AC_MSG_ERROR([unable to find bpf/libbpf.h for AF_XDP support])])
+ AC_CHECK_HEADER([bpf/libbpf.h], [], [failed_dep="bpf/libbpf.h"])
- AC_CHECK_HEADER([linux/if_xdp.h], [],
- [AC_MSG_ERROR([unable to find linux/if_xdp.h for AF_XDP support])])
+ if test "$failed_dep" = none; then
+ AC_CHECK_HEADER([linux/if_xdp.h], [], [failed_dep="linux/if_xdp.h"])
+ fi
- OVS_FIND_DEPENDENCY([libbpf_strerror], [bpf], [libbpf])
- AC_CHECK_FUNCS([bpf_xdp_query_id bpf_xdp_detach])
+ if test "$failed_dep" = none; then
+ AC_SEARCH_LIBS([libbpf_strerror], [bpf], [], [failed_dep="libbpf"])
+ AC_CHECK_FUNCS([bpf_xdp_query_id bpf_xdp_detach])
+ fi
- if test "x$ac_cv_func_bpf_xdp_detach" = xyes; then
+ if test "$failed_dep" = none -a "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
+ AC_SEARCH_LIBS([libxdp_strerror], [xdp],
+ AC_CHECK_HEADER([xdp/xsk.h],
+ AC_DEFINE([HAVE_LIBXDP], [1], [xsk.h is supplied with libxdp]),
+ [failed_dep="xdp/xsk.h"]),
+ [failed_dep="libxdp"])
+ elif test "$failed_dep" = none; then
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])])
+ AC_CHECK_HEADER([bpf/xsk.h], [], [failed_dep="bpf/xsk.h"])
fi
- AC_CHECK_FUNCS([pthread_spin_lock], [],
- [AC_MSG_ERROR([unable to find pthread_spin_lock for AF_XDP support])])
+ if test "$failed_dep" = none; then
+ AC_CHECK_FUNCS([pthread_spin_lock], [], [failed_dep="pthread_spin_lock"])
+ fi
- OVS_FIND_DEPENDENCY([numa_alloc_onnode], [numa], [libnuma])
+ if test "$failed_dep" = none; then
+ AC_SEARCH_LIBS([numa_alloc_onnode], [numa], [], [failed_dep="libnuma"])
+ fi
- AC_DEFINE([HAVE_AF_XDP], [1],
- [Define to 1 if AF_XDP support is available and enabled.])
+ if test "$failed_dep" = none; then
+ AC_DEFINE([HAVE_AF_XDP], [1],
+ [Define to 1 if AF_XDP support is available and enabled.])
+ elif test "$enable_afxdp" = yes; then
+ AC_MSG_ERROR([Missing $failed_dep dependency for AF_XDP support])
+ else
+ AC_MSG_WARN(m4_normalize(
+ [Cannot find $failed_dep, netdev-afxdp will not be supported
+ (use --disable-afxdp to suppress this warning).]))
+ AF_XDP_ENABLE=false
+ LIBS=$save_LIBS
+ fi
fi
AM_CONDITIONAL([HAVE_AF_XDP], test "$AF_XDP_ENABLE" = true)
])
diff --git a/debian/rules b/debian/rules
index 971bc1775..ddbd4dc5c 100755
--- a/debian/rules
+++ b/debian/rules
@@ -23,21 +23,26 @@ override_dh_auto_configure:
test -d _debian || mkdir _debian
cd _debian && ( \
test -e Makefile || \
- ../configure --prefix=/usr --localstatedir=/var --enable-ssl \
- --sysconfdir=/etc \
- $(DATAPATH_CONFIGURE_OPTS) \
- $(EXTRA_CONFIGURE_OPTS) \
- )
+ ../configure --prefix=/usr --localstatedir=/var \
+ --enable-ssl \
+ --disable-afxdp \
+ --sysconfdir=/etc \
+ $(DATAPATH_CONFIGURE_OPTS) \
+ $(EXTRA_CONFIGURE_OPTS) \
+ )
ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
test -d _dpdk || mkdir _dpdk
cd _dpdk && ( \
test -e Makefile || \
- ../configure --prefix=/usr --localstatedir=/var --enable-ssl \
- --with-dpdk=shared --sysconfdir=/etc \
- $(DATAPATH_CONFIGURE_OPTS) \
- $(EXTRA_CONFIGURE_OPTS) \
- )
+ ../configure --prefix=/usr --localstatedir=/var \
+ --enable-ssl \
+ --disable-afxdp \
+ --with-dpdk=shared \
+ --sysconfdir=/etc \
+ $(DATAPATH_CONFIGURE_OPTS) \
+ $(EXTRA_CONFIGURE_OPTS) \
+ )
endif
endif
diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
index eb5077a21..3091e204e 100644
--- a/rhel/openvswitch-fedora.spec.in
+++ b/rhel/openvswitch-fedora.spec.in
@@ -171,6 +171,8 @@ This package provides IPsec tunneling support for OVS tunnels.
%endif
%if %{with afxdp}
--enable-afxdp \
+%else
+ --disable-afxdp \
%endif
--enable-ssl \
--disable-static \