summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/drivers/net
diff options
context:
space:
mode:
authorBui Quang Minh <minhquangbui99@gmail.com>2025-04-25 10:10:15 +0300
committerJakub Kicinski <kuba@kernel.org>2025-04-29 01:49:10 +0300
commit59dd07db92c166ca3947d2a1bf548d57b7f03316 (patch)
treec3407383b30b94e456ad8b8433a29ba19f5667da /tools/testing/selftests/drivers/net
parentc0b0a360ed4ca077cf72a9c3cd15ac89f6093f3a (diff)
downloadlinux-59dd07db92c166ca3947d2a1bf548d57b7f03316.tar.xz
selftests: net: move xdp_helper to net/lib
Move xdp_helper to net/lib to make it easier for other selftests to use the helper. Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Link: https://patch.msgid.link/20250425071018.36078-2-minhquangbui99@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing/selftests/drivers/net')
-rw-r--r--tools/testing/selftests/drivers/net/.gitignore1
-rw-r--r--tools/testing/selftests/drivers/net/Makefile1
-rw-r--r--tools/testing/selftests/drivers/net/ksft.h56
-rw-r--r--tools/testing/selftests/drivers/net/napi_id_helper.c2
-rwxr-xr-xtools/testing/selftests/drivers/net/queues.py4
-rw-r--r--tools/testing/selftests/drivers/net/xdp_helper.c106
6 files changed, 3 insertions, 167 deletions
diff --git a/tools/testing/selftests/drivers/net/.gitignore b/tools/testing/selftests/drivers/net/.gitignore
index 72d2124fd513..d634d8395d90 100644
--- a/tools/testing/selftests/drivers/net/.gitignore
+++ b/tools/testing/selftests/drivers/net/.gitignore
@@ -1,3 +1,2 @@
# SPDX-License-Identifier: GPL-2.0-only
napi_id_helper
-xdp_helper
diff --git a/tools/testing/selftests/drivers/net/Makefile b/tools/testing/selftests/drivers/net/Makefile
index 47247c2ef948..17db31aa58c9 100644
--- a/tools/testing/selftests/drivers/net/Makefile
+++ b/tools/testing/selftests/drivers/net/Makefile
@@ -8,7 +8,6 @@ TEST_INCLUDES := $(wildcard lib/py/*.py) \
TEST_GEN_FILES := \
napi_id_helper \
- xdp_helper \
# end of TEST_GEN_FILES
TEST_PROGS := \
diff --git a/tools/testing/selftests/drivers/net/ksft.h b/tools/testing/selftests/drivers/net/ksft.h
deleted file mode 100644
index 17dc34a612c6..000000000000
--- a/tools/testing/selftests/drivers/net/ksft.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#if !defined(__NET_KSFT_H__)
-#define __NET_KSFT_H__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-static inline void ksft_ready(void)
-{
- const char msg[7] = "ready\n";
- char *env_str;
- int fd;
-
- env_str = getenv("KSFT_READY_FD");
- if (env_str) {
- fd = atoi(env_str);
- if (!fd) {
- fprintf(stderr, "invalid KSFT_READY_FD = '%s'\n",
- env_str);
- return;
- }
- } else {
- fd = STDOUT_FILENO;
- }
-
- write(fd, msg, sizeof(msg));
- if (fd != STDOUT_FILENO)
- close(fd);
-}
-
-static inline void ksft_wait(void)
-{
- char *env_str;
- char byte;
- int fd;
-
- env_str = getenv("KSFT_WAIT_FD");
- if (env_str) {
- fd = atoi(env_str);
- if (!fd) {
- fprintf(stderr, "invalid KSFT_WAIT_FD = '%s'\n",
- env_str);
- return;
- }
- } else {
- /* Not running in KSFT env, wait for input from STDIN instead */
- fd = STDIN_FILENO;
- }
-
- read(fd, &byte, sizeof(byte));
- if (fd != STDIN_FILENO)
- close(fd);
-}
-
-#endif
diff --git a/tools/testing/selftests/drivers/net/napi_id_helper.c b/tools/testing/selftests/drivers/net/napi_id_helper.c
index 7e8e7d373b61..eecd610c2109 100644
--- a/tools/testing/selftests/drivers/net/napi_id_helper.c
+++ b/tools/testing/selftests/drivers/net/napi_id_helper.c
@@ -8,7 +8,7 @@
#include <arpa/inet.h>
#include <sys/socket.h>
-#include "ksft.h"
+#include "../../net/lib/ksft.h"
int main(int argc, char *argv[])
{
diff --git a/tools/testing/selftests/drivers/net/queues.py b/tools/testing/selftests/drivers/net/queues.py
index 06abd3f233e1..236005290a33 100755
--- a/tools/testing/selftests/drivers/net/queues.py
+++ b/tools/testing/selftests/drivers/net/queues.py
@@ -26,13 +26,13 @@ def nl_get_queues(cfg, nl, qtype='rx'):
def check_xsk(cfg, nl, xdp_queue_id=0) -> None:
# Probe for support
- xdp = cmd(f'{cfg.test_dir / "xdp_helper"} - -', fail=False)
+ xdp = cmd(f'{cfg.net_lib_dir / "xdp_helper"} - -', fail=False)
if xdp.ret == 255:
raise KsftSkipEx('AF_XDP unsupported')
elif xdp.ret > 0:
raise KsftFailEx('unable to create AF_XDP socket')
- with bkg(f'{cfg.test_dir / "xdp_helper"} {cfg.ifindex} {xdp_queue_id}',
+ with bkg(f'{cfg.net_lib_dir / "xdp_helper"} {cfg.ifindex} {xdp_queue_id}',
ksft_wait=3):
rx = tx = False
diff --git a/tools/testing/selftests/drivers/net/xdp_helper.c b/tools/testing/selftests/drivers/net/xdp_helper.c
deleted file mode 100644
index d5bb8ac33efa..000000000000
--- a/tools/testing/selftests/drivers/net/xdp_helper.c
+++ /dev/null
@@ -1,106 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <linux/if_xdp.h>
-#include <linux/if_link.h>
-#include <net/if.h>
-#include <inttypes.h>
-
-#include "ksft.h"
-
-#define UMEM_SZ (1U << 16)
-#define NUM_DESC (UMEM_SZ / 2048)
-
-
-/* this is a simple helper program that creates an XDP socket and does the
- * minimum necessary to get bind() to succeed.
- *
- * this test program is not intended to actually process packets, but could be
- * extended in the future if that is actually needed.
- *
- * it is used by queues.py to ensure the xsk netlinux attribute is set
- * correctly.
- */
-int main(int argc, char **argv)
-{
- struct xdp_umem_reg umem_reg = { 0 };
- struct sockaddr_xdp sxdp = { 0 };
- int num_desc = NUM_DESC;
- void *umem_area;
- int ifindex;
- int sock_fd;
- int queue;
-
- if (argc != 3) {
- fprintf(stderr, "Usage: %s ifindex queue_id\n", argv[0]);
- return 1;
- }
-
- sock_fd = socket(AF_XDP, SOCK_RAW, 0);
- if (sock_fd < 0) {
- perror("socket creation failed");
- /* if the kernel doesn't support AF_XDP, let the test program
- * know with -1. All other error paths return 1.
- */
- if (errno == EAFNOSUPPORT)
- return -1;
- return 1;
- }
-
- /* "Probing mode", just checking if AF_XDP sockets are supported */
- if (!strcmp(argv[1], "-") && !strcmp(argv[2], "-")) {
- printf("AF_XDP support detected\n");
- close(sock_fd);
- return 0;
- }
-
- ifindex = atoi(argv[1]);
- queue = atoi(argv[2]);
-
- umem_area = mmap(NULL, UMEM_SZ, PROT_READ | PROT_WRITE, MAP_PRIVATE |
- MAP_ANONYMOUS, -1, 0);
- if (umem_area == MAP_FAILED) {
- perror("mmap failed");
- return 1;
- }
-
- umem_reg.addr = (uintptr_t)umem_area;
- umem_reg.len = UMEM_SZ;
- umem_reg.chunk_size = 2048;
- umem_reg.headroom = 0;
-
- setsockopt(sock_fd, SOL_XDP, XDP_UMEM_REG, &umem_reg,
- sizeof(umem_reg));
- setsockopt(sock_fd, SOL_XDP, XDP_UMEM_FILL_RING, &num_desc,
- sizeof(num_desc));
- setsockopt(sock_fd, SOL_XDP, XDP_UMEM_COMPLETION_RING, &num_desc,
- sizeof(num_desc));
- setsockopt(sock_fd, SOL_XDP, XDP_RX_RING, &num_desc, sizeof(num_desc));
-
- sxdp.sxdp_family = AF_XDP;
- sxdp.sxdp_ifindex = ifindex;
- sxdp.sxdp_queue_id = queue;
- sxdp.sxdp_flags = 0;
-
- if (bind(sock_fd, (struct sockaddr *)&sxdp, sizeof(sxdp)) != 0) {
- munmap(umem_area, UMEM_SZ);
- perror("bind failed");
- close(sock_fd);
- return 1;
- }
-
- ksft_ready();
- ksft_wait();
-
- /* parent program will write a byte to stdin when its ready for this
- * helper to exit
- */
-
- close(sock_fd);
- return 0;
-}