diff options
| author | Daniel Golle | 2025-02-12 04:21:22 +0000 |
|---|---|---|
| committer | Daniel Golle | 2025-02-24 05:07:01 +0000 |
| commit | 3a7467ffde413677de5465dde78a62dfa8d6774f (patch) | |
| tree | 2e3bf8fe6b2a33772f73124ebf3ba1dac413e16d | |
| parent | da2cc98458f46745de95e88b6066620fbd02b190 (diff) | |
| download | openwrt-3a7467ffde413677de5465dde78a62dfa8d6774f.tar.gz | |
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@makrotopia.org>
| -rw-r--r-- | package/network/utils/ethtool/Makefile | 5 | ||||
| -rw-r--r-- | package/network/utils/ethtool/patches/0001-ethtool-make-building-for-RSS-input-xfrm-optional.patch | 67 |
2 files changed, 72 insertions, 0 deletions
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@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@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 { |