selftests: drv-net: test RSS header field configuration

Test reading RXFH fields over IOCTL and netlink.

  # ./tools/testing/selftests/drivers/net/hw/rss_api.py
  TAP version 13
  1..3
  ok 1 rss_api.test_rxfh_indir_ntf
  ok 2 rss_api.test_rxfh_indir_ctx_ntf
  ok 3 rss_api.test_rxfh_fields
  # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0

Link: https://patch.msgid.link/20250708220640.2738464-6-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2025-07-08 15:06:40 -07:00
parent 178331743c
commit 0c8754b75e

View File

@ -20,6 +20,38 @@ def _ethtool_create(cfg, act, opts):
return int(output.split()[-1])
def _ethtool_get_cfg(cfg, fl_type, to_nl=False):
descr = ethtool(f"-n {cfg.ifname} rx-flow-hash {fl_type}").stdout
if to_nl:
converter = {
"IP SA": "ip-src",
"IP DA": "ip-dst",
"L4 bytes 0 & 1 [TCP/UDP src port]": "l4-b-0-1",
"L4 bytes 2 & 3 [TCP/UDP dst port]": "l4-b-2-3",
}
ret = set()
else:
converter = {
"IP SA": "s",
"IP DA": "d",
"L3 proto": "t",
"L4 bytes 0 & 1 [TCP/UDP src port]": "f",
"L4 bytes 2 & 3 [TCP/UDP dst port]": "n",
}
ret = ""
for line in descr.split("\n")[1:-2]:
# if this raises we probably need to add more keys to converter above
if to_nl:
ret.add(converter[line])
else:
ret += converter[line]
return ret
def test_rxfh_indir_ntf(cfg):
"""
Check that Netlink notifications are generated when RSS indirection
@ -77,6 +109,21 @@ def test_rxfh_indir_ctx_ntf(cfg):
ksft_eq(set(ntf["msg"]["indir"]), {1})
def test_rxfh_fields(cfg):
"""
Test reading Rx Flow Hash over Netlink.
"""
flow_types = ["tcp4", "tcp6", "udp4", "udp6"]
ethnl = EthtoolFamily()
cfg_nl = ethnl.rss_get({"header": {"dev-index": cfg.ifindex}})
for fl_type in flow_types:
one = _ethtool_get_cfg(cfg, fl_type, to_nl=True)
ksft_eq(one, cfg_nl["flow-hash"][fl_type],
comment="Config for " + fl_type)
def main() -> None:
""" Ksft boiler plate main """