aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/drivers/net/queues.py
diff options
context:
space:
mode:
authorJoe Damato <jdamato@fastly.com>2025-02-14 21:12:31 +0000
committerJakub Kicinski <kuba@kernel.org>2025-02-17 16:46:03 -0800
commit788e52e2b66844301fe09f3372d46d8c62f6ebe4 (patch)
treebaafd5580e809db095adac19000105a33a783460 /tools/testing/selftests/drivers/net/queues.py
parentnetdev-genl: Add an XSK attribute to queues (diff)
downloadlinux-788e52e2b66844301fe09f3372d46d8c62f6ebe4.tar.gz
linux-788e52e2b66844301fe09f3372d46d8c62f6ebe4.zip
selftests: drv-net: Test queue xsk attribute
Test that queues which are used for AF_XDP have the xsk nest attribute. The attribute is currently empty, but its existence means the AF_XDP is being used for the queue. Enable CONFIG_XDP_SOCKETS for selftests/drivers/net tests, as well. Signed-off-by: Joe Damato <jdamato@fastly.com> Suggested-by: Jakub Kicinski <kuba@kernel.org> Link: https://patch.msgid.link/20250214211255.14194-4-jdamato@fastly.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing/selftests/drivers/net/queues.py')
-rwxr-xr-xtools/testing/selftests/drivers/net/queues.py42
1 files changed, 39 insertions, 3 deletions
diff --git a/tools/testing/selftests/drivers/net/queues.py b/tools/testing/selftests/drivers/net/queues.py
index 38303da957ee..5fdfebc6415f 100755
--- a/tools/testing/selftests/drivers/net/queues.py
+++ b/tools/testing/selftests/drivers/net/queues.py
@@ -2,13 +2,16 @@
# SPDX-License-Identifier: GPL-2.0
from lib.py import ksft_disruptive, ksft_exit, ksft_run
-from lib.py import ksft_eq, ksft_raises, KsftSkipEx
+from lib.py import ksft_eq, ksft_raises, KsftSkipEx, KsftFailEx
from lib.py import EthtoolFamily, NetdevFamily, NlError
from lib.py import NetDrvEnv
from lib.py import cmd, defer, ip
import errno
import glob
-
+import os
+import socket
+import struct
+import subprocess
def sys_get_queues(ifname, qtype='rx') -> int:
folders = glob.glob(f'/sys/class/net/{ifname}/queues/{qtype}-*')
@@ -21,6 +24,39 @@ def nl_get_queues(cfg, nl, qtype='rx'):
return len([q for q in queues if q['type'] == qtype])
return None
+def check_xdp(cfg, nl, xdp_queue_id=0) -> None:
+ test_dir = os.path.dirname(os.path.realpath(__file__))
+ xdp = subprocess.Popen([f"{test_dir}/xdp_helper", f"{cfg.ifindex}", f"{xdp_queue_id}"],
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1,
+ text=True)
+ defer(xdp.kill)
+
+ stdout, stderr = xdp.communicate(timeout=10)
+ rx = tx = False
+
+ if xdp.returncode == 255:
+ raise KsftSkipEx('AF_XDP unsupported')
+ elif xdp.returncode > 0:
+ raise KsftFailEx('unable to create AF_XDP socket')
+
+ queues = nl.queue_get({'ifindex': cfg.ifindex}, dump=True)
+ if not queues:
+ raise KsftSkipEx("Netlink reports no queues")
+
+ for q in queues:
+ if q['id'] == 0:
+ if q['type'] == 'rx':
+ rx = True
+ if q['type'] == 'tx':
+ tx = True
+
+ ksft_eq(q['xsk'], {})
+ else:
+ if 'xsk' in q:
+ _fail("Check failed: xsk attribute set.")
+
+ ksft_eq(rx, True)
+ ksft_eq(tx, True)
def get_queues(cfg, nl) -> None:
snl = NetdevFamily(recv_size=4096)
@@ -81,7 +117,7 @@ def check_down(cfg, nl) -> None:
def main() -> None:
with NetDrvEnv(__file__, queue_count=100) as cfg:
- ksft_run([get_queues, addremove_queues, check_down], args=(cfg, NetdevFamily()))
+ ksft_run([get_queues, addremove_queues, check_down, check_xdp], args=(cfg, NetdevFamily()))
ksft_exit()