selftests/bpf: Refactor out helper functions for a few tests
authorYonghong Song <yonghong.song@linux.dev>
Wed, 10 Apr 2024 04:35:42 +0000 (21:35 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 11 Apr 2024 02:52:25 +0000 (19:52 -0700)
These helper functions will be used later new tests as well.
There are no functionality change.

Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20240410043542.3738166-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/prog_tests/sockmap_basic.c
tools/testing/selftests/bpf/progs/test_skmsg_load_helpers.c

index 77e26ecffa9d79ba40f1f9b0abc85779baaf6593..63fb2da7930a5c00f956ad40cdba2fd4dc9f4406 100644 (file)
@@ -475,30 +475,19 @@ out:
                test_sockmap_drop_prog__destroy(drop);
 }
 
-static void test_sockmap_skb_verdict_peek(void)
+static void test_sockmap_skb_verdict_peek_helper(int map)
 {
-       int err, map, verdict, s, c1, p1, zero = 0, sent, recvd, avail;
-       struct test_sockmap_pass_prog *pass;
+       int err, s, c1, p1, zero = 0, sent, recvd, avail;
        char snd[256] = "0123456789";
        char rcv[256] = "0";
 
-       pass = test_sockmap_pass_prog__open_and_load();
-       if (!ASSERT_OK_PTR(pass, "open_and_load"))
-               return;
-       verdict = bpf_program__fd(pass->progs.prog_skb_verdict);
-       map = bpf_map__fd(pass->maps.sock_map_rx);
-
-       err = bpf_prog_attach(verdict, map, BPF_SK_SKB_STREAM_VERDICT, 0);
-       if (!ASSERT_OK(err, "bpf_prog_attach"))
-               goto out;
-
        s = socket_loopback(AF_INET, SOCK_STREAM);
        if (!ASSERT_GT(s, -1, "socket_loopback(s)"))
-               goto out;
+               return;
 
        err = create_pair(s, AF_INET, SOCK_STREAM, &c1, &p1);
        if (!ASSERT_OK(err, "create_pairs(s)"))
-               goto out;
+               return;
 
        err = bpf_map_update_elem(map, &zero, &c1, BPF_NOEXIST);
        if (!ASSERT_OK(err, "bpf_map_update_elem(c1)"))
@@ -520,6 +509,25 @@ static void test_sockmap_skb_verdict_peek(void)
 out_close:
        close(c1);
        close(p1);
+}
+
+static void test_sockmap_skb_verdict_peek(void)
+{
+       struct test_sockmap_pass_prog *pass;
+       int err, map, verdict;
+
+       pass = test_sockmap_pass_prog__open_and_load();
+       if (!ASSERT_OK_PTR(pass, "open_and_load"))
+               return;
+       verdict = bpf_program__fd(pass->progs.prog_skb_verdict);
+       map = bpf_map__fd(pass->maps.sock_map_rx);
+
+       err = bpf_prog_attach(verdict, map, BPF_SK_SKB_STREAM_VERDICT, 0);
+       if (!ASSERT_OK(err, "bpf_prog_attach"))
+               goto out;
+
+       test_sockmap_skb_verdict_peek_helper(map);
+
 out:
        test_sockmap_pass_prog__destroy(pass);
 }
index 45e8fc75a7397a0e68e5329893b21be4a63c8099..b753672f04c9acf1a7d49e229c22e10d3538979c 100644 (file)
@@ -24,8 +24,7 @@ struct {
        __type(value, __u64);
 } socket_storage SEC(".maps");
 
-SEC("sk_msg")
-int prog_msg_verdict(struct sk_msg_md *msg)
+static int prog_msg_verdict_common(struct sk_msg_md *msg)
 {
        struct task_struct *task = (struct task_struct *)bpf_get_current_task();
        int verdict = SK_PASS;
@@ -44,4 +43,10 @@ int prog_msg_verdict(struct sk_msg_md *msg)
        return verdict;
 }
 
+SEC("sk_msg")
+int prog_msg_verdict(struct sk_msg_md *msg)
+{
+       return prog_msg_verdict_common(msg);
+}
+
 char _license[] SEC("license") = "GPL";