diff options
author | Bui Quang Minh <minhquangbui99@gmail.com> | 2025-04-25 10:10:15 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2025-04-29 01:49:10 +0300 |
commit | 59dd07db92c166ca3947d2a1bf548d57b7f03316 (patch) | |
tree | c3407383b30b94e456ad8b8433a29ba19f5667da /tools/testing/selftests/drivers/net | |
parent | c0b0a360ed4ca077cf72a9c3cd15ac89f6093f3a (diff) | |
download | linux-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/.gitignore | 1 | ||||
-rw-r--r-- | tools/testing/selftests/drivers/net/Makefile | 1 | ||||
-rw-r--r-- | tools/testing/selftests/drivers/net/ksft.h | 56 | ||||
-rw-r--r-- | tools/testing/selftests/drivers/net/napi_id_helper.c | 2 | ||||
-rwxr-xr-x | tools/testing/selftests/drivers/net/queues.py | 4 | ||||
-rw-r--r-- | tools/testing/selftests/drivers/net/xdp_helper.c | 106 |
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; -} |