diff --git a/package/network/utils/xdp-tools/Makefile b/package/network/utils/xdp-tools/Makefile index 8bce10f634..404e4c0246 100644 --- a/package/network/utils/xdp-tools/Makefile +++ b/package/network/utils/xdp-tools/Makefile @@ -2,8 +2,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xdp-tools PKG_RELEASE:=1 -PKG_VERSION:=1.4.3 -PKG_HASH:=6e727e2c7c079dec86575c5d0e7aac7ecd582aabe04b3b176d7ef50e653b60c0 +PKG_VERSION:=1.5.8 +PKG_HASH:=e7b9717074c511fef34aab6e22b16af55fb33307505a5785d25a82b542e596ae PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/xdp-project/xdp-tools/tar.gz/v$(PKG_VERSION)? @@ -11,8 +11,7 @@ PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_VERSION)) PKG_MAINTAINER:=Daniel Golle -PKG_BUILD_DEPENDS:=bpf-headers -PKG_FLAGS:=nonshared +PKG_BUILD_DEPENDS:=bpf-headers bpftool/host include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/bpf.mk @@ -43,6 +42,21 @@ define Package/xdp-tools/Default DEPENDS:=+libxdp endef + +define Package/xdp-bench +$(call Package/xdp-tools/Default) + TITLE:=xdp-bench - an XDP benchmarking tool + DEPENDS+=@KERNEL_DEBUG_INFO_BTF @KERNEL_KPROBES +endef + +define Package/xdp-bench/description +XDP-bench is a benchmarking utility for exercising the different operation modes +of XDP. It is intended to be a simple program demonstrating the various operating +modes; these include dropping packets, hairpin forwarding (using the XDP_TX return +code), and redirection using the various in-kernel packet redirection facilities. +endef + + define Package/xdp-filter $(call Package/xdp-tools/Default) TITLE:=xdp-filter - a simple XDP-powered packet filter @@ -56,6 +70,24 @@ tens of millions of packets per second on a single CPU core. endef +define Package/xdp-forward +$(call Package/xdp-tools/Default) + TITLE:=xdp-forward - the XDP forwarding plane + DEPENDS+=@KERNEL_DEBUG_INFO_BTF +endef + +define Package/xdp-forward/description +xdp-forward is an XDP forwarding plane, which will accelerate +packet forwarding using XDP. To use it, simply load it on +the set of interfaces to accelerate forwarding between. + +The userspace component of xdp-forward will then configure and +load XDP programs on those interfaces, and forward packets between +them using XDP_REDIRECT, using the kernel routing table or +netfilter flowtable to determine the destination for each packet. +endef + + define Package/xdp-loader $(call Package/xdp-tools/Default) TITLE:=xdp-loader - an XDP program loader @@ -67,6 +99,38 @@ multiple programs to the same interface. To achieve this it exposes the same load and unload semantics exposed by the libxdp library. endef + +define Package/xdp-monitor +$(call Package/xdp-tools/Default) + TITLE:=xdp-monitor - a simple XDP tracepoint monitoring tool + DEPENDS+=@KERNEL_DEBUG_INFO_BTF @KERNEL_KPROBES +endef + +define Package/xdp-monitor/description +XDP-monitor is a tool that monitors various XDP related statistics and +events using BPF tracepoints infrastructure, trying to be as low overhead +as possible. +endef + + +define Package/xdp-trafficgen +$(call Package/xdp-tools/Default) + TITLE:=xdp-trafficgen - an XDP-based packet generator + DEPENDS+=@KERNEL_DEBUG_INFO_BTF @KERNEL_KPROBES +endef + +define Package/xdp-trafficgen/description +XDP-trafficgen is a packet generator utilising the XDP kernel subsystem +to generate packets transmit them through a network interface. +Packets are dynamically generated and transmitted in the kernel, +allowing for high performance (millions of packets per second per core). + +XDP-trafficgen supports generating UDP traffic with fixed or dynamic +destination ports, and also has basic support for generating dummy +TCP traffic on a single flow. +endef + + define Package/xdpdump $(call Package/xdp-tools/Default) TITLE:=xdpdump - tool for capturing packets at the XDP layer @@ -77,6 +141,7 @@ define Package/xdpdump/description xdpdump - a simple tcpdump like tool for capturing packets at the XDP layer endef + TARGET_LDFLAGS += $(INTL_LDFLAGS) CONFIGURE_VARS += \ @@ -85,10 +150,7 @@ CONFIGURE_VARS += \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ CLANG="$(CLANG)" \ - BPF_TARGET="$(BPF_ARCH)-linux-gnu" \ - LLC="$(LLVM_LLC)" \ - BPF_LDFLAGS="-march=$(BPF_TARGET) -mcpu=v3" \ - BPFTOOL="" + BPFTOOL="$(STAGING_DIR_HOST)/usr/sbin/bpftool" ifneq ($(findstring s,$(OPENWRT_VERBOSE)),) MAKE_FLAGS+=V=1 @@ -96,12 +158,9 @@ endif MAKE_VARS += \ PREFIX=/usr \ - RUNDIR=/tmp/run - -define Build/Configure - $(call Build/Configure/Default) - echo "BPF_CFLAGS += $(BPF_CFLAGS) -Wno-error -fno-stack-protector" >> $(PKG_BUILD_DIR)/config.mk -endef + RUNDIR=/tmp/run \ + CFLAGS="$(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include/xdp @@ -118,16 +177,36 @@ define Build/InstallDev $(1)/usr/lib/pkgconfig/libxdp.pc endef +define Package/xdp-bench/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdp-bench $(1)/usr/sbin +endef + define Package/xdp-filter/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdp-filter $(1)/usr/sbin endef +define Package/xdp-forward/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdp-forward $(1)/usr/sbin +endef + define Package/xdp-loader/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdp-loader $(1)/usr/sbin endef +define Package/xdp-monitor/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdp-monitor $(1)/usr/sbin +endef + +define Package/xdp-trafficgen/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdp-trafficgen $(1)/usr/sbin +endef + define Package/xdpdump/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xdpdump $(1)/usr/sbin @@ -140,6 +219,10 @@ define Package/libxdp/install endef $(eval $(call BuildPackage,libxdp)) +$(eval $(call BuildPackage,xdp-bench)) $(eval $(call BuildPackage,xdp-filter)) +$(eval $(call BuildPackage,xdp-forward)) $(eval $(call BuildPackage,xdp-loader)) +$(eval $(call BuildPackage,xdp-monitor)) +$(eval $(call BuildPackage,xdp-trafficgen)) $(eval $(call BuildPackage,xdpdump)) diff --git a/package/network/utils/xdp-tools/patches/010-configure-respect-LDFLAGS.patch b/package/network/utils/xdp-tools/patches/010-configure-respect-LDFLAGS.patch deleted file mode 100644 index 512ef09c7e..0000000000 --- a/package/network/utils/xdp-tools/patches/010-configure-respect-LDFLAGS.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/configure -+++ b/configure -@@ -191,7 +191,7 @@ int main(int argc, char **argv) { - return 0; - } - EOF -- libpcap_err=$($CC -o $TMPDIR/libpcaptest $TMPDIR/libpcaptest.c $LIBPCAP_CFLAGS $LIBPCAP_LDLIBS 2>&1) -+ libpcap_err=$($CC -o $TMPDIR/libpcaptest $TMPDIR/libpcaptest.c $LIBPCAP_CFLAGS $LIBPCAP_LDLIBS $LDFLAGS 2>&1) - if [ "$?" -eq "0" ]; then - echo "HAVE_PCAP:=y" >>$CONFIG - [ -n "$LIBPCAP_CFLAGS" ] && echo 'CFLAGS += ' $LIBPCAP_CFLAGS >> $CONFIG -@@ -267,7 +267,7 @@ int main(int argc, char **argv) { - return 0; - } - EOF -- compile_cmd="$CC -o $TMPDIR/libbpftest $TMPDIR/libbpftest.c -Werror $LIBBPF_CFLAGS $LIBBPF_LDLIBS" -+ compile_cmd="$CC -o $TMPDIR/libbpftest $TMPDIR/libbpftest.c -Werror $LIBBPF_CFLAGS $LIBBPF_LDLIBS $LDFLAGS" - libbpf_err=$($compile_cmd 2>&1) - if [ "$?" -eq "0" ]; then - echo "HAVE_FEATURES+=${config_var}" >>"$CONFIG" -@@ -345,7 +345,7 @@ int main(int argc, char **argv) { - } - EOF - -- libbpf_err=$($CC -o $TMPDIR/libbpftest $TMPDIR/libbpftest.c -Werror $LIBBPF_CFLAGS $LIBBPF_LDLIBS 2>&1) -+ libbpf_err=$($CC -o $TMPDIR/libbpftest $TMPDIR/libbpftest.c -Werror $LIBBPF_CFLAGS $LIBBPF_LDLIBS $LDFLAGS 2>&1) - if [ "$?" -eq "0" ]; then - echo "SYSTEM_LIBBPF:=y" >>$CONFIG - echo "LIBBPF_VERSION=$LIBBPF_VERSION" >>$CONFIG diff --git a/package/network/utils/xdp-tools/patches/020-libxdp-Use-__noinline__-reserved-attribute-for-XDP-d.patch b/package/network/utils/xdp-tools/patches/020-libxdp-Use-__noinline__-reserved-attribute-for-XDP-d.patch deleted file mode 100644 index bd6c0786b7..0000000000 --- a/package/network/utils/xdp-tools/patches/020-libxdp-Use-__noinline__-reserved-attribute-for-XDP-d.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 1f160c287c14b4300c4248752e20da5981c9763e Mon Sep 17 00:00:00 2001 -From: Christian Marangi -Date: Wed, 18 Jan 2023 19:00:54 +0100 -Subject: [PATCH] libxdp: Use __noinline__ reserved attribute for XDP - dispatcher - -The use of noinline is wrong as noline is not a reserved attribute and -with gcc12 this became an error. Use the reserved __noinline__ attribute -to fix compilation error. - -Signed-off-by: Christian Marangi -[a.heider: adapt lib/libxdp/protocol.org too] -Signed-off-by: Andre Heider ---- - lib/libxdp/protocol.org | 2 +- - lib/libxdp/xdp-dispatcher.c.in | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - ---- a/lib/libxdp/protocol.org -+++ b/lib/libxdp/protocol.org -@@ -59,7 +59,7 @@ static volatile const struct xdp_dispatc - /* The volatile return value prevents the compiler from assuming it knows the - * return value and optimising based on that. - */ --__attribute__ ((noinline)) -+__attribute__ ((__noinline__)) - int prog0(struct xdp_md *ctx) { - volatile int ret = XDP_DISPATCHER_RETVAL; - ---- a/lib/libxdp/xdp-dispatcher.c.in -+++ b/lib/libxdp/xdp-dispatcher.c.in -@@ -29,7 +29,7 @@ static volatile const struct xdp_dispatc - * return value and optimising based on that. - */ - forloop(`i', `0', NUM_PROGS, --`__attribute__ ((noinline)) -+`__attribute__ ((__noinline__)) - int format(`prog%d', i)(struct xdp_md *ctx) { - volatile int ret = XDP_DISPATCHER_RETVAL; - -@@ -39,7 +39,7 @@ int format(`prog%d', i)(struct xdp_md *c - } - ') - --__attribute__ ((noinline)) -+__attribute__ ((__noinline__)) - int compat_test(struct xdp_md *ctx) { - volatile int ret = XDP_DISPATCHER_RETVAL; - diff --git a/package/network/utils/xdp-tools/patches/022-xdp-dump-add-missing-perf_event-include-for-bpf-and-.patch b/package/network/utils/xdp-tools/patches/022-xdp-dump-add-missing-perf_event-include-for-bpf-and-.patch deleted file mode 100644 index edeb403281..0000000000 --- a/package/network/utils/xdp-tools/patches/022-xdp-dump-add-missing-perf_event-include-for-bpf-and-.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0388d7447de027e0d2369d6b8a9c58ea0f8f027c Mon Sep 17 00:00:00 2001 -From: Christian Marangi -Date: Wed, 18 Jan 2023 20:37:12 +0100 -Subject: [PATCH] xdp-dump: add missing perf_event include for bpf and xdp - -Add missing perf_event include needed for struct perf_event_header for -bpf and xdp. - -Signed-off-by: Christian Marangi ---- - xdp-dump/xdpdump_bpf.c | 1 + - xdp-dump/xdpdump_xdp.c | 1 + - 2 files changed, 2 insertions(+) - ---- a/xdp-dump/xdpdump_bpf.c -+++ b/xdp-dump/xdpdump_bpf.c -@@ -4,6 +4,7 @@ - * Include files - *****************************************************************************/ - #include -+#include - #include - #include - #include ---- a/xdp-dump/xdpdump_xdp.c -+++ b/xdp-dump/xdpdump_xdp.c -@@ -4,6 +4,7 @@ - * Include files - *****************************************************************************/ - #include -+#include - #include - #include - #include diff --git a/package/network/utils/xdp-tools/patches/024-lib-allow-overwriting-W-flags-via-BPF_CFLAGS.patch b/package/network/utils/xdp-tools/patches/024-lib-allow-overwriting-W-flags-via-BPF_CFLAGS.patch deleted file mode 100644 index 2b47dd4c54..0000000000 --- a/package/network/utils/xdp-tools/patches/024-lib-allow-overwriting-W-flags-via-BPF_CFLAGS.patch +++ /dev/null @@ -1,49 +0,0 @@ -From e2d8eae9477f6ba41ab75ad77202f235e34c04f7 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Wed, 18 Jan 2023 22:30:23 +0100 -Subject: [PATCH] lib: allow overwriting -W* flags via BPF_CFLAGS - -The bpf header file situation is a mess, and the default warning -compiler flags may not be suitable everywhere, especially with -Werror -in the mix. - -Move BPF_CFLAGS further down, so these can be overwritten by builders. - -Signed-off-by: Andre Heider ---- - lib/common.mk | 2 +- - lib/libxdp/Makefile | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - ---- a/lib/common.mk -+++ b/lib/common.mk -@@ -111,12 +111,12 @@ $(XDP_OBJ): %.o: %.c $(KERN_USER_H) $(EX - $(QUIET_CLANG)$(CLANG) -S \ - -target $(BPF_TARGET) \ - -D __BPF_TRACING__ \ -- $(BPF_CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ -+ $(BPF_CFLAGS) \ - -O2 -emit-llvm -c -g -o ${@:.o=.ll} $< - $(QUIET_LLC)$(LLC) -march=$(BPF_TARGET) -filetype=obj -o $@ ${@:.o=.ll} - ---- a/lib/libxdp/Makefile -+++ b/lib/libxdp/Makefile -@@ -138,12 +138,12 @@ $(XDP_OBJS): %.o: %.c $(BPF_HEADERS) $(L - $(QUIET_CLANG)$(CLANG) -S \ - -target $(BPF_TARGET) \ - -D __BPF_TRACING__ \ -- $(BPF_CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ -+ $(BPF_CFLAGS) \ - -O2 -emit-llvm -c -g -o ${@:.o=.ll} $< - $(QUIET_LLC)$(LLC) -march=$(BPF_TARGET) -filetype=obj -o $@ ${@:.o=.ll} - diff --git a/package/network/utils/xdp-tools/patches/025-Add-BPF_LDFLAGS-to-allow-overwriting-llc-s-march-arg.patch b/package/network/utils/xdp-tools/patches/025-Add-BPF_LDFLAGS-to-allow-overwriting-llc-s-march-arg.patch deleted file mode 100644 index d6d592b259..0000000000 --- a/package/network/utils/xdp-tools/patches/025-Add-BPF_LDFLAGS-to-allow-overwriting-llc-s-march-arg.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 7b00d4a90af1d7bff50833ffe1216cf59592353a Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Wed, 18 Jan 2023 22:42:28 +0100 -Subject: [PATCH] Add BPF_LDFLAGS to allow overwriting llc's -march argument - -The argument to clang's -target isn't necessarily the same as to -llc's -march. - -Analogue to BPF_CFLAGS, introduce BPF_LDFLAGS to allow e.g.: -BPF_TARGET="mipsel-linux-gnu" BPF_LDFLAGS="-march=bpfel -mcpu=v3" - -Signed-off-by: Andre Heider ---- - configure | 2 ++ - lib/common.mk | 2 +- - lib/libxdp/Makefile | 2 +- - 3 files changed, 4 insertions(+), 2 deletions(-) - ---- a/configure -+++ b/configure -@@ -17,10 +17,12 @@ check_opts() - : ${DYNAMIC_LIBXDP:=0} - : ${MAX_DISPATCHER_ACTIONS:=10} - : ${BPF_TARGET:=bpf} -+ : ${BPF_LDFLAGS:=-march=$(BPF_TARGET)} - 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 "BPF_LDFLAGS:=${BPF_LDFLAGS}" >>$CONFIG - } - - find_tool() ---- a/lib/common.mk -+++ b/lib/common.mk -@@ -118,7 +118,7 @@ $(XDP_OBJ): %.o: %.c $(KERN_USER_H) $(EX - -Werror \ - $(BPF_CFLAGS) \ - -O2 -emit-llvm -c -g -o ${@:.o=.ll} $< -- $(QUIET_LLC)$(LLC) -march=$(BPF_TARGET) -filetype=obj -o $@ ${@:.o=.ll} -+ $(QUIET_LLC)$(LLC) $(BPF_LDFLAGS) -filetype=obj -o $@ ${@:.o=.ll} - - $(BPF_SKEL_H): %.skel.h: %.bpf.o - $(QUIET_GEN)$(BPFTOOL) gen skeleton $< name ${@:.skel.h=} > $@ ---- a/lib/libxdp/Makefile -+++ b/lib/libxdp/Makefile -@@ -145,7 +145,7 @@ $(XDP_OBJS): %.o: %.c $(BPF_HEADERS) $(L - -Werror \ - $(BPF_CFLAGS) \ - -O2 -emit-llvm -c -g -o ${@:.o=.ll} $< -- $(QUIET_LLC)$(LLC) -march=$(BPF_TARGET) -filetype=obj -o $@ ${@:.o=.ll} -+ $(QUIET_LLC)$(LLC) $(BPF_LDFLAGS) -filetype=obj -o $@ ${@:.o=.ll} - - .PHONY: man - ifeq ($(EMACS),)