From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit05.runbox.com (mailtransmit05.runbox.com [185.226.149.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF2291DE4EC; Wed, 14 May 2025 22:16:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.38 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747260986; cv=none; b=KENE+3vnfppD0V9Y0lGl3kTciKeTJGsnDg+PVdO0f52qcHnVBGeF4wOpVCF/wOO/prols2q4QTlfrqa0dn/OJUviD/YMP4UzdrMT8R7qJTBW+aDDkyW6uiQImlKcmMIBvViSzjbjHCOzgw87+/YMB5St1jo7GYIAF54nuHq9kj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747260986; c=relaxed/simple; bh=bSKkn3nM3v0HO325xfei4C6jwzh4vhH/n43cB4LwQQo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XFDRRMpsc7AlcrXNPQHwyOfjlR7O99Seq6KrmpQQV3pkRHVlGXagUq3xGA4od1BE588fB/1JnNyQJSF5xFkW0LRcVS93yR+u83feHtdGwzwxFHi/qllwfmwV10jR3h+iNMIcbXmphuxysS8EuKlj39fqxWDIKi03moNuNNN9W9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=EMeWv17R; arc=none smtp.client-ip=185.226.149.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="EMeWv17R" Received: from mailtransmit03.runbox ([10.9.9.163] helo=aibo.runbox.com) by mailtransmit05.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOd-001k89-MD; Thu, 15 May 2025 00:16:15 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=2FzBNg4m8mbkJzKlkeWZy30zedQWDfDv4O7u47x1mWw=; b=EMeWv17RUFXQ718dcHVOn3tTay AaR8mGj4xF+pQHfScZpqlD/wKBjZLbJTiu7jpZwgOCIPmgTrykyf/dPHrQLlu55oIGPFkVTqGgH4O KgRE8JP1iW8gcjjMHOfhZv/0XWEwDU4iJIKO4f8Mo8lkB1w+FFqsVIs3Jx4oJqaZSq717PSx+cRml Xh+rRERVqOJUt7TYhUqUtGSKQ+Cfl6SrZf6udppJl+RTjpmPtBozQyX5VU2pSZVIYyd/804M6Eavi u5zi+frG/qBcI4PUwmL63a+5S2IilIy872Yvh8ixQXV6e1f3oIj8CHpJAmsA203w1WvKdaLhZHOlb c0Sf/6xg==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOc-00089Q-9r; Thu, 15 May 2025 00:16:15 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOJ-005bJ3-U9; Thu, 15 May 2025 00:15:56 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:24 +0200 Subject: [PATCH bpf-next v3 1/8] selftests/bpf: Support af_unix SOCK_DGRAM socket pair creation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-1-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Handle af_unix in init_addr_loopback(). For pair creation, bind() the peer socket to make SOCK_DGRAM connect() happy. Reviewed-by: Jakub Sitnicki Acked-by: John Fastabend Signed-off-by: Michal Luczaj Suggested-by: Jakub Sitnicki --- .../selftests/bpf/prog_tests/socket_helpers.h | 29 ++++++++++++++++++= ---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/socket_helpers.h b/tool= s/testing/selftests/bpf/prog_tests/socket_helpers.h index 1bdfb79ef009b16e329a80eab8598ed97dae9119..e505c2f2595a24be9dd5b534dee= f4793f9a02f77 100644 --- a/tools/testing/selftests/bpf/prog_tests/socket_helpers.h +++ b/tools/testing/selftests/bpf/prog_tests/socket_helpers.h @@ -3,6 +3,7 @@ #ifndef __SOCKET_HELPERS__ #define __SOCKET_HELPERS__ =20 +#include #include =20 /* include/linux/net.h */ @@ -169,6 +170,15 @@ static inline void init_addr_loopback6(struct sockaddr= _storage *ss, *len =3D sizeof(*addr6); } =20 +static inline void init_addr_loopback_unix(struct sockaddr_storage *ss, + socklen_t *len) +{ + struct sockaddr_un *addr =3D memset(ss, 0, sizeof(*ss)); + + addr->sun_family =3D AF_UNIX; + *len =3D sizeof(sa_family_t); +} + static inline void init_addr_loopback_vsock(struct sockaddr_storage *ss, socklen_t *len) { @@ -190,6 +200,9 @@ static inline void init_addr_loopback(int family, struc= t sockaddr_storage *ss, case AF_INET6: init_addr_loopback6(ss, len); return; + case AF_UNIX: + init_addr_loopback_unix(ss, len); + return; case AF_VSOCK: init_addr_loopback_vsock(ss, len); return; @@ -315,21 +328,27 @@ static inline int create_pair(int family, int sotype,= int *p0, int *p1) { __close_fd int s, c =3D -1, p =3D -1; struct sockaddr_storage addr; - socklen_t len =3D sizeof(addr); + socklen_t len; int err; =20 s =3D socket_loopback(family, sotype); if (s < 0) return s; =20 - err =3D xgetsockname(s, sockaddr(&addr), &len); - if (err) - return err; - c =3D xsocket(family, sotype, 0); if (c < 0) return c; =20 + init_addr_loopback(family, &addr, &len); + err =3D xbind(c, sockaddr(&addr), len); + if (err) + return err; + + len =3D sizeof(addr); + err =3D xgetsockname(s, sockaddr(&addr), &len); + if (err) + return err; + err =3D connect(c, sockaddr(&addr), len); if (err) { if (errno !=3D EINPROGRESS) { --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit04.runbox.com (mailtransmit04.runbox.com [185.226.149.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8F3321D583; Wed, 14 May 2025 23:09:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.37 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747264153; cv=none; b=hJrrpY1/tcRAmrereKQGAvzeMdbvvI23NxdyXB04Q6P3FhlPXJrYFaaQ/rJwoek2KQfRBmDbjUJb3Jcrcmegyvdjf2NgjLjAMzH+3Pro9TxiPyrhWMjhQn83kjr0/J+W3KmH/tMbuZgRLxUS0ql3Eeocv+sL4AriQexmYSEYl9o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747264153; c=relaxed/simple; bh=Iuzoe7DKzMD2kAfuDIP169BtqFJDXUA+gwo+3nrjFhU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LZyDSfisMnU3lQrivsw+AmEhbNlvnEZ6Vp8ox7Mw7/UqOkUkwAFZt3URaJsHjysLV+oWtLfVVOHEAyGzzBZnkemqEalSvw2ZMwM/zrgXbD+clGsg8aTMGdN7Y1vAVv/RznH/ziOw8VOmmVqDLz3t/KKtCSZss5ILm/aX8OXc46Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=VSqETHou; arc=none smtp.client-ip=185.226.149.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="VSqETHou" Received: from mailtransmit03.runbox ([10.9.9.163] helo=aibo.runbox.com) by mailtransmit04.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOX-001vcm-U4; Thu, 15 May 2025 00:16:09 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=jWUYdUduK67slCNoez8gpDfTauScyXVzhPIoLCAsEKo=; b=VSqETHouk5UKAXnwg76AhdXkR4 lJpWg0VG3vPKAdYyKI3kjtZzBXyVJXXZVU4LSCONrQTx1j67L1L3HLmjFAPxrFTtkTB4JpK0g3wOe os1qIJXFE/p0iLcOQfx4IygFJMwaCGh52srarYEcuxV0VkTR3ejyAf7B5+h9lq+RmXfiB+Cx98UHx dLJJmamPaIJH6DX3bxTTBxP7gsfgFEbRvUzA/zA75neg6jHiZTEQ5iX9buACRf7ajhWA0yEchjuIS oD1dh1ct1phBUVyfPyznJT53I9T2pLc9+quJ5dUj6OaGgewGsB5g6Xdv6bcOvrzM2knL3ZBCWxI3S H57O+dhQ==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOW-00088m-Vq; Thu, 15 May 2025 00:16:09 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOK-005bJ3-QP; Thu, 15 May 2025 00:15:56 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:25 +0200 Subject: [PATCH bpf-next v3 2/8] selftests/bpf: Add socket_kind_to_str() to socket_helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-2-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Add function that returns string representation of socket's domain/type. Suggested-by: Jakub Sitnicki Reviewed-by: Jakub Sitnicki Acked-by: John Fastabend Signed-off-by: Michal Luczaj --- .../selftests/bpf/prog_tests/socket_helpers.h | 55 ++++++++++++++++++= ++++ 1 file changed, 55 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/socket_helpers.h b/tool= s/testing/selftests/bpf/prog_tests/socket_helpers.h index e505c2f2595a24be9dd5b534deef4793f9a02f77..e02cabcc814e9a6a11d61ad02cf= 38696fb0f27ff 100644 --- a/tools/testing/selftests/bpf/prog_tests/socket_helpers.h +++ b/tools/testing/selftests/bpf/prog_tests/socket_helpers.h @@ -410,4 +410,59 @@ static inline int create_socket_pairs(int family, int = sotype, int *c0, int *c1, return err; } =20 +static inline const char *socket_kind_to_str(int sock_fd) +{ + socklen_t opt_len; + int domain, type; + + opt_len =3D sizeof(domain); + if (getsockopt(sock_fd, SOL_SOCKET, SO_DOMAIN, &domain, &opt_len)) + FAIL_ERRNO("getsockopt(SO_DOMAIN)"); + + opt_len =3D sizeof(type); + if (getsockopt(sock_fd, SOL_SOCKET, SO_TYPE, &type, &opt_len)) + FAIL_ERRNO("getsockopt(SO_TYPE)"); + + switch (domain) { + case AF_INET: + switch (type) { + case SOCK_STREAM: + return "tcp4"; + case SOCK_DGRAM: + return "udp4"; + } + break; + case AF_INET6: + switch (type) { + case SOCK_STREAM: + return "tcp6"; + case SOCK_DGRAM: + return "udp6"; + } + break; + case AF_UNIX: + switch (type) { + case SOCK_STREAM: + return "u_str"; + case SOCK_DGRAM: + return "u_dgr"; + case SOCK_SEQPACKET: + return "u_seq"; + } + break; + case AF_VSOCK: + switch (type) { + case SOCK_STREAM: + return "v_str"; + case SOCK_DGRAM: + return "v_dgr"; + case SOCK_SEQPACKET: + return "v_seq"; + } + break; + } + + return "???"; +} + #endif // __SOCKET_HELPERS__ --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit04.runbox.com (mailtransmit04.runbox.com [185.226.149.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB21F222584 for ; Wed, 14 May 2025 22:43:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.37 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747262594; cv=none; b=SuLLNXyRy045dy+Vvd1eJzY0RzAq2X2cghtSqpuLOkAHaVcSgpQwQG80h5B3GNanvkQ9k7Ke84iPWw6oW5bXRJNAKTBN5+SY+xoJby76VLqC5x3bbVvnLjq3NGGIb4NEj4MVXEWYTR93pDho+tKm/s3ZhVQmwbfsVTsJZ/A4Xr0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747262594; c=relaxed/simple; bh=QaLq3SL5OMyc+7AJ0LFBdLmC+RjvCwNSMZ9ekuidqGc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CsEru+e2w3TYgGJ6txePggOJm1Gj9O27NWh/7KBY9mYfuMaV+D6AP+OXTTt3ZWbI8HgsmRyppz9MzQbsGfZ3PJmL+gDoBQnaK2xC13XVh8N+TLjGsKhmeYO58Uf1YO8qYZEJbEbu0pq7JDVEd/aURK4UtCE20A/fcOnrYLAYhzU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=Fu8gYC92; arc=none smtp.client-ip=185.226.149.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="Fu8gYC92" Received: from mailtransmit03.runbox ([10.9.9.163] helo=aibo.runbox.com) by mailtransmit04.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOi-001vfF-Uv; Thu, 15 May 2025 00:16:20 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=YG06fwNA91GgAgl0iabbu4fCCpsHoTGuufLEYHdsOVQ=; b=Fu8gYC92Gc4FYsuJmGaB3Vwd6T rThnDcs+ZCtJlOcVhBbC2b/gHkYSlbQfV2lWzK6zkBSKT20rjoaM6eJ4D2b752oRCEyfzAeq1+BTk Akr4mOhl0Sc0S4m8D0oFqLeUx2kPfQYhn+WTnYgOe/oT4h9L3l7rESvGkD57m9huIKd8osIx8WAra eMq00unNsAmAmFFZO989oMwca5PZXevX+AnjAglQ1N+6LzTVUMr3k4/GNXiyWMA4uXsL9mPAQonXI HFOBi+dGkw7KoLOqiyx7Xnn+FiqZhdc9lT3N1Z5g2/GFYkqizWTTqEwmBTVqyyaWv5+uB2oOX0GGs b7Z7uN+A==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOi-0008AG-J3; Thu, 15 May 2025 00:16:20 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOL-005bJ3-Mr; Thu, 15 May 2025 00:15:57 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:26 +0200 Subject: [PATCH bpf-next v3 3/8] selftests/bpf: Add u32()/u64() to sockmap_helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-3-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Add integer wrappers for convenient sockmap usage. While there, fix misaligned trailing slashes. Suggested-by: Jakub Sitnicki Reviewed-by: Jakub Sitnicki Acked-by: John Fastabend Signed-off-by: Michal Luczaj --- .../selftests/bpf/prog_tests/sockmap_helpers.h | 25 ++++++++++--------= ---- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h b/too= ls/testing/selftests/bpf/prog_tests/sockmap_helpers.h index 3e5571dd578d12a6f8195bf3d25e069a1e477416..d815efac52fda9592274bb8606c= 8698fa4baf9c6 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_helpers.h @@ -5,12 +5,15 @@ =20 #define MAX_TEST_NAME 80 =20 +#define u32(v) ((u32){(v)}) +#define u64(v) ((u64){(v)}) + #define __always_unused __attribute__((__unused__)) =20 #define xbpf_map_delete_elem(fd, key) = \ ({ \ int __ret =3D bpf_map_delete_elem((fd), (key)); \ - if (__ret < 0) \ + if (__ret < 0) \ FAIL_ERRNO("map_delete"); \ __ret; \ }) @@ -18,7 +21,7 @@ #define xbpf_map_lookup_elem(fd, key, val) = \ ({ \ int __ret =3D bpf_map_lookup_elem((fd), (key), (val)); \ - if (__ret < 0) \ + if (__ret < 0) \ FAIL_ERRNO("map_lookup"); \ __ret; \ }) @@ -26,7 +29,7 @@ #define xbpf_map_update_elem(fd, key, val, flags) = \ ({ \ int __ret =3D bpf_map_update_elem((fd), (key), (val), (flags)); \ - if (__ret < 0) \ + if (__ret < 0) \ FAIL_ERRNO("map_update"); \ __ret; \ }) @@ -35,7 +38,7 @@ ({ \ int __ret =3D \ bpf_prog_attach((prog), (target), (type), (flags)); \ - if (__ret < 0) \ + if (__ret < 0) \ FAIL_ERRNO("prog_attach(" #type ")"); \ __ret; \ }) @@ -43,7 +46,7 @@ #define xbpf_prog_detach2(prog, target, type) = \ ({ \ int __ret =3D bpf_prog_detach2((prog), (target), (type)); \ - if (__ret < 0) \ + if (__ret < 0) \ FAIL_ERRNO("prog_detach2(" #type ")"); \ __ret; \ }) @@ -66,21 +69,15 @@ __ret; \ }) =20 -static inline int add_to_sockmap(int sock_mapfd, int fd1, int fd2) +static inline int add_to_sockmap(int mapfd, int fd1, int fd2) { - u64 value; - u32 key; int err; =20 - key =3D 0; - value =3D fd1; - err =3D xbpf_map_update_elem(sock_mapfd, &key, &value, BPF_NOEXIST); + err =3D xbpf_map_update_elem(mapfd, &u32(0), &u64(fd1), BPF_NOEXIST); if (err) return err; =20 - key =3D 1; - value =3D fd2; - return xbpf_map_update_elem(sock_mapfd, &key, &value, BPF_NOEXIST); + return xbpf_map_update_elem(mapfd, &u32(1), &u64(fd2), BPF_NOEXIST); } =20 #endif // __SOCKMAP_HELPERS__ --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit05.runbox.com (mailtransmit05.runbox.com [185.226.149.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 996F91EB189; Wed, 14 May 2025 22:16:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.38 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747260988; cv=none; b=P+rrA5a1di7w9vD1n9mrKdP9sB9JZdwvFHq5UlVb6wWxjBhsoyU4dAD+JJ5ME6NkVxPlw6ZDLNzg8Vdd05xXkvv/OY9z3wTLDDe9nNoBG7e/urdw0lOVDWdf5tKaTKgjt63m+Q2bbKyAZkrpKfUZxO5+cJJlbUtclTsceRx99pk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747260988; c=relaxed/simple; bh=AWk9Ca73id5F9YQWEPEIhc+mFJs28UXN1ReaPw4guow=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lDkxWJLVNA/QaZiObJubUED2QRxSd2jIfRChdP8yBOAbU7Kz1CSBtpBA9rZX5KGyKiEfNfhdkI667r2/jZLGpveXWBENleifVl4Amse8NSl0aCO2U0rvqeHYcGYnz2n/Rgm2pfjpEcKgUZbBgDId2WbKkJFlSRLlpiuWQeujqQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=cht9WUif; arc=none smtp.client-ip=185.226.149.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="cht9WUif" Received: from mailtransmit03.runbox ([10.9.9.163] helo=aibo.runbox.com) by mailtransmit05.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOk-001k8n-6z; Thu, 15 May 2025 00:16:22 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=UbCVgwxpRFnpFZpXah8Lt7X+QYdpyqNgSqr+wPpYtPk=; b=cht9WUifGa0X8aAJ6An+SP07zu DUPWUug0oVB9ikoJn8A6bqspOAtUkB+Y0VuycJzgnla9gyavB6yVm6TPme+SJcDpbwySTIkAMrS2I vetY2jFnsmlTk42EWZRvIWN+CB8hZlh7xSGJK1Y3MIMLncdvoHIPWDvo3dZksC6TwgkrkwOJn0F0z IDPO/fn7Nv48EZvbSCKk85iCrQ4LbLziYbOYiOJ5h8iXp0hHMrvUL2TfVZb91RqHtnjVRQjXI5m6k A6wfQSyYwRA3/kqoFUPub4s9JoaoXlk1yqkeWLVRSsYmazAIh+C5Tj3L+UTcCExj6+oXh2FNAwU/B 9hzFOTJA==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOj-0008AM-S3; Thu, 15 May 2025 00:16:22 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOM-005bJ3-Kf; Thu, 15 May 2025 00:15:58 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:27 +0200 Subject: [PATCH bpf-next v3 4/8] selftests/bpf: Introduce verdict programs for sockmap_redir Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-4-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj , Jiayuan Chen X-Mailer: b4 0.14.2 Instead of piggybacking on test_sockmap_listen, introduce test_sockmap_redir especially for sockmap redirection tests. Suggested-by: Jiayuan Chen Acked-by: John Fastabend Signed-off-by: Michal Luczaj Suggested-by: Jakub Sitnicki --- .../selftests/bpf/progs/test_sockmap_redir.c | 68 ++++++++++++++++++= ++++ 1 file changed, 68 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/test_sockmap_redir.c b/tools= /testing/selftests/bpf/progs/test_sockmap_redir.c new file mode 100644 index 0000000000000000000000000000000000000000..34d9f4f2f0a2e638c6e05cfa9f1= 9971bd36c11ea --- /dev/null +++ b/tools/testing/selftests/bpf/progs/test_sockmap_redir.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include "bpf_misc.h" + +SEC(".maps") struct { + __uint(type, BPF_MAP_TYPE_SOCKMAP); + __uint(max_entries, 1); + __type(key, __u32); + __type(value, __u64); +} nop_map, sock_map; + +SEC(".maps") struct { + __uint(type, BPF_MAP_TYPE_SOCKHASH); + __uint(max_entries, 1); + __type(key, __u32); + __type(value, __u64); +} nop_hash, sock_hash; + +SEC(".maps") struct { + __uint(type, BPF_MAP_TYPE_ARRAY); + __uint(max_entries, 2); + __type(key, int); + __type(value, unsigned int); +} verdict_map; + +/* Set by user space */ +int redirect_type; +int redirect_flags; + +#define redirect_map(__data) = \ + _Generic((__data), \ + struct __sk_buff * : bpf_sk_redirect_map, \ + struct sk_msg_md * : bpf_msg_redirect_map \ + )((__data), &sock_map, (__u32){0}, redirect_flags) + +#define redirect_hash(__data) = \ + _Generic((__data), \ + struct __sk_buff * : bpf_sk_redirect_hash, \ + struct sk_msg_md * : bpf_msg_redirect_hash \ + )((__data), &sock_hash, &(__u32){0}, redirect_flags) + +#define DEFINE_PROG(__type, __param) = \ +SEC("sk_" XSTR(__type)) = \ +int prog_ ## __type ## _verdict(__param data) = \ +{ = \ + unsigned int *count; \ + int verdict; \ + \ + if (redirect_type =3D=3D BPF_MAP_TYPE_SOCKMAP) = \ + verdict =3D redirect_map(data); \ + else if (redirect_type =3D=3D BPF_MAP_TYPE_SOCKHASH) = \ + verdict =3D redirect_hash(data); \ + else \ + verdict =3D redirect_type - __MAX_BPF_MAP_TYPE; \ + \ + count =3D bpf_map_lookup_elem(&verdict_map, &verdict); \ + if (count) \ + (*count)++; \ + \ + return verdict; \ +} + +DEFINE_PROG(skb, struct __sk_buff *); +DEFINE_PROG(msg, struct sk_msg_md *); + +char _license[] SEC("license") =3D "GPL"; --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit04.runbox.com (mailtransmit04.runbox.com [185.226.149.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA8B821C163; Wed, 14 May 2025 22:49:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.37 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747262970; cv=none; b=WsLSVNnlfIQJ+epTZzTIN24tT0fSad7BPHpygeJeoEu/r+8yCtTIlMQbWBDUysFVTjkE9b99vR2WtKCcvTg0ALzAX4smfhQbw5ESJeCGIY/9Vhr5Qka55hk1HACTrbJqDeUj9FLi8uSZWpM6vLtL0hYwUwh89UObNmuUkBXesCU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747262970; c=relaxed/simple; bh=om+oj5DMuweFUdn1sZpsa2+co3dX5mWFSmC5IoMnNwg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Su3jgImn3x21K5dJ9DFJ2tJrPWIgKBJwt84ULcu4+9Sf9EjkENOhT6/AOClAnTW17J3i9iB+EiZAy27JbVrGbQPDyWD1hmtu1uoXgftuvavH1qP9T/Aia/oQzN65N7ytfiXj/LqATu7KStKvUqgWnADh2KBmOXMfmwrJSYwh07U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=KzjTNltq; arc=none smtp.client-ip=185.226.149.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="KzjTNltq" Received: from mailtransmit02.runbox ([10.9.9.162] helo=aibo.runbox.com) by mailtransmit04.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOa-001vcr-20; Thu, 15 May 2025 00:16:12 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=eHOPNB5KzJTPokBVk3yNIFG8Uv3KZKoWMfgZAxWLcvQ=; b=KzjTNltqS3z29CzmogHbU9pM/J YGZPNCCTIAW5tUeVLqLsXlaDm2TqGTECAbC+ktzkGv9kfD7Aq4RmGViATnV7rXhWUFg0FuaFeDBlZ fZoFkm04cUYgzVSiJnmPNlsUvKSjsyav/lDJwwXnGYBIpHe7vLl6aYrbsFSjGqfYOseXC++9gZM8w ArPPQdVxQ7wNKYhwDO1IlPVuZUbkWydEszqa19rki1Wyd/9O0CZKHj844esbVB9iEwjDJwjZ+vquy Aq9F3K2uqzJ37U7/3ZjPfqLTmKBg94A6Hh78gFNWjMW1dTJFRhno6ky7tZKJN4Vu5IiIpWT/81VI6 TGRC6Hcw==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOZ-0004J8-OZ; Thu, 15 May 2025 00:16:11 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKON-005bJ3-Gf; Thu, 15 May 2025 00:15:59 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:28 +0200 Subject: [PATCH bpf-next v3 5/8] selftests/bpf: Add selftest for sockmap/hashmap redirection Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-5-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Test redirection logic. All supported and unsupported redirect combinations are tested for success and failure respectively. BPF_MAP_TYPE_SOCKMAP BPF_MAP_TYPE_SOCKHASH x sk_msg-to-egress sk_msg-to-ingress sk_skb-to-egress sk_skb-to-ingress x AF_INET, SOCK_STREAM AF_INET6, SOCK_STREAM AF_INET, SOCK_DGRAM AF_INET6, SOCK_DGRAM AF_UNIX, SOCK_STREAM AF_UNIX, SOCK_DGRAM AF_VSOCK, SOCK_STREAM AF_VSOCK, SOCK_SEQPACKET Suggested-by: Jakub Sitnicki Acked-by: John Fastabend Signed-off-by: Michal Luczaj --- .../selftests/bpf/prog_tests/sockmap_redir.c | 465 +++++++++++++++++= ++++ 1 file changed, 465 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_redir.c b/tools= /testing/selftests/bpf/prog_tests/sockmap_redir.c new file mode 100644 index 0000000000000000000000000000000000000000..9c461d93113db20de65ac353f92= dfdbe32ffbd3b --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_redir.c @@ -0,0 +1,465 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Test for sockmap/sockhash redirection. + * + * BPF_MAP_TYPE_SOCKMAP + * BPF_MAP_TYPE_SOCKHASH + * x + * sk_msg-to-egress + * sk_msg-to-ingress + * sk_skb-to-egress + * sk_skb-to-ingress + * x + * AF_INET, SOCK_STREAM + * AF_INET6, SOCK_STREAM + * AF_INET, SOCK_DGRAM + * AF_INET6, SOCK_DGRAM + * AF_UNIX, SOCK_STREAM + * AF_UNIX, SOCK_DGRAM + * AF_VSOCK, SOCK_STREAM + * AF_VSOCK, SOCK_SEQPACKET + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "linux/const.h" +#include "test_progs.h" +#include "sockmap_helpers.h" +#include "test_sockmap_redir.skel.h" + +/* The meaning of SUPPORTED is "will redirect packet as expected". + */ +#define SUPPORTED _BITUL(0) + +/* Note on sk_skb-to-ingress ->af_vsock: + * + * Peer socket may receive the packet some time after the return from send= msg(). + * In a typical usage scenario, recvmsg() will block until the redirected = packet + * appears in the destination queue, or timeout if the packet was dropped.= By + * that point, the verdict map has already been updated to reflect what has + * happened. + * + * But sk_skb-to-ingress/af_vsock is an unsupported combination, so no rec= vmsg() + * takes place. Which means we may race the execution of the verdict logic= and + * read map_verd before it has been updated, i.e. we might observe + * map_verd[SK_DROP]=3D0 instead of map_verd[SK_DROP]=3D1. + * + * This confuses the selftest logic: if there was no packet dropped, where= 's the + * packet? So here's a heuristic: on map_verd[SK_DROP]=3Dmap_verd[SK_PASS]= =3D0 + * (which implies the verdict program has not been ran) just re-read the v= erdict + * map again. + */ +#define UNSUPPORTED_RACY_VERD _BITUL(1) + +enum prog_type { + SK_MSG_EGRESS, + SK_MSG_INGRESS, + SK_SKB_EGRESS, + SK_SKB_INGRESS, +}; + +enum { + SEND_INNER =3D 0, + SEND_OUTER, +}; + +enum { + RECV_INNER =3D 0, + RECV_OUTER, +}; + +struct maps { + int in; + int out; + int verd; +}; + +struct combo_spec { + enum prog_type prog_type; + const char *in, *out; +}; + +struct redir_spec { + const char *name; + int idx_send; + int idx_recv; + enum prog_type prog_type; +}; + +struct socket_spec { + int family; + int sotype; + int send_flags; + int in[2]; + int out[2]; +}; + +static int socket_spec_pairs(struct socket_spec *s) +{ + return create_socket_pairs(s->family, s->sotype, + &s->in[0], &s->out[0], + &s->in[1], &s->out[1]); +} + +static void socket_spec_close(struct socket_spec *s) +{ + xclose(s->in[0]); + xclose(s->in[1]); + xclose(s->out[0]); + xclose(s->out[1]); +} + +static void get_redir_params(struct redir_spec *redir, + struct test_sockmap_redir *skel, int *prog_fd, + enum bpf_attach_type *attach_type, + int *redirect_flags) +{ + enum prog_type type =3D redir->prog_type; + struct bpf_program *prog; + bool sk_msg; + + sk_msg =3D type =3D=3D SK_MSG_INGRESS || type =3D=3D SK_MSG_EGRESS; + prog =3D sk_msg ? skel->progs.prog_msg_verdict : skel->progs.prog_skb_ver= dict; + + *prog_fd =3D bpf_program__fd(prog); + *attach_type =3D sk_msg ? BPF_SK_MSG_VERDICT : BPF_SK_SKB_VERDICT; + + if (type =3D=3D SK_MSG_INGRESS || type =3D=3D SK_SKB_INGRESS) + *redirect_flags =3D BPF_F_INGRESS; + else + *redirect_flags =3D 0; +} + +static void try_recv(const char *prefix, int fd, int flags, bool expect_su= ccess) +{ + ssize_t n; + char buf; + + errno =3D 0; + n =3D recv(fd, &buf, 1, flags); + if (n < 0 && expect_success) + FAIL_ERRNO("%s: unexpected failure: retval=3D%zd", prefix, n); + if (!n && !expect_success) + FAIL("%s: expected failure: retval=3D%zd", prefix, n); +} + +static void handle_unsupported(int sd_send, int sd_peer, int sd_in, int sd= _out, + int sd_recv, int map_verd, int status) +{ + unsigned int drop, pass; + char recv_buf; + ssize_t n; + +get_verdict: + if (xbpf_map_lookup_elem(map_verd, &u32(SK_DROP), &drop) || + xbpf_map_lookup_elem(map_verd, &u32(SK_PASS), &pass)) + return; + + if (pass =3D=3D 0 && drop =3D=3D 0 && (status & UNSUPPORTED_RACY_VERD)) { + sched_yield(); + goto get_verdict; + } + + if (pass !=3D 0) { + FAIL("unsupported: wanted verdict pass 0, have %u", pass); + return; + } + + /* If nothing was dropped, packet should have reached the peer */ + if (drop =3D=3D 0) { + errno =3D 0; + n =3D recv_timeout(sd_peer, &recv_buf, 1, 0, IO_TIMEOUT_SEC); + if (n !=3D 1) + FAIL_ERRNO("unsupported: packet missing, retval=3D%zd", n); + } + + /* Ensure queues are empty */ + try_recv("bpf.recv(sd_send)", sd_send, MSG_DONTWAIT, false); + if (sd_in !=3D sd_send) + try_recv("bpf.recv(sd_in)", sd_in, MSG_DONTWAIT, false); + + try_recv("bpf.recv(sd_out)", sd_out, MSG_DONTWAIT, false); + if (sd_recv !=3D sd_out) + try_recv("bpf.recv(sd_recv)", sd_recv, MSG_DONTWAIT, false); +} + +static void test_send_redir_recv(int sd_send, int send_flags, int sd_peer, + int sd_in, int sd_out, int sd_recv, + struct maps *maps, int status) +{ + unsigned int drop, pass; + char *send_buf =3D "ab"; + char recv_buf =3D '\0'; + ssize_t n, len =3D 1; + + /* Zero out the verdict map */ + if (xbpf_map_update_elem(maps->verd, &u32(SK_DROP), &u32(0), BPF_ANY) || + xbpf_map_update_elem(maps->verd, &u32(SK_PASS), &u32(0), BPF_ANY)) + return; + + if (xbpf_map_update_elem(maps->in, &u32(0), &u64(sd_in), BPF_NOEXIST)) + return; + + if (xbpf_map_update_elem(maps->out, &u32(0), &u64(sd_out), BPF_NOEXIST)) + goto del_in; + + /* Last byte is OOB data when send_flags has MSG_OOB bit set */ + if (send_flags & MSG_OOB) + len++; + n =3D send(sd_send, send_buf, len, send_flags); + if (n >=3D 0 && n < len) + FAIL("incomplete send"); + if (n < 0) { + /* sk_msg redirect combo not supported? */ + if (status & SUPPORTED || errno !=3D EACCES) + FAIL_ERRNO("send"); + goto out; + } + + if (!(status & SUPPORTED)) { + handle_unsupported(sd_send, sd_peer, sd_in, sd_out, sd_recv, + maps->verd, status); + goto out; + } + + errno =3D 0; + n =3D recv_timeout(sd_recv, &recv_buf, 1, 0, IO_TIMEOUT_SEC); + if (n !=3D 1) { + FAIL_ERRNO("recv_timeout()"); + goto out; + } + + /* Check verdict _after_ recv(); af_vsock may need time to catch up */ + if (xbpf_map_lookup_elem(maps->verd, &u32(SK_DROP), &drop) || + xbpf_map_lookup_elem(maps->verd, &u32(SK_PASS), &pass)) + goto out; + + if (drop !=3D 0 || pass !=3D 1) + FAIL("unexpected verdict drop/pass: wanted 0/1, have %u/%u", + drop, pass); + + if (recv_buf !=3D send_buf[0]) + FAIL("recv(): payload check, %02x !=3D %02x", recv_buf, send_buf[0]); + + if (send_flags & MSG_OOB) { + /* Fail reading OOB while in sockmap */ + try_recv("bpf.recv(sd_out, MSG_OOB)", sd_out, + MSG_OOB | MSG_DONTWAIT, false); + + /* Remove sd_out from sockmap */ + xbpf_map_delete_elem(maps->out, &u32(0)); + + /* Check that OOB was dropped on redirect */ + try_recv("recv(sd_out, MSG_OOB)", sd_out, + MSG_OOB | MSG_DONTWAIT, false); + + goto del_in; + } +out: + xbpf_map_delete_elem(maps->out, &u32(0)); +del_in: + xbpf_map_delete_elem(maps->in, &u32(0)); +} + +static int is_redir_supported(enum prog_type type, const char *in, + const char *out) +{ + /* Matching based on strings returned by socket_kind_to_str(): + * tcp4, udp4, tcp6, udp6, u_str, u_dgr, v_str, v_seq + * Plus a wildcard: any + * Not in use: u_seq, v_dgr + */ + struct combo_spec *c, combos[] =3D { + /* Send to local: TCP -> any, but vsock */ + { SK_MSG_INGRESS, "tcp", "tcp" }, + { SK_MSG_INGRESS, "tcp", "udp" }, + { SK_MSG_INGRESS, "tcp", "u_str" }, + { SK_MSG_INGRESS, "tcp", "u_dgr" }, + + /* Send to egress: TCP -> TCP */ + { SK_MSG_EGRESS, "tcp", "tcp" }, + + /* Ingress to egress: any -> any */ + { SK_SKB_EGRESS, "any", "any" }, + + /* Ingress to local: any -> any, but vsock */ + { SK_SKB_INGRESS, "any", "tcp" }, + { SK_SKB_INGRESS, "any", "udp" }, + { SK_SKB_INGRESS, "any", "u_str" }, + { SK_SKB_INGRESS, "any", "u_dgr" }, + }; + + for (c =3D combos; c < combos + ARRAY_SIZE(combos); c++) { + if (c->prog_type =3D=3D type && + (!strcmp(c->in, "any") || strstarts(in, c->in)) && + (!strcmp(c->out, "any") || strstarts(out, c->out))) + return SUPPORTED; + } + + return 0; +} + +static int get_support_status(enum prog_type type, const char *in, + const char *out) +{ + int status =3D is_redir_supported(type, in, out); + + if (type =3D=3D SK_SKB_INGRESS && strstarts(out, "v_")) + status |=3D UNSUPPORTED_RACY_VERD; + + return status; +} + +static void test_socket(enum bpf_map_type type, struct redir_spec *redir, + struct maps *maps, struct socket_spec *s_in, + struct socket_spec *s_out) +{ + int fd_in, fd_out, fd_send, fd_peer, fd_recv, flags, status; + const char *in_str, *out_str; + char s[MAX_TEST_NAME]; + + fd_in =3D s_in->in[0]; + fd_out =3D s_out->out[0]; + fd_send =3D s_in->in[redir->idx_send]; + fd_peer =3D s_in->in[redir->idx_send ^ 1]; + fd_recv =3D s_out->out[redir->idx_recv]; + flags =3D s_in->send_flags; + + in_str =3D socket_kind_to_str(fd_in); + out_str =3D socket_kind_to_str(fd_out); + status =3D get_support_status(redir->prog_type, in_str, out_str); + + snprintf(s, sizeof(s), + "%-4s %-17s %-5s %s %-5s%6s", + /* hash sk_skb-to-ingress u_str =E2=86=92 v_str (OOB) */ + type =3D=3D BPF_MAP_TYPE_SOCKMAP ? "map" : "hash", + redir->name, + in_str, + status & SUPPORTED ? "=E2=86=92" : " ", + out_str, + (flags & MSG_OOB) ? "(OOB)" : ""); + + if (!test__start_subtest(s)) + return; + + test_send_redir_recv(fd_send, flags, fd_peer, fd_in, fd_out, fd_recv, + maps, status); +} + +static void test_redir(enum bpf_map_type type, struct redir_spec *redir, + struct maps *maps) +{ + struct socket_spec *s, sockets[] =3D { + { AF_INET, SOCK_STREAM }, + // { AF_INET, SOCK_STREAM, MSG_OOB }, /* Known to be broken */ + { AF_INET6, SOCK_STREAM }, + { AF_INET, SOCK_DGRAM }, + { AF_INET6, SOCK_DGRAM }, + { AF_UNIX, SOCK_STREAM }, + { AF_UNIX, SOCK_STREAM, MSG_OOB }, + { AF_UNIX, SOCK_DGRAM }, + // { AF_UNIX, SOCK_SEQPACKET}, /* Unsupported BPF_MAP_UPDATE_ELEM */ + { AF_VSOCK, SOCK_STREAM }, + // { AF_VSOCK, SOCK_DGRAM }, /* Unsupported socket() */ + { AF_VSOCK, SOCK_SEQPACKET }, + }; + + for (s =3D sockets; s < sockets + ARRAY_SIZE(sockets); s++) + if (socket_spec_pairs(s)) + goto out; + + /* Intra-proto */ + for (s =3D sockets; s < sockets + ARRAY_SIZE(sockets); s++) + test_socket(type, redir, maps, s, s); + + /* Cross-proto */ + for (int i =3D 0; i < ARRAY_SIZE(sockets); i++) { + for (int j =3D 0; j < ARRAY_SIZE(sockets); j++) { + struct socket_spec *out =3D &sockets[j]; + struct socket_spec *in =3D &sockets[i]; + + /* Skip intra-proto and between variants */ + if (out->send_flags || + (in->family =3D=3D out->family && + in->sotype =3D=3D out->sotype)) + continue; + + test_socket(type, redir, maps, in, out); + } + } +out: + while (--s >=3D sockets) + socket_spec_close(s); +} + +static void test_map(enum bpf_map_type type) +{ + struct redir_spec *r, redirs[] =3D { + { "sk_msg-to-ingress", SEND_INNER, RECV_INNER, SK_MSG_INGRESS }, + { "sk_msg-to-egress", SEND_INNER, RECV_OUTER, SK_MSG_EGRESS }, + { "sk_skb-to-egress", SEND_OUTER, RECV_OUTER, SK_SKB_EGRESS }, + { "sk_skb-to-ingress", SEND_OUTER, RECV_INNER, SK_SKB_INGRESS }, + }; + + for (r =3D redirs; r < redirs + ARRAY_SIZE(redirs); r++) { + enum bpf_attach_type attach_type; + struct test_sockmap_redir *skel; + struct maps maps; + int prog_fd; + + skel =3D test_sockmap_redir__open_and_load(); + if (!skel) { + FAIL("open_and_load"); + return; + } + + switch (type) { + case BPF_MAP_TYPE_SOCKMAP: + maps.in =3D bpf_map__fd(skel->maps.nop_map); + maps.out =3D bpf_map__fd(skel->maps.sock_map); + break; + case BPF_MAP_TYPE_SOCKHASH: + maps.in =3D bpf_map__fd(skel->maps.nop_hash); + maps.out =3D bpf_map__fd(skel->maps.sock_hash); + break; + default: + FAIL("Unsupported bpf_map_type"); + return; + } + + skel->bss->redirect_type =3D type; + maps.verd =3D bpf_map__fd(skel->maps.verdict_map); + get_redir_params(r, skel, &prog_fd, &attach_type, + &skel->bss->redirect_flags); + + if (xbpf_prog_attach(prog_fd, maps.in, attach_type, 0)) + return; + + test_redir(type, r, &maps); + + if (xbpf_prog_detach2(prog_fd, maps.in, attach_type)) + return; + + test_sockmap_redir__destroy(skel); + } +} + +void serial_test_sockmap_redir(void) +{ + test_map(BPF_MAP_TYPE_SOCKMAP); + test_map(BPF_MAP_TYPE_SOCKHASH); +} --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit04.runbox.com (mailtransmit04.runbox.com [185.226.149.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6ED49224AFA; Wed, 14 May 2025 22:16:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.37 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747260991; cv=none; b=nJLs1dtkv8HUrlk8U2lAcHnORJAFjxLhERp6By8E43PTJZ/vEWI1sHz830St+GG1vd5UwiuztdSJOsCxRgcWvf6OzQrOlR9jbVHoxnki9RURQSJeECIosKmrffS7uDGHiZ711nbIusENhdtwPxqagPz8nZp2lazgiOpnLoGJLg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747260991; c=relaxed/simple; bh=8KERzOWdSrZs8kSwJdKHRZwEAinPslc0Smuxbo46QIg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nuRjGn3UcSd+a+C3T5PFLslCJr/Z9CrNvXJfK6/+9ZPiSpst+mhpl3mhyq5z33QivpBkyEKbAqEuBvtk6fW70lAjdoX3AXJygJUSrv8pbZGreyIVCIski//07RhtL8jLh3NSrKZUaDV6bB4PqTQ1HfHO1nJqKhgFt1c79+Ilpr4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=HrXbSvj8; arc=none smtp.client-ip=185.226.149.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="HrXbSvj8" Received: from mailtransmit02.runbox ([10.9.9.162] helo=aibo.runbox.com) by mailtransmit04.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOl-001vfe-Rl; Thu, 15 May 2025 00:16:23 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=xvhM4tbojY9tDkQHmJNrLd25j/vmeCNoOANSmjk4XqY=; b=HrXbSvj83fKZ1zxaxaAsVUVMyN RNMmnp0yapE7aKb0wT0mwAMZozSex40He2ZKAqTzQyd8EgcLGT+iILMiWC4/wejnRqdYkx0sZUgWL +xpNKGJbRQ1JAiTYOo8uoNuan0MMdsuGYSTQvbJHAAq+Hz6gT0Sv2dDZMqSE1rWnazUV+1PeuK7H2 5n+atxSNSo2VLymoaEKOW7ddbOQnbLeKly2dBM895iR48vwGF1JCof4QXJFPCX7nAxjMZW/COviqL Wfmi+Xzlds2DmhM0CI+I3l/gyoDIfWAGqcumcMFKotfU6FlKw2THHUh7xHYT6LdGFHk5fyHmnFqI6 XGoQO/iQ==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOl-0004Ja-H5; Thu, 15 May 2025 00:16:23 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOO-005bJ3-E1; Thu, 15 May 2025 00:16:00 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:29 +0200 Subject: [PATCH bpf-next v3 6/8] selftests/bpf: sockmap_listen cleanup: Drop af_vsock redir tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-6-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Remove tests covered by sockmap_redir. Acked-by: John Fastabend Signed-off-by: Michal Luczaj Suggested-by: Jakub Sitnicki --- .../selftests/bpf/prog_tests/sockmap_listen.c | 112 -----------------= ---- 1 file changed, 112 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c b/tool= s/testing/selftests/bpf/prog_tests/sockmap_listen.c index 4ee1148d22be3d7f26a5c899542e6a29ca5e7d6c..f0ad548bdf09d1c5ffdcedfbba1= 1c304b19490c0 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c @@ -1487,116 +1487,6 @@ static void test_unix_redir(struct test_sockmap_lis= ten *skel, struct bpf_map *ma unix_skb_redir_to_connected(skel, map, sotype); } =20 -/* Returns two connected loopback vsock sockets */ -static int vsock_socketpair_connectible(int sotype, int *v0, int *v1) -{ - return create_pair(AF_VSOCK, sotype | SOCK_NONBLOCK, v0, v1); -} - -static void vsock_unix_redir_connectible(int sock_mapfd, int verd_mapfd, - enum redir_mode mode, int sotype) -{ - const char *log_prefix =3D redir_mode_str(mode); - char a =3D 'a', b =3D 'b'; - int u0, u1, v0, v1; - int sfd[2]; - unsigned int pass; - int err, n; - u32 key; - - zero_verdict_count(verd_mapfd); - - if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0, sfd)) - return; - - u0 =3D sfd[0]; - u1 =3D sfd[1]; - - err =3D vsock_socketpair_connectible(sotype, &v0, &v1); - if (err) { - FAIL("vsock_socketpair_connectible() failed"); - goto close_uds; - } - - err =3D add_to_sockmap(sock_mapfd, u0, v0); - if (err) { - FAIL("add_to_sockmap failed"); - goto close_vsock; - } - - n =3D write(v1, &a, sizeof(a)); - if (n < 0) - FAIL_ERRNO("%s: write", log_prefix); - if (n =3D=3D 0) - FAIL("%s: incomplete write", log_prefix); - if (n < 1) - goto out; - - n =3D xrecv_nonblock(mode =3D=3D REDIR_INGRESS ? u0 : u1, &b, sizeof(b), = 0); - if (n < 0) - FAIL("%s: recv() err, errno=3D%d", log_prefix, errno); - if (n =3D=3D 0) - FAIL("%s: incomplete recv", log_prefix); - if (b !=3D a) - FAIL("%s: vsock socket map failed, %c !=3D %c", log_prefix, a, b); - - key =3D SK_PASS; - err =3D xbpf_map_lookup_elem(verd_mapfd, &key, &pass); - if (err) - goto out; - if (pass !=3D 1) - FAIL("%s: want pass count 1, have %d", log_prefix, pass); -out: - key =3D 0; - bpf_map_delete_elem(sock_mapfd, &key); - key =3D 1; - bpf_map_delete_elem(sock_mapfd, &key); - -close_vsock: - close(v0); - close(v1); - -close_uds: - close(u0); - close(u1); -} - -static void vsock_unix_skb_redir_connectible(struct test_sockmap_listen *s= kel, - struct bpf_map *inner_map, - int sotype) -{ - int verdict =3D bpf_program__fd(skel->progs.prog_skb_verdict); - int verdict_map =3D bpf_map__fd(skel->maps.verdict_map); - int sock_map =3D bpf_map__fd(inner_map); - int err; - - err =3D xbpf_prog_attach(verdict, sock_map, BPF_SK_SKB_VERDICT, 0); - if (err) - return; - - skel->bss->test_ingress =3D false; - vsock_unix_redir_connectible(sock_map, verdict_map, REDIR_EGRESS, sotype); - skel->bss->test_ingress =3D true; - vsock_unix_redir_connectible(sock_map, verdict_map, REDIR_INGRESS, sotype= ); - - xbpf_prog_detach2(verdict, sock_map, BPF_SK_SKB_VERDICT); -} - -static void test_vsock_redir(struct test_sockmap_listen *skel, struct bpf_= map *map) -{ - const char *family_name, *map_name; - char s[MAX_TEST_NAME]; - - family_name =3D family_str(AF_VSOCK); - map_name =3D map_type_str(map); - snprintf(s, sizeof(s), "%s %s %s", map_name, family_name, __func__); - if (!test__start_subtest(s)) - return; - - vsock_unix_skb_redir_connectible(skel, map, SOCK_STREAM); - vsock_unix_skb_redir_connectible(skel, map, SOCK_SEQPACKET); -} - static void test_reuseport(struct test_sockmap_listen *skel, struct bpf_map *map, int family, int sotype) { @@ -1882,14 +1772,12 @@ void serial_test_sockmap_listen(void) run_tests(skel, skel->maps.sock_map, AF_INET6); test_unix_redir(skel, skel->maps.sock_map, SOCK_DGRAM); test_unix_redir(skel, skel->maps.sock_map, SOCK_STREAM); - test_vsock_redir(skel, skel->maps.sock_map); =20 skel->bss->test_sockmap =3D false; run_tests(skel, skel->maps.sock_hash, AF_INET); run_tests(skel, skel->maps.sock_hash, AF_INET6); test_unix_redir(skel, skel->maps.sock_hash, SOCK_DGRAM); test_unix_redir(skel, skel->maps.sock_hash, SOCK_STREAM); - test_vsock_redir(skel, skel->maps.sock_hash); =20 test_sockmap_listen__destroy(skel); } --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit04.runbox.com (mailtransmit04.runbox.com [185.226.149.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 833A120E6E7; Wed, 14 May 2025 23:08:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.37 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747264125; cv=none; b=nlbe7QHW/rdsrnn7HQdrDHvDiyEFcspdkqHe4SPlYBhSKIeLcUNhcV1hrb/3nswvwrKWVXPAnpESyI3t2UxNbTArfxlhCrz847Z7zLRGV+HHaAHuCsD51DQgeQtfj55w1UkuStRVk5O45P7FsMI6lAIg8UAJncfvga76Cqi+trU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747264125; c=relaxed/simple; bh=KnQkdp4PuJIqcd44bLxDryVtdBfFszktP1VdxL9wWz0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WB77ubYxeIghKbwei1wrLIyIDK1/A+W2w5GYIFYkfl6h8Li30JAFb5AAK9l8QpwCYsxybDtH6pJ1OiLxUAvaejfV4xEm3DUj8mUnMvEZOmGAPvyRrdXwTz/zo+x+eVoYRRUGCOOkiKjYVhKI+IfBUd/hBGUOjqryCWqa7I/RhTQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=DT+kGBjc; arc=none smtp.client-ip=185.226.149.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="DT+kGBjc" Received: from mailtransmit03.runbox ([10.9.9.163] helo=aibo.runbox.com) by mailtransmit04.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOh-001vf2-Pn; Thu, 15 May 2025 00:16:19 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=9xhO29vFcmTnpIi4IR/kL+pG5kZoH+hvhoDGRurs7Ls=; b=DT+kGBjc7ZHWGoTYK+SMXNmIAs ltm/XCzwXM5Ya4AUfi7snGiQtGZ2h+qd4IiE3I4zd96dginsIb+6/XHozB4BcYVlbFcNZ9vG9CZGd QOdTSn+UuW11pm6+3SE4i7Y/BtqEb9Au/7BbnAAaZEX8ai36VA3Ivx62hhJ8jVMQv6nQguvib2wgu 5W0ND/agZIODWwbCSlgYyNqMLvndSZsNKoJiYgN8F3SRGyA02totplloEncIboptgDNc6rVBaJtGB iVTJoL8zQzDajoLd79MAFBtaG7kqmvhK3x9TsVuvE97K0oTJIZvUKp7n8c1WLcH/GG2tKxjqtnSKi XiDTIM/A==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOh-0008AA-Et; Thu, 15 May 2025 00:16:19 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOP-005bJ3-BD; Thu, 15 May 2025 00:16:01 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:30 +0200 Subject: [PATCH bpf-next v3 7/8] selftests/bpf: sockmap_listen cleanup: Drop af_unix redir tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-7-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Remove tests covered by sockmap_redir. Acked-by: John Fastabend Signed-off-by: Michal Luczaj Suggested-by: Jakub Sitnicki --- .../selftests/bpf/prog_tests/sockmap_listen.c | 219 -----------------= ---- 1 file changed, 219 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c b/tool= s/testing/selftests/bpf/prog_tests/sockmap_listen.c index f0ad548bdf09d1c5ffdcedfbba11c304b19490c0..4f38dd7d23daf3aee83793be497= 48916d26d93b7 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c @@ -1429,64 +1429,6 @@ static void pairs_redir_to_connected(int cli0, int p= eer0, int cli1, int peer1, } } =20 -static void unix_redir_to_connected(int sotype, int sock_mapfd, - int verd_mapfd, enum redir_mode mode) -{ - int c0, c1, p0, p1; - int sfd[2]; - - if (socketpair(AF_UNIX, sotype | SOCK_NONBLOCK, 0, sfd)) - return; - c0 =3D sfd[0], p0 =3D sfd[1]; - - if (socketpair(AF_UNIX, sotype | SOCK_NONBLOCK, 0, sfd)) - goto close0; - c1 =3D sfd[0], p1 =3D sfd[1]; - - pairs_redir_to_connected(c0, p0, c1, p1, sock_mapfd, -1, verd_mapfd, - mode, NO_FLAGS); - - xclose(c1); - xclose(p1); -close0: - xclose(c0); - xclose(p0); -} - -static void unix_skb_redir_to_connected(struct test_sockmap_listen *skel, - struct bpf_map *inner_map, int sotype) -{ - int verdict =3D bpf_program__fd(skel->progs.prog_skb_verdict); - int verdict_map =3D bpf_map__fd(skel->maps.verdict_map); - int sock_map =3D bpf_map__fd(inner_map); - int err; - - err =3D xbpf_prog_attach(verdict, sock_map, BPF_SK_SKB_VERDICT, 0); - if (err) - return; - - skel->bss->test_ingress =3D false; - unix_redir_to_connected(sotype, sock_map, verdict_map, REDIR_EGRESS); - skel->bss->test_ingress =3D true; - unix_redir_to_connected(sotype, sock_map, verdict_map, REDIR_INGRESS); - - xbpf_prog_detach2(verdict, sock_map, BPF_SK_SKB_VERDICT); -} - -static void test_unix_redir(struct test_sockmap_listen *skel, struct bpf_m= ap *map, - int sotype) -{ - const char *family_name, *map_name; - char s[MAX_TEST_NAME]; - - family_name =3D family_str(AF_UNIX); - map_name =3D map_type_str(map); - snprintf(s, sizeof(s), "%s %s %s", map_name, family_name, __func__); - if (!test__start_subtest(s)) - return; - unix_skb_redir_to_connected(skel, map, sotype); -} - static void test_reuseport(struct test_sockmap_listen *skel, struct bpf_map *map, int family, int sotype) { @@ -1589,162 +1531,6 @@ static void test_udp_redir(struct test_sockmap_list= en *skel, struct bpf_map *map udp_skb_redir_to_connected(skel, map, family); } =20 -static void inet_unix_redir_to_connected(int family, int type, int sock_ma= pfd, - int verd_mapfd, enum redir_mode mode) -{ - int c0, c1, p0, p1; - int sfd[2]; - int err; - - if (socketpair(AF_UNIX, type | SOCK_NONBLOCK, 0, sfd)) - return; - c0 =3D sfd[0], p0 =3D sfd[1]; - - err =3D inet_socketpair(family, type, &p1, &c1); - if (err) - goto close; - - pairs_redir_to_connected(c0, p0, c1, p1, sock_mapfd, -1, verd_mapfd, - mode, NO_FLAGS); - - xclose(c1); - xclose(p1); -close: - xclose(c0); - xclose(p0); -} - -static void inet_unix_skb_redir_to_connected(struct test_sockmap_listen *s= kel, - struct bpf_map *inner_map, int family) -{ - int verdict =3D bpf_program__fd(skel->progs.prog_skb_verdict); - int verdict_map =3D bpf_map__fd(skel->maps.verdict_map); - int sock_map =3D bpf_map__fd(inner_map); - int err; - - err =3D xbpf_prog_attach(verdict, sock_map, BPF_SK_SKB_VERDICT, 0); - if (err) - return; - - skel->bss->test_ingress =3D false; - inet_unix_redir_to_connected(family, SOCK_DGRAM, sock_map, verdict_map, - REDIR_EGRESS); - inet_unix_redir_to_connected(family, SOCK_STREAM, sock_map, verdict_map, - REDIR_EGRESS); - skel->bss->test_ingress =3D true; - inet_unix_redir_to_connected(family, SOCK_DGRAM, sock_map, verdict_map, - REDIR_INGRESS); - inet_unix_redir_to_connected(family, SOCK_STREAM, sock_map, verdict_map, - REDIR_INGRESS); - - xbpf_prog_detach2(verdict, sock_map, BPF_SK_SKB_VERDICT); -} - -static void unix_inet_redir_to_connected(int family, int type, int sock_ma= pfd, - int nop_mapfd, int verd_mapfd, - enum redir_mode mode, int send_flags) -{ - int c0, c1, p0, p1; - int sfd[2]; - int err; - - err =3D inet_socketpair(family, type, &p0, &c0); - if (err) - return; - - if (socketpair(AF_UNIX, type | SOCK_NONBLOCK, 0, sfd)) - goto close_cli0; - c1 =3D sfd[0], p1 =3D sfd[1]; - - pairs_redir_to_connected(c0, p0, c1, p1, sock_mapfd, nop_mapfd, - verd_mapfd, mode, send_flags); - - xclose(c1); - xclose(p1); -close_cli0: - xclose(c0); - xclose(p0); -} - -static void unix_inet_skb_redir_to_connected(struct test_sockmap_listen *s= kel, - struct bpf_map *inner_map, int family) -{ - int verdict =3D bpf_program__fd(skel->progs.prog_skb_verdict); - int nop_map =3D bpf_map__fd(skel->maps.nop_map); - int verdict_map =3D bpf_map__fd(skel->maps.verdict_map); - int sock_map =3D bpf_map__fd(inner_map); - int err; - - err =3D xbpf_prog_attach(verdict, sock_map, BPF_SK_SKB_VERDICT, 0); - if (err) - return; - - skel->bss->test_ingress =3D false; - unix_inet_redir_to_connected(family, SOCK_DGRAM, - sock_map, -1, verdict_map, - REDIR_EGRESS, NO_FLAGS); - unix_inet_redir_to_connected(family, SOCK_STREAM, - sock_map, -1, verdict_map, - REDIR_EGRESS, NO_FLAGS); - - unix_inet_redir_to_connected(family, SOCK_DGRAM, - sock_map, nop_map, verdict_map, - REDIR_EGRESS, NO_FLAGS); - unix_inet_redir_to_connected(family, SOCK_STREAM, - sock_map, nop_map, verdict_map, - REDIR_EGRESS, NO_FLAGS); - - /* MSG_OOB not supported by AF_UNIX SOCK_DGRAM */ - unix_inet_redir_to_connected(family, SOCK_STREAM, - sock_map, nop_map, verdict_map, - REDIR_EGRESS, MSG_OOB); - - skel->bss->test_ingress =3D true; - unix_inet_redir_to_connected(family, SOCK_DGRAM, - sock_map, -1, verdict_map, - REDIR_INGRESS, NO_FLAGS); - unix_inet_redir_to_connected(family, SOCK_STREAM, - sock_map, -1, verdict_map, - REDIR_INGRESS, NO_FLAGS); - - unix_inet_redir_to_connected(family, SOCK_DGRAM, - sock_map, nop_map, verdict_map, - REDIR_INGRESS, NO_FLAGS); - unix_inet_redir_to_connected(family, SOCK_STREAM, - sock_map, nop_map, verdict_map, - REDIR_INGRESS, NO_FLAGS); - - /* MSG_OOB not supported by AF_UNIX SOCK_DGRAM */ - unix_inet_redir_to_connected(family, SOCK_STREAM, - sock_map, nop_map, verdict_map, - REDIR_INGRESS, MSG_OOB); - - xbpf_prog_detach2(verdict, sock_map, BPF_SK_SKB_VERDICT); -} - -static void test_udp_unix_redir(struct test_sockmap_listen *skel, struct b= pf_map *map, - int family) -{ - const char *family_name, *map_name; - struct netns_obj *netns; - char s[MAX_TEST_NAME]; - - family_name =3D family_str(family); - map_name =3D map_type_str(map); - snprintf(s, sizeof(s), "%s %s %s", map_name, family_name, __func__); - if (!test__start_subtest(s)) - return; - - netns =3D netns_new("sockmap_listen", true); - if (!ASSERT_OK_PTR(netns, "netns_new")) - return; - - inet_unix_skb_redir_to_connected(skel, map, family); - unix_inet_skb_redir_to_connected(skel, map, family); - - netns_free(netns); -} - static void run_tests(struct test_sockmap_listen *skel, struct bpf_map *ma= p, int family) { @@ -1754,7 +1540,6 @@ static void run_tests(struct test_sockmap_listen *ske= l, struct bpf_map *map, test_reuseport(skel, map, family, SOCK_STREAM); test_reuseport(skel, map, family, SOCK_DGRAM); test_udp_redir(skel, map, family); - test_udp_unix_redir(skel, map, family); } =20 void serial_test_sockmap_listen(void) @@ -1770,14 +1555,10 @@ void serial_test_sockmap_listen(void) skel->bss->test_sockmap =3D true; run_tests(skel, skel->maps.sock_map, AF_INET); run_tests(skel, skel->maps.sock_map, AF_INET6); - test_unix_redir(skel, skel->maps.sock_map, SOCK_DGRAM); - test_unix_redir(skel, skel->maps.sock_map, SOCK_STREAM); =20 skel->bss->test_sockmap =3D false; run_tests(skel, skel->maps.sock_hash, AF_INET); run_tests(skel, skel->maps.sock_hash, AF_INET6); - test_unix_redir(skel, skel->maps.sock_hash, SOCK_DGRAM); - test_unix_redir(skel, skel->maps.sock_hash, SOCK_STREAM); =20 test_sockmap_listen__destroy(skel); } --=20 2.49.0 From nobody Sun Feb 8 23:44:28 2026 Received: from mailtransmit04.runbox.com (mailtransmit04.runbox.com [185.226.149.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B62EEDDC1; Wed, 14 May 2025 22:46:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.226.149.37 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747262767; cv=none; b=gV3thTjlF9Y585nu1kY/4o8zqVuWXQvqGOH2t82bIIU0DuUmXKefRXAFx37lDlYrGAxUlCkOtA+qoLmbTn3RX2Ye/l5S1ZXSNSTP7sqzHwRaWbTYiSir8lL06pNJ3ocZmg3KKSKILcNTM4RcqzXLd7UCnuINsZxdQ0GeB0woAXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747262767; c=relaxed/simple; bh=ZsyvH9DIWeaFMfPnZooNrPBXpUdpw8lz+3vNzKJrMOw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hlPurwuaRj1E4k9xyEwNYcHm6OIL8Zm0CuycSZ7lJoJ0bW9tKBpkJwgmlPdEeLFhODeozuZaiydTY78L1CMZlR/EtiWm+y821lixB6oGMOC9cKHI39tBLiypz6HGRbvSYTd1Jx5hGLc+hNJoldHiPQ7CckoDLpf3647DYzSRkTA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co; spf=pass smtp.mailfrom=rbox.co; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b=RCE7JJPa; arc=none smtp.client-ip=185.226.149.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rbox.co Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rbox.co Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rbox.co header.i=@rbox.co header.b="RCE7JJPa" Received: from mailtransmit02.runbox ([10.9.9.162] helo=aibo.runbox.com) by mailtransmit04.runbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1uFKOg-001veu-Eq; Thu, 15 May 2025 00:16:18 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=rbox.co; s=selector2; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From; bh=HY7Xi8OzdrnVquA1jOAiIn6f3FOUOBUfyJUv25gTw1Q=; b=RCE7JJPatJsjcKYqWo0PpekN6x Bj9XutplDaWgLFSbpRfBBSf8AYdWZzh7YVQbjaq+Sar5PY5ceggHWGdD8pyGmOE92/MKNbyiRz6nE DnfVy2Y1AovkaoA8qrDe7WEGf6ReyXQX0x1eS8fTUVdQsR1Rz2FvhzlFhmQC+DNayyWuH0ev+Bf1/ saGu37sRMdbvLaF95IdRwH/7N/KJ3PzXazomliPZXhaUAt4l4z4x9zOxdL9WcZPqw9PQzasCZ6Xq5 h4bVKI71vRe5xCB39OIsZ5+6ET0dbKmCoqcjn2HCPobmx+kXwTvC4NybcvOBVO6wv8W6JLIh+SLlQ bdSdQ3iw==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1uFKOg-0004JU-4x; Thu, 15 May 2025 00:16:18 +0200 Received: by submission02.runbox with esmtpsa [Authenticated ID (604044)] (TLS1.2:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) id 1uFKOQ-005bJ3-A1; Thu, 15 May 2025 00:16:02 +0200 From: Michal Luczaj Date: Thu, 15 May 2025 00:15:31 +0200 Subject: [PATCH bpf-next v3 8/8] selftests/bpf: sockmap_listen cleanup: Drop af_inet SOCK_DGRAM redir tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-selftests-sockmap-redir-v3-8-a1ea723f7e7e@rbox.co> References: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> In-Reply-To: <20250515-selftests-sockmap-redir-v3-0-a1ea723f7e7e@rbox.co> To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Jakub Sitnicki , Michal Luczaj X-Mailer: b4 0.14.2 Remove tests covered by sockmap_redir. Acked-by: John Fastabend Signed-off-by: Michal Luczaj Suggested-by: Jakub Sitnicki --- .../selftests/bpf/prog_tests/sockmap_listen.c | 126 -----------------= ---- 1 file changed, 126 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c b/tool= s/testing/selftests/bpf/prog_tests/sockmap_listen.c index 4f38dd7d23daf3aee83793be49748916d26d93b7..1d98eee7a2c3a711950ade30959= e3bbf8c78e13d 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c @@ -1366,69 +1366,6 @@ static void test_redir(struct test_sockmap_listen *s= kel, struct bpf_map *map, } } =20 -static void pairs_redir_to_connected(int cli0, int peer0, int cli1, int pe= er1, - int sock_mapfd, int nop_mapfd, - int verd_mapfd, enum redir_mode mode, - int send_flags) -{ - const char *log_prefix =3D redir_mode_str(mode); - unsigned int pass; - int err, n; - u32 key; - char b; - - zero_verdict_count(verd_mapfd); - - err =3D add_to_sockmap(sock_mapfd, peer0, peer1); - if (err) - return; - - if (nop_mapfd >=3D 0) { - err =3D add_to_sockmap(nop_mapfd, cli0, cli1); - if (err) - return; - } - - /* Last byte is OOB data when send_flags has MSG_OOB bit set */ - n =3D xsend(cli1, "ab", 2, send_flags); - if (n >=3D 0 && n < 2) - FAIL("%s: incomplete send", log_prefix); - if (n < 2) - return; - - key =3D SK_PASS; - err =3D xbpf_map_lookup_elem(verd_mapfd, &key, &pass); - if (err) - return; - if (pass !=3D 1) - FAIL("%s: want pass count 1, have %d", log_prefix, pass); - - n =3D recv_timeout(mode =3D=3D REDIR_INGRESS ? peer0 : cli0, &b, 1, 0, IO= _TIMEOUT_SEC); - if (n < 0) - FAIL_ERRNO("%s: recv_timeout", log_prefix); - if (n =3D=3D 0) - FAIL("%s: incomplete recv", log_prefix); - - if (send_flags & MSG_OOB) { - /* Check that we can't read OOB while in sockmap */ - errno =3D 0; - n =3D recv(peer1, &b, 1, MSG_OOB | MSG_DONTWAIT); - if (n !=3D -1 || errno !=3D EOPNOTSUPP) - FAIL("%s: recv(MSG_OOB): expected EOPNOTSUPP: retval=3D%d errno=3D%d", - log_prefix, n, errno); - - /* Remove peer1 from sockmap */ - xbpf_map_delete_elem(sock_mapfd, &(int){ 1 }); - - /* Check that OOB was dropped on redirect */ - errno =3D 0; - n =3D recv(peer1, &b, 1, MSG_OOB | MSG_DONTWAIT); - if (n !=3D -1 || errno !=3D EINVAL) - FAIL("%s: recv(MSG_OOB): expected EINVAL: retval=3D%d errno=3D%d", - log_prefix, n, errno); - } -} - static void test_reuseport(struct test_sockmap_listen *skel, struct bpf_map *map, int family, int sotype) { @@ -1469,68 +1406,6 @@ static void test_reuseport(struct test_sockmap_liste= n *skel, } } =20 -static int inet_socketpair(int family, int type, int *s, int *c) -{ - return create_pair(family, type | SOCK_NONBLOCK, s, c); -} - -static void udp_redir_to_connected(int family, int sock_mapfd, int verd_ma= pfd, - enum redir_mode mode) -{ - int c0, c1, p0, p1; - int err; - - err =3D inet_socketpair(family, SOCK_DGRAM, &p0, &c0); - if (err) - return; - err =3D inet_socketpair(family, SOCK_DGRAM, &p1, &c1); - if (err) - goto close_cli0; - - pairs_redir_to_connected(c0, p0, c1, p1, sock_mapfd, -1, verd_mapfd, - mode, NO_FLAGS); - - xclose(c1); - xclose(p1); -close_cli0: - xclose(c0); - xclose(p0); -} - -static void udp_skb_redir_to_connected(struct test_sockmap_listen *skel, - struct bpf_map *inner_map, int family) -{ - int verdict =3D bpf_program__fd(skel->progs.prog_skb_verdict); - int verdict_map =3D bpf_map__fd(skel->maps.verdict_map); - int sock_map =3D bpf_map__fd(inner_map); - int err; - - err =3D xbpf_prog_attach(verdict, sock_map, BPF_SK_SKB_VERDICT, 0); - if (err) - return; - - skel->bss->test_ingress =3D false; - udp_redir_to_connected(family, sock_map, verdict_map, REDIR_EGRESS); - skel->bss->test_ingress =3D true; - udp_redir_to_connected(family, sock_map, verdict_map, REDIR_INGRESS); - - xbpf_prog_detach2(verdict, sock_map, BPF_SK_SKB_VERDICT); -} - -static void test_udp_redir(struct test_sockmap_listen *skel, struct bpf_ma= p *map, - int family) -{ - const char *family_name, *map_name; - char s[MAX_TEST_NAME]; - - family_name =3D family_str(family); - map_name =3D map_type_str(map); - snprintf(s, sizeof(s), "%s %s %s", map_name, family_name, __func__); - if (!test__start_subtest(s)) - return; - udp_skb_redir_to_connected(skel, map, family); -} - static void run_tests(struct test_sockmap_listen *skel, struct bpf_map *ma= p, int family) { @@ -1539,7 +1414,6 @@ static void run_tests(struct test_sockmap_listen *ske= l, struct bpf_map *map, test_redir(skel, map, family, SOCK_STREAM); test_reuseport(skel, map, family, SOCK_STREAM); test_reuseport(skel, map, family, SOCK_DGRAM); - test_udp_redir(skel, map, family); } =20 void serial_test_sockmap_listen(void) --=20 2.49.0