From: Ciara Loftus <ciara.loftus@intel.com>
To: dev@dpdk.org
Cc: Ciara Loftus <ciara.loftus@intel.com>
Subject: [RFC PATCH] net/af_xdp: use libxdp if available
Date: Fri, 10 Dec 2021 10:58:53 +0000 [thread overview]
Message-ID: <20211210105853.38161-1-ciara.loftus@intel.com> (raw)
AF_XDP support is deprecated in libbpf since v0.7.0 [1]. The
libxdp library now provides the functionality which once was in
libbpf and which the AF_XDP PMD relies on. This commit updates the
AF_XDP meson build to use the libxdp library if available. If it
is not available, only versions of libbpf prior to v0.7.0 are
allowed, as they still contain the required AF_XDP functionality.
libbpf still remains a dependency even if libxdp is present, as we
use libbpf APIs for program loading.
[1] https://github.com/libbpf/libbpf/commit/277846bc6c15
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
---
doc/guides/nics/af_xdp.rst | 4 +--
doc/guides/rel_notes/release_22_03.rst | 4 +++
drivers/net/af_xdp/compat.h | 4 +++
drivers/net/af_xdp/meson.build | 45 +++++++++++++++++++++-----
drivers/net/af_xdp/rte_eth_af_xdp.c | 1 -
5 files changed, 46 insertions(+), 12 deletions(-)
diff --git a/doc/guides/nics/af_xdp.rst b/doc/guides/nics/af_xdp.rst
index c9d0e1ad6c..966f713c11 100644
--- a/doc/guides/nics/af_xdp.rst
+++ b/doc/guides/nics/af_xdp.rst
@@ -43,9 +43,7 @@ Prerequisites
This is a Linux-specific PMD, thus the following prerequisites apply:
* A Linux Kernel (version > v4.18) with XDP sockets configuration enabled;
-* libbpf (within kernel version > v5.1-rc4) with latest af_xdp support installed,
- User can install libbpf via `make install_lib` && `make install_headers` in
- <kernel src tree>/tools/lib/bpf;
+* Both libxdp and libbpf libraries installed, or, libbpf <=v0.6.0
* A Kernel bound interface to attach to;
* For need_wakeup feature, it requires kernel version later than v5.3-rc1;
* For PMD zero copy, it requires kernel version later than v5.4-rc1;
diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst
index 6d99d1eaa9..acf0f66fa8 100644
--- a/doc/guides/rel_notes/release_22_03.rst
+++ b/doc/guides/rel_notes/release_22_03.rst
@@ -55,6 +55,10 @@ New Features
Also, make sure to start the actual text at the margin.
=======================================================
+* **Update AF_XDP PMD**
+
+ * Added libxdp support.
+
Removed Items
-------------
diff --git a/drivers/net/af_xdp/compat.h b/drivers/net/af_xdp/compat.h
index 3880dc7dd7..245df1b109 100644
--- a/drivers/net/af_xdp/compat.h
+++ b/drivers/net/af_xdp/compat.h
@@ -2,7 +2,11 @@
* Copyright(c) 2020 Intel Corporation.
*/
+#ifdef RTE_LIBRTE_AF_XDP_PMD_LIBXDP
+#include <xdp/xsk.h>
+#else
#include <bpf/xsk.h>
+#endif
#include <linux/version.h>
#include <poll.h>
diff --git a/drivers/net/af_xdp/meson.build b/drivers/net/af_xdp/meson.build
index 3ed2b29784..dc4f53352e 100644
--- a/drivers/net/af_xdp/meson.build
+++ b/drivers/net/af_xdp/meson.build
@@ -9,19 +9,48 @@ endif
sources = files('rte_eth_af_xdp.c')
+xdp_dep = dependency('libxdp', required: false, method: 'pkg-config')
+if not xdp_dep.found()
+ xdp_dep = cc.find_library('xdp', required: false)
+endif
+
bpf_dep = dependency('libbpf', required: false, method: 'pkg-config')
if not bpf_dep.found()
bpf_dep = cc.find_library('bpf', required: false)
endif
-if bpf_dep.found() and cc.has_header('bpf/xsk.h') and cc.has_header('linux/if_xdp.h')
- ext_deps += bpf_dep
- bpf_ver_dep = dependency('libbpf', version : '>=0.2.0',
- required: false, method: 'pkg-config')
- if bpf_ver_dep.found()
- dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM', 1)
+if cc.has_header('linux/if_xdp.h')
+ if xdp_dep.found() and cc.has_header('xdp/xsk.h')
+ if bpf_dep.found() and cc.has_header('bpf/bpf.h')
+ dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_LIBXDP', 1)
+ dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM', 1)
+ ext_deps += xdp_dep
+ ext_deps += bpf_dep
+ else
+ build = false
+ reason = 'missing dependency, libbpf'
+ endif
+ elif bpf_dep.found() and cc.has_header('bpf/xsk.h') and cc.has_header('bpf/bpf.h')
+ # libxdp not found. Rely solely on libbpf for xsk functionality
+ # which is only available in versions <= v0.6.0.
+ bpf_ver_dep = dependency('libbpf', version : '<=0.6.0',
+ required: false, method: 'pkg-config')
+ if bpf_ver_dep.found()
+ ext_deps += bpf_dep
+ bpf_shumem_ver_dep = dependency('libbpf', version : '>=0.2.0',
+ required: false, method: 'pkg-config')
+ if bpf_shumem_ver_dep.found()
+ dpdk_conf.set('RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM', 1)
+ endif
+ else
+ build = false
+ reason = 'missing dependency, "libxdp" or "libbpf <= v0.6.0"'
+ endif
+ else
+ build = false
+ reason = 'missing dependency, "libxdp" and "libbpf"'
endif
else
build = false
- reason = 'missing dependency, "libbpf"'
-endif
+ reason = 'missing header, "linux/if_xdp.h"'
+endif
\ No newline at end of file
diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c
index 96c2c9d939..5d89bebb01 100644
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
@@ -16,7 +16,6 @@
#include <linux/sockios.h>
#include "af_xdp_deps.h"
#include <bpf/bpf.h>
-#include <bpf/xsk.h>
#include <rte_ethdev.h>
#include <ethdev_driver.h>
--
2.17.1
next reply other threads:[~2021-12-10 10:59 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-10 10:58 Ciara Loftus [this message]
2022-01-12 13:07 ` [PATCH] " Ciara Loftus
2022-01-25 7:20 ` [PATCH v2] " Ciara Loftus
2022-01-25 9:27 ` Bruce Richardson
2022-01-27 8:42 ` Loftus, Ciara
2022-01-28 9:50 ` [PATCH v3] " Ciara Loftus
2022-01-31 17:59 ` Ferruh Yigit
2022-01-31 18:05 ` Bruce Richardson
2022-02-01 10:06 ` Ferruh Yigit
2022-02-01 10:11 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211210105853.38161-1-ciara.loftus@intel.com \
--to=ciara.loftus@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).