Commit 169b2620 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

selftests: drv-net: rss_api: test setting hashing key via Netlink

Test setting hashing key via Netlink.

  # ./tools/testing/selftests/drivers/net/hw/rss_api.py
  TAP version 13
  1..7
  ok 1 rss_api.test_rxfh_nl_set_fail
  ok 2 rss_api.test_rxfh_nl_set_indir
  ok 3 rss_api.test_rxfh_nl_set_indir_ctx
  ok 4 rss_api.test_rxfh_indir_ntf
  ok 5 rss_api.test_rxfh_indir_ctx_ntf
  ok 6 rss_api.test_rxfh_nl_set_key
  ok 7 rss_api.test_rxfh_fields
  # Totals: pass:7 fail:0 xfail:0 xpass:0 skip:0 error:0

Link: https://patch.msgid.link/20250716000331.1378807-8-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 51798c51
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ API level tests for RSS (mostly Netlink vs IOCTL).
"""

import glob
import random
from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_is, ksft_ne, ksft_raises
from lib.py import KsftSkipEx, KsftFailEx
from lib.py import defer, ethtool, CmdExitFailure
@@ -199,6 +200,38 @@ def test_rxfh_indir_ctx_ntf(cfg):
    ksft_eq(set(ntf["msg"]["indir"]), {1})


def test_rxfh_nl_set_key(cfg):
    """
    Test setting hashing key via Netlink.
    """

    dflt = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}})
    defer(cfg.ethnl.rss_set,
          {"header": {"dev-index": cfg.ifindex},
           "hkey": dflt["hkey"], "indir": None})

    # Empty key should error out
    with ksft_raises(NlError) as cm:
        cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex},
                           "hkey": None})
    ksft_eq(cm.exception.nl_msg.extack['bad-attr'], '.hkey')

    # Set key to random
    mod = random.randbytes(len(dflt["hkey"]))
    cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex},
                       "hkey": mod})
    rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}})
    ksft_eq(rss.get("hkey", [-1]), mod)

    # Set key to random and indir tbl to something at once
    mod = random.randbytes(len(dflt["hkey"]))
    cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex},
                       "indir": [0, 1], "hkey": mod})
    rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}})
    ksft_eq(rss.get("hkey", [-1]), mod)
    ksft_eq(set(rss.get("indir", [-1])), {0, 1})


def test_rxfh_fields(cfg):
    """
    Test reading Rx Flow Hash over Netlink.