[PATCH bpf-next v3 4/8] selftests/bpf: Introduce verdict programs for sockmap_redir

Michal Luczaj posted 8 patches 7 months, 1 week ago
[PATCH bpf-next v3 4/8] selftests/bpf: Introduce verdict programs for sockmap_redir
Posted by Michal Luczaj 7 months, 1 week ago
Instead of piggybacking on test_sockmap_listen, introduce
test_sockmap_redir especially for sockmap redirection tests.

Suggested-by: Jiayuan Chen <mrpre@163.com>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Michal Luczaj <mhal@rbox.co>
---
 .../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..34d9f4f2f0a2e638c6e05cfa9f19971bd36c11ea
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_sockmap_redir.c
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+#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 == BPF_MAP_TYPE_SOCKMAP)                             \
+		verdict = redirect_map(data);                                  \
+	else if (redirect_type == BPF_MAP_TYPE_SOCKHASH)                       \
+		verdict = redirect_hash(data);                                 \
+	else                                                                   \
+		verdict = redirect_type - __MAX_BPF_MAP_TYPE;                  \
+									       \
+	count = 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") = "GPL";

-- 
2.49.0
Re: [PATCH bpf-next v3 4/8] selftests/bpf: Introduce verdict programs for sockmap_redir
Posted by John Fastabend 7 months, 1 week ago
On 2025-05-15 00:15:27, Michal Luczaj wrote:
> Instead of piggybacking on test_sockmap_listen, introduce
> test_sockmap_redir especially for sockmap redirection tests.
> 
> Suggested-by: Jiayuan Chen <mrpre@163.com>
> Acked-by: John Fastabend <john.fastabend@gmail.com>
> Signed-off-by: Michal Luczaj <mhal@rbox.co>
> ---

LGTM, this is a net new patch in v3 though correct? In the future
only carry the Acks into patches that are from the previous version
and not substantially changed.

All the same thanks for doing this. For this patch.

Acked-by: John Fastabend <john.fastabend@gmail.com>
Re: [PATCH bpf-next v3 4/8] selftests/bpf: Introduce verdict programs for sockmap_redir
Posted by Michal Luczaj 7 months, 1 week ago
On 5/15/25 06:29, John Fastabend wrote:
> On 2025-05-15 00:15:27, Michal Luczaj wrote:
>> Instead of piggybacking on test_sockmap_listen, introduce
>> test_sockmap_redir especially for sockmap redirection tests.
>>
>> Suggested-by: Jiayuan Chen <mrpre@163.com>
>> Acked-by: John Fastabend <john.fastabend@gmail.com>
>> Signed-off-by: Michal Luczaj <mhal@rbox.co>
>> ---
> 
> LGTM, this is a net new patch in v3 though correct? In the future
> only carry the Acks into patches that are from the previous version
> and not substantially changed.

Will do, sorry.

Note that I wasn't being sneaky, I asked about it in the cover letter :)

Thanks,
Michal

> All the same thanks for doing this. For this patch.
> 
> Acked-by: John Fastabend <john.fastabend@gmail.com>