bpf: Tidy xdp attach selftests
authorKumar Kartikeya Dwivedi <memxor@gmail.com>
Fri, 2 Jul 2021 11:18:25 +0000 (16:48 +0530)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 8 Jul 2021 03:01:45 +0000 (20:01 -0700)
Support for cpumap and devmap entry progs in previous commits means the
test needs to be updated for the new semantics. Also take this
opportunity to convert it from CHECK macros to the new ASSERT macros.

Since xdp_cpumap_attach has no subtest, put the sole test inside the
test_xdp_cpumap_attach function.

Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://lore.kernel.org/bpf/20210702111825.491065-6-memxor@gmail.com
tools/testing/selftests/bpf/prog_tests/xdp_cpumap_attach.c
tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c

index 0176573fe4e7c3a229bb0eeac0496a47349c3ff0..8755effd80b0bea82166ae9649497e131b67fcab 100644 (file)
@@ -7,64 +7,53 @@
 
 #define IFINDEX_LO     1
 
-void test_xdp_with_cpumap_helpers(void)
+void test_xdp_cpumap_attach(void)
 {
        struct test_xdp_with_cpumap_helpers *skel;
        struct bpf_prog_info info = {};
+       __u32 len = sizeof(info);
        struct bpf_cpumap_val val = {
                .qsize = 192,
        };
-       __u32 duration = 0, idx = 0;
-       __u32 len = sizeof(info);
        int err, prog_fd, map_fd;
+       __u32 idx = 0;
 
        skel = test_xdp_with_cpumap_helpers__open_and_load();
-       if (CHECK_FAIL(!skel)) {
-               perror("test_xdp_with_cpumap_helpers__open_and_load");
+       if (!ASSERT_OK_PTR(skel, "test_xdp_with_cpumap_helpers__open_and_load"))
                return;
-       }
 
-       /* can not attach program with cpumaps that allow programs
-        * as xdp generic
-        */
        prog_fd = bpf_program__fd(skel->progs.xdp_redir_prog);
        err = bpf_set_link_xdp_fd(IFINDEX_LO, prog_fd, XDP_FLAGS_SKB_MODE);
-       CHECK(err == 0, "Generic attach of program with 8-byte CPUMAP",
-             "should have failed\n");
+       if (!ASSERT_OK(err, "Generic attach of program with 8-byte CPUMAP"))
+               goto out_close;
+
+       err = bpf_set_link_xdp_fd(IFINDEX_LO, -1, XDP_FLAGS_SKB_MODE);
+       ASSERT_OK(err, "XDP program detach");
 
        prog_fd = bpf_program__fd(skel->progs.xdp_dummy_cm);
        map_fd = bpf_map__fd(skel->maps.cpu_map);
        err = bpf_obj_get_info_by_fd(prog_fd, &info, &len);
-       if (CHECK_FAIL(err))
+       if (!ASSERT_OK(err, "bpf_obj_get_info_by_fd"))
                goto out_close;
 
        val.bpf_prog.fd = prog_fd;
        err = bpf_map_update_elem(map_fd, &idx, &val, 0);
-       CHECK(err, "Add program to cpumap entry", "err %d errno %d\n",
-             err, errno);
+       ASSERT_OK(err, "Add program to cpumap entry");
 
        err = bpf_map_lookup_elem(map_fd, &idx, &val);
-       CHECK(err, "Read cpumap entry", "err %d errno %d\n", err, errno);
-       CHECK(info.id != val.bpf_prog.id, "Expected program id in cpumap entry",
-             "expected %u read %u\n", info.id, val.bpf_prog.id);
+       ASSERT_OK(err, "Read cpumap entry");
+       ASSERT_EQ(info.id, val.bpf_prog.id, "Match program id to cpumap entry prog_id");
 
        /* can not attach BPF_XDP_CPUMAP program to a device */
        err = bpf_set_link_xdp_fd(IFINDEX_LO, prog_fd, XDP_FLAGS_SKB_MODE);
-       CHECK(err == 0, "Attach of BPF_XDP_CPUMAP program",
-             "should have failed\n");
+       if (!ASSERT_NEQ(err, 0, "Attach of BPF_XDP_CPUMAP program"))
+               bpf_set_link_xdp_fd(IFINDEX_LO, -1, XDP_FLAGS_SKB_MODE);
 
        val.qsize = 192;
        val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog);
        err = bpf_map_update_elem(map_fd, &idx, &val, 0);
-       CHECK(err == 0, "Add non-BPF_XDP_CPUMAP program to cpumap entry",
-             "should have failed\n");
+       ASSERT_NEQ(err, 0, "Add non-BPF_XDP_CPUMAP program to cpumap entry");
 
 out_close:
        test_xdp_with_cpumap_helpers__destroy(skel);
 }
-
-void test_xdp_cpumap_attach(void)
-{
-       if (test__start_subtest("cpumap_with_progs"))
-               test_xdp_with_cpumap_helpers();
-}
index 88ef3ec8ac4c21ca6972da8b925ec4e4afb4612d..c72af030ff1014aea541ca128428fa80182a758e 100644 (file)
@@ -16,50 +16,45 @@ void test_xdp_with_devmap_helpers(void)
                .ifindex = IFINDEX_LO,
        };
        __u32 len = sizeof(info);
-       __u32 duration = 0, idx = 0;
        int err, dm_fd, map_fd;
+       __u32 idx = 0;
 
 
        skel = test_xdp_with_devmap_helpers__open_and_load();
-       if (CHECK_FAIL(!skel)) {
-               perror("test_xdp_with_devmap_helpers__open_and_load");
+       if (!ASSERT_OK_PTR(skel, "test_xdp_with_devmap_helpers__open_and_load"))
                return;
-       }
 
-       /* can not attach program with DEVMAPs that allow programs
-        * as xdp generic
-        */
        dm_fd = bpf_program__fd(skel->progs.xdp_redir_prog);
        err = bpf_set_link_xdp_fd(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE);
-       CHECK(err == 0, "Generic attach of program with 8-byte devmap",
-             "should have failed\n");
+       if (!ASSERT_OK(err, "Generic attach of program with 8-byte devmap"))
+               goto out_close;
+
+       err = bpf_set_link_xdp_fd(IFINDEX_LO, -1, XDP_FLAGS_SKB_MODE);
+       ASSERT_OK(err, "XDP program detach");
 
        dm_fd = bpf_program__fd(skel->progs.xdp_dummy_dm);
        map_fd = bpf_map__fd(skel->maps.dm_ports);
        err = bpf_obj_get_info_by_fd(dm_fd, &info, &len);
-       if (CHECK_FAIL(err))
+       if (!ASSERT_OK(err, "bpf_obj_get_info_by_fd"))
                goto out_close;
 
        val.bpf_prog.fd = dm_fd;
        err = bpf_map_update_elem(map_fd, &idx, &val, 0);
-       CHECK(err, "Add program to devmap entry",
-             "err %d errno %d\n", err, errno);
+       ASSERT_OK(err, "Add program to devmap entry");
 
        err = bpf_map_lookup_elem(map_fd, &idx, &val);
-       CHECK(err, "Read devmap entry", "err %d errno %d\n", err, errno);
-       CHECK(info.id != val.bpf_prog.id, "Expected program id in devmap entry",
-             "expected %u read %u\n", info.id, val.bpf_prog.id);
+       ASSERT_OK(err, "Read devmap entry");
+       ASSERT_EQ(info.id, val.bpf_prog.id, "Match program id to devmap entry prog_id");
 
        /* can not attach BPF_XDP_DEVMAP program to a device */
        err = bpf_set_link_xdp_fd(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE);
-       CHECK(err == 0, "Attach of BPF_XDP_DEVMAP program",
-             "should have failed\n");
+       if (!ASSERT_NEQ(err, 0, "Attach of BPF_XDP_DEVMAP program"))
+               bpf_set_link_xdp_fd(IFINDEX_LO, -1, XDP_FLAGS_SKB_MODE);
 
        val.ifindex = 1;
        val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog);
        err = bpf_map_update_elem(map_fd, &idx, &val, 0);
-       CHECK(err == 0, "Add non-BPF_XDP_DEVMAP program to devmap entry",
-             "should have failed\n");
+       ASSERT_NEQ(err, 0, "Add non-BPF_XDP_DEVMAP program to devmap entry");
 
 out_close:
        test_xdp_with_devmap_helpers__destroy(skel);
@@ -68,12 +63,10 @@ out_close:
 void test_neg_xdp_devmap_helpers(void)
 {
        struct test_xdp_devmap_helpers *skel;
-       __u32 duration = 0;
 
        skel = test_xdp_devmap_helpers__open_and_load();
-       if (CHECK(skel,
-                 "Load of XDP program accessing egress ifindex without attach type",
-                 "should have failed\n")) {
+       if (!ASSERT_EQ(skel, NULL,
+                   "Load of XDP program accessing egress ifindex without attach type")) {
                test_xdp_devmap_helpers__destroy(skel);
        }
 }