|
6 | 6 | """
|
7 | 7 |
|
8 | 8 | import glob
|
| 9 | +import random |
9 | 10 | from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_is, ksft_ne, ksft_raises
|
10 | 11 | from lib.py import KsftSkipEx, KsftFailEx
|
11 | 12 | from lib.py import defer, ethtool, CmdExitFailure
|
@@ -199,6 +200,38 @@ def test_rxfh_indir_ctx_ntf(cfg):
|
199 | 200 | ksft_eq(set(ntf["msg"]["indir"]), {1})
|
200 | 201 |
|
201 | 202 |
|
| 203 | +def test_rxfh_nl_set_key(cfg): |
| 204 | + """ |
| 205 | + Test setting hashing key via Netlink. |
| 206 | + """ |
| 207 | + |
| 208 | + dflt = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}}) |
| 209 | + defer(cfg.ethnl.rss_set, |
| 210 | + {"header": {"dev-index": cfg.ifindex}, |
| 211 | + "hkey": dflt["hkey"], "indir": None}) |
| 212 | + |
| 213 | + # Empty key should error out |
| 214 | + with ksft_raises(NlError) as cm: |
| 215 | + cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex}, |
| 216 | + "hkey": None}) |
| 217 | + ksft_eq(cm.exception.nl_msg.extack['bad-attr'], '.hkey') |
| 218 | + |
| 219 | + # Set key to random |
| 220 | + mod = random.randbytes(len(dflt["hkey"])) |
| 221 | + cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex}, |
| 222 | + "hkey": mod}) |
| 223 | + rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}}) |
| 224 | + ksft_eq(rss.get("hkey", [-1]), mod) |
| 225 | + |
| 226 | + # Set key to random and indir tbl to something at once |
| 227 | + mod = random.randbytes(len(dflt["hkey"])) |
| 228 | + cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex}, |
| 229 | + "indir": [0, 1], "hkey": mod}) |
| 230 | + rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}}) |
| 231 | + ksft_eq(rss.get("hkey", [-1]), mod) |
| 232 | + ksft_eq(set(rss.get("indir", [-1])), {0, 1}) |
| 233 | + |
| 234 | + |
202 | 235 | def test_rxfh_fields(cfg):
|
203 | 236 | """
|
204 | 237 | Test reading Rx Flow Hash over Netlink.
|
|
0 commit comments