[openwrt/openwrt] ethtool: work-around ETHTOOL_GRSSH/ETHTOOL_SRSSH ABI breakage

LEDE Commits lede-commits at lists.infradead.org
Fri Feb 28 05:20:37 PST 2025


dangole pushed a commit to openwrt/openwrt.git, branch openwrt-24.10:
https://git.openwrt.org/e664fe6a21a7670382bebab0c93dced8e81fb8ed

commit e664fe6a21a7670382bebab0c93dced8e81fb8ed
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Wed Feb 12 04:21:22 2025 +0000

    ethtool: work-around ETHTOOL_GRSSH/ETHTOOL_SRSSH ABI breakage
    
    ethtool since version 6.9 introduced support for getting/setting RSS
    input transformation supported in Linux since version 6.8.
    
    The now changed kernel ioctl ABI, however, cannot be detected from
    userland, and ethtool since version 6.9 simply assumes that a previously
    reserved field is now used to set the input transformation.
    Unfortunately the default value RXH_XFRM_NO_CHANGE (0xff) used by ethtool
    userland creates an incompatibility with older kernels which cannot be
    resolved easily without introducing even more ABI breakage.
    
    Work-around the issue and fix support for --set-rxfh and --set-rxfh-indir
    ethtool userland tool commands by making the support for input_xfrm
    conditional on compile time, and keep it disabled for Linux 6.6.
    
    Fixes: 8c2dcd1518 ("ethtool: update to 6.10")
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
    Tested-by: Stijn Segers <foss at volatilesystems.org>
    (cherry picked from commit 3a7467ffde413677de5465dde78a62dfa8d6774f)
---
 package/network/utils/ethtool/Makefile             |  5 ++
 ...make-building-for-RSS-input-xfrm-optional.patch | 67 ++++++++++++++++++++++
 2 files changed, 72 insertions(+)

diff --git a/package/network/utils/ethtool/Makefile b/package/network/utils/ethtool/Makefile
index 893fcc1eda..5da65273ca 100644
--- a/package/network/utils/ethtool/Makefile
+++ b/package/network/utils/ethtool/Makefile
@@ -57,6 +57,11 @@ else
 CONFIGURE_ARGS += --disable-netlink --disable-pretty-dump
 endif
 
+# enable support for input_xfrm with kernels newer than 6.6
+ifeq ($(CONFIG_LINUX_6_6),)
+CONFIGURE_ARGS += --enable-rss-input-xfrm
+endif
+
 define Package/ethtool/install
 	$(INSTALL_DIR) $(1)/usr/sbin
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ethtool $(1)/usr/sbin
diff --git a/package/network/utils/ethtool/patches/0001-ethtool-make-building-for-RSS-input-xfrm-optional.patch b/package/network/utils/ethtool/patches/0001-ethtool-make-building-for-RSS-input-xfrm-optional.patch
new file mode 100644
index 0000000000..4c8403dcbc
--- /dev/null
+++ b/package/network/utils/ethtool/patches/0001-ethtool-make-building-for-RSS-input-xfrm-optional.patch
@@ -0,0 +1,67 @@
+From c88eb6f4e9b2d8f71f3391db2bf0ec82ecccae81 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Wed, 12 Feb 2025 04:12:42 +0000
+Subject: [PATCH] ethtool: make building for RSS input xfrm optional
+
+Unfortunately there is no way to detect at runtime if the kernel the
+support for RSS input transformation, and the default value
+RXH_XFRM_NO_CHANGE (0xff) used by newer ethtool results in breakage
+with older kernels.
+As a stop-gap solution simply don't compile with support for input
+xfrm by default.
+
+Signed-off-by: Daniel Golle <daniel at makrotopia.org>
+---
+ configure.ac | 10 ++++++++++
+ ethtool.c    | 10 ++++++++++
+ 2 files changed, 20 insertions(+)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -45,6 +45,16 @@ if test x$enable_pretty_dump = xyes; the
+ fi
+ AM_CONDITIONAL([ETHTOOL_ENABLE_PRETTY_DUMP], [test x$enable_pretty_dump = xyes])
+ 
++AC_ARG_ENABLE(rss-input-xfrm,
++	      [  --enable-rss-input-xfrm  build with support for RSS input transformation (disabled by default)],
++	      ,
++	      enable_rss_input_xfrm=no)
++if test x$enable_rss_input_xfrm = xyes; then
++    AC_DEFINE(ETHTOOL_ENABLE_RSS_INPUT_XFRM, 1,
++	      [Define this to enable building with support for RSS input transformation.])
++fi
++AM_CONDITIONAL([ETHTOOL_ENABLE_RSS_INPUT_XFRM], [test x$enable_rss_input_xfrm = xyes])
++
+ AC_ARG_WITH([bash-completion-dir],
+ 	    AS_HELP_STRING([--with-bash-completion-dir[=PATH]],
+ 	                   [Install the bash-completion script in this directory. @<:@default=yes@:>@]),
+--- a/ethtool.c
++++ b/ethtool.c
+@@ -4109,9 +4109,11 @@ static int do_grxfh(struct cmd_context *
+ 		       (const char *)hfuncs->data + i * ETH_GSTRING_LEN,
+ 		       (rss->hfunc & (1 << i)) ? "on" : "off");
+ 
++#ifdef ETHTOOL_ENABLE_RSS_INPUT_XFRM
+ 	printf("RSS input transformation:\n");
+ 	printf("    symmetric-xor: %s\n",
+ 	       (rss->input_xfrm & RXH_XFRM_SYM_XOR) ? "on" : "off");
++#endif
+ 
+ out:
+ 	free(hfuncs);
+@@ -4431,7 +4433,15 @@ static int do_srxfh(struct cmd_context *
+ 	rss->cmd = ETHTOOL_SRSSH;
+ 	rss->rss_context = rss_context;
+ 	rss->hfunc = req_hfunc;
++#ifdef ETHTOOL_ENABLE_RSS_INPUT_XFRM
+ 	rss->input_xfrm = req_input_xfrm;
++#else
++	if (req_input_xfrm != 0xff) {
++		perror("Compiled for kernel without support for input transformation");
++		err = 1;
++		goto free;
++	}
++#endif
+ 	if (delete) {
+ 		rss->indir_size = rss->key_size = 0;
+ 	} else {




More information about the lede-commits mailing list