From 64e3d077967e350c5155652a30524bfaf82c75c2 Mon Sep 17 00:00:00 2001 From: Donald Hunter Date: Fri, 16 Sep 2022 16:24:20 +0100 Subject: [PATCH] Support libbpf v1 compliant section names Signed-off-by: Donald Hunter --- configure | 2 ++ headers/xdp/prog_dispatcher.h | 10 +++++++++- headers/xdp/xdp_helpers.h | 11 ++++++++++- lib/defines.mk | 4 ++++ lib/libxdp/libxdp.c | 11 +++++++---- lib/libxdp/xsk_def_xdp_prog.c | 1 + lib/libxdp/xsk_def_xdp_prog.h | 1 - lib/libxdp/xsk_def_xdp_prog_5.3.c | 1 + 8 files changed, 34 insertions(+), 7 deletions(-) diff --git a/configure b/configure index e72ea3e8..389ae4ca 100755 --- a/configure +++ b/configure @@ -17,10 +17,12 @@ check_opts() : ${DYNAMIC_LIBXDP:=0} : ${MAX_DISPATCHER_ACTIONS:=10} : ${BPF_TARGET:=bpf} + : ${LIBBPF_V1_COMPLIANT:=0} echo "PRODUCTION:=${PRODUCTION}" >>$CONFIG echo "DYNAMIC_LIBXDP:=${DYNAMIC_LIBXDP}" >>$CONFIG echo "MAX_DISPATCHER_ACTIONS:=${MAX_DISPATCHER_ACTIONS}" >>$CONFIG echo "BPF_TARGET:=${BPF_TARGET}" >>$CONFIG + echo "LIBBPF_V1_COMPLIANT:=${LIBBPF_V1_COMPLIANT}" >>$CONFIG } check_toolchain() diff --git a/headers/xdp/prog_dispatcher.h b/headers/xdp/prog_dispatcher.h index ff39ce34..71839b20 100644 --- a/headers/xdp/prog_dispatcher.h +++ b/headers/xdp/prog_dispatcher.h @@ -5,7 +5,15 @@ #include -#define XDP_METADATA_SECTION "xdp_metadata" +#define XDP_METADATA_SECTION_ORIG "xdp_metadata" +#define XDP_METADATA_SECTION_NEW ".data.xdp_metadata" + +#if defined(USE_LIBBPF_V1_SECTION_NAMES) +#define XDP_METADATA_SECTION XDP_METADATA_SECTION_NEW +#else +#define XDP_METADATA_SECTION XDP_METADATA_SECTION_ORIG +#endif + #define XDP_DISPATCHER_VERSION 1 /* default retval for dispatcher corresponds to the highest bit in the * chain_call_actions bitmap; we use this to make sure the dispatcher always diff --git a/headers/xdp/xdp_helpers.h b/headers/xdp/xdp_helpers.h index ec295367..44127c57 100644 --- a/headers/xdp/xdp_helpers.h +++ b/headers/xdp/xdp_helpers.h @@ -3,8 +3,17 @@ #ifndef __XDP_HELPERS_H #define __XDP_HELPERS_H +#define XDP_RUN_CONFIG_SECTION_ORIG "xdp_run_config" +#define XDP_RUN_CONFIG_SECTION_NEW ".data.xdp_run_config" + +#if defined(USE_LIBBPF_V1_SECTION_NAMES) +#define XDP_RUN_CONFIG_SECTION XDP_RUN_CONFIG_SECTION_NEW +#else +#define XDP_RUN_CONFIG_SECTION XDP_RUN_CONFIG_SECTION_ORIG +#endif + #define _CONCAT(x,y) x ## y -#define XDP_RUN_CONFIG(f) _CONCAT(_,f) SEC(".xdp_run_config") +#define XDP_RUN_CONFIG(f) _CONCAT(_,f) SEC(XDP_RUN_CONFIG_SECTION) #define XDP_DEFAULT_RUN_PRIO 50 #define XDP_DEFAULT_CHAIN_CALL_ACTIONS (1< #include #include +#include #include "compat.h" #include "libxdp_internal.h" -#define XDP_RUN_CONFIG_SEC ".xdp_run_config" - /* When cloning BPF fds, we want to make sure they don't end up as any of the * standard stdin, stderr, stdout descriptors: fd 0 can confuse the kernel, and * there are orchestration systems that will force-close the others if they @@ -885,7 +884,9 @@ static int xdp_program__parse_btf(struct xdp_program *xdp_prog, if (err) return err; - sec = btf_get_datasec(btf, XDP_RUN_CONFIG_SEC); + sec = btf_get_datasec(btf, XDP_RUN_CONFIG_SECTION_NEW); + if (!sec) + sec = btf_get_datasec(btf, XDP_RUN_CONFIG_SECTION_ORIG); if (!sec) return -ENOENT; @@ -1803,7 +1804,9 @@ int check_xdp_prog_version(const struct btf *btf, const char *name, __u32 *versi { const struct btf_type *sec, *def; - sec = btf_get_datasec(btf, XDP_METADATA_SECTION); + sec = btf_get_datasec(btf, XDP_METADATA_SECTION_NEW); + if (!sec) + sec = btf_get_datasec(btf, XDP_METADATA_SECTION_ORIG); if (!sec) return libxdp_err(-ENOENT); diff --git a/lib/libxdp/xsk_def_xdp_prog.c b/lib/libxdp/xsk_def_xdp_prog.c index b7d1dc9a..97e85409 100644 --- a/lib/libxdp/xsk_def_xdp_prog.c +++ b/lib/libxdp/xsk_def_xdp_prog.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "xsk_def_xdp_prog.h" diff --git a/lib/libxdp/xsk_def_xdp_prog.h b/lib/libxdp/xsk_def_xdp_prog.h index b51883d1..eda99ef3 100644 --- a/lib/libxdp/xsk_def_xdp_prog.h +++ b/lib/libxdp/xsk_def_xdp_prog.h @@ -3,7 +3,6 @@ #ifndef __LIBXDP_XSK_DEF_XDP_PROG_H #define __LIBXDP_XSK_DEF_XDP_PROG_H -#define XDP_METADATA_SECTION "xdp_metadata" #define XSK_PROG_VERSION 1 #endif /* __LIBXDP_XSK_DEF_XDP_PROG_H */ diff --git a/lib/libxdp/xsk_def_xdp_prog_5.3.c b/lib/libxdp/xsk_def_xdp_prog_5.3.c index 95702970..acd56ef9 100644 --- a/lib/libxdp/xsk_def_xdp_prog_5.3.c +++ b/lib/libxdp/xsk_def_xdp_prog_5.3.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "xsk_def_xdp_prog.h"