Commit 36246d5a authored by Kumar Kartikeya Dwivedi's avatar Kumar Kartikeya Dwivedi Committed by Alexei Starovoitov

bpf: Tidy xdp attach selftests

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: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Reviewed-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
Link: https://lore.kernel.org/bpf/20210702111825.491065-6-memxor@gmail.com
parent 2ea5eaba
...@@ -7,64 +7,53 @@ ...@@ -7,64 +7,53 @@
#define IFINDEX_LO 1 #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 test_xdp_with_cpumap_helpers *skel;
struct bpf_prog_info info = {}; struct bpf_prog_info info = {};
__u32 len = sizeof(info);
struct bpf_cpumap_val val = { struct bpf_cpumap_val val = {
.qsize = 192, .qsize = 192,
}; };
__u32 duration = 0, idx = 0;
__u32 len = sizeof(info);
int err, prog_fd, map_fd; int err, prog_fd, map_fd;
__u32 idx = 0;
skel = test_xdp_with_cpumap_helpers__open_and_load(); skel = test_xdp_with_cpumap_helpers__open_and_load();
if (CHECK_FAIL(!skel)) { if (!ASSERT_OK_PTR(skel, "test_xdp_with_cpumap_helpers__open_and_load"))
perror("test_xdp_with_cpumap_helpers__open_and_load");
return; return;
}
/* can not attach program with cpumaps that allow programs
* as xdp generic
*/
prog_fd = bpf_program__fd(skel->progs.xdp_redir_prog); prog_fd = bpf_program__fd(skel->progs.xdp_redir_prog);
err = bpf_set_link_xdp_fd(IFINDEX_LO, prog_fd, XDP_FLAGS_SKB_MODE); 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", if (!ASSERT_OK(err, "Generic attach of program with 8-byte CPUMAP"))
"should have failed\n"); 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); prog_fd = bpf_program__fd(skel->progs.xdp_dummy_cm);
map_fd = bpf_map__fd(skel->maps.cpu_map); map_fd = bpf_map__fd(skel->maps.cpu_map);
err = bpf_obj_get_info_by_fd(prog_fd, &info, &len); 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; goto out_close;
val.bpf_prog.fd = prog_fd; val.bpf_prog.fd = prog_fd;
err = bpf_map_update_elem(map_fd, &idx, &val, 0); err = bpf_map_update_elem(map_fd, &idx, &val, 0);
CHECK(err, "Add program to cpumap entry", "err %d errno %d\n", ASSERT_OK(err, "Add program to cpumap entry");
err, errno);
err = bpf_map_lookup_elem(map_fd, &idx, &val); err = bpf_map_lookup_elem(map_fd, &idx, &val);
CHECK(err, "Read cpumap entry", "err %d errno %d\n", err, errno); ASSERT_OK(err, "Read cpumap entry");
CHECK(info.id != val.bpf_prog.id, "Expected program id in cpumap entry", ASSERT_EQ(info.id, val.bpf_prog.id, "Match program id to cpumap entry prog_id");
"expected %u read %u\n", info.id, val.bpf_prog.id);
/* can not attach BPF_XDP_CPUMAP program to a device */ /* can not attach BPF_XDP_CPUMAP program to a device */
err = bpf_set_link_xdp_fd(IFINDEX_LO, prog_fd, XDP_FLAGS_SKB_MODE); err = bpf_set_link_xdp_fd(IFINDEX_LO, prog_fd, XDP_FLAGS_SKB_MODE);
CHECK(err == 0, "Attach of BPF_XDP_CPUMAP program", if (!ASSERT_NEQ(err, 0, "Attach of BPF_XDP_CPUMAP program"))
"should have failed\n"); bpf_set_link_xdp_fd(IFINDEX_LO, -1, XDP_FLAGS_SKB_MODE);
val.qsize = 192; val.qsize = 192;
val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog); val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog);
err = bpf_map_update_elem(map_fd, &idx, &val, 0); err = bpf_map_update_elem(map_fd, &idx, &val, 0);
CHECK(err == 0, "Add non-BPF_XDP_CPUMAP program to cpumap entry", ASSERT_NEQ(err, 0, "Add non-BPF_XDP_CPUMAP program to cpumap entry");
"should have failed\n");
out_close: out_close:
test_xdp_with_cpumap_helpers__destroy(skel); 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();
}
...@@ -16,50 +16,45 @@ void test_xdp_with_devmap_helpers(void) ...@@ -16,50 +16,45 @@ void test_xdp_with_devmap_helpers(void)
.ifindex = IFINDEX_LO, .ifindex = IFINDEX_LO,
}; };
__u32 len = sizeof(info); __u32 len = sizeof(info);
__u32 duration = 0, idx = 0;
int err, dm_fd, map_fd; int err, dm_fd, map_fd;
__u32 idx = 0;
skel = test_xdp_with_devmap_helpers__open_and_load(); skel = test_xdp_with_devmap_helpers__open_and_load();
if (CHECK_FAIL(!skel)) { if (!ASSERT_OK_PTR(skel, "test_xdp_with_devmap_helpers__open_and_load"))
perror("test_xdp_with_devmap_helpers__open_and_load");
return; return;
}
/* can not attach program with DEVMAPs that allow programs
* as xdp generic
*/
dm_fd = bpf_program__fd(skel->progs.xdp_redir_prog); dm_fd = bpf_program__fd(skel->progs.xdp_redir_prog);
err = bpf_set_link_xdp_fd(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE); 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", if (!ASSERT_OK(err, "Generic attach of program with 8-byte devmap"))
"should have failed\n"); 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); dm_fd = bpf_program__fd(skel->progs.xdp_dummy_dm);
map_fd = bpf_map__fd(skel->maps.dm_ports); map_fd = bpf_map__fd(skel->maps.dm_ports);
err = bpf_obj_get_info_by_fd(dm_fd, &info, &len); 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; goto out_close;
val.bpf_prog.fd = dm_fd; val.bpf_prog.fd = dm_fd;
err = bpf_map_update_elem(map_fd, &idx, &val, 0); err = bpf_map_update_elem(map_fd, &idx, &val, 0);
CHECK(err, "Add program to devmap entry", ASSERT_OK(err, "Add program to devmap entry");
"err %d errno %d\n", err, errno);
err = bpf_map_lookup_elem(map_fd, &idx, &val); err = bpf_map_lookup_elem(map_fd, &idx, &val);
CHECK(err, "Read devmap entry", "err %d errno %d\n", err, errno); ASSERT_OK(err, "Read devmap entry");
CHECK(info.id != val.bpf_prog.id, "Expected program id in devmap entry", ASSERT_EQ(info.id, val.bpf_prog.id, "Match program id to devmap entry prog_id");
"expected %u read %u\n", info.id, val.bpf_prog.id);
/* can not attach BPF_XDP_DEVMAP program to a device */ /* can not attach BPF_XDP_DEVMAP program to a device */
err = bpf_set_link_xdp_fd(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE); err = bpf_set_link_xdp_fd(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE);
CHECK(err == 0, "Attach of BPF_XDP_DEVMAP program", if (!ASSERT_NEQ(err, 0, "Attach of BPF_XDP_DEVMAP program"))
"should have failed\n"); bpf_set_link_xdp_fd(IFINDEX_LO, -1, XDP_FLAGS_SKB_MODE);
val.ifindex = 1; val.ifindex = 1;
val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog); val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog);
err = bpf_map_update_elem(map_fd, &idx, &val, 0); err = bpf_map_update_elem(map_fd, &idx, &val, 0);
CHECK(err == 0, "Add non-BPF_XDP_DEVMAP program to devmap entry", ASSERT_NEQ(err, 0, "Add non-BPF_XDP_DEVMAP program to devmap entry");
"should have failed\n");
out_close: out_close:
test_xdp_with_devmap_helpers__destroy(skel); test_xdp_with_devmap_helpers__destroy(skel);
...@@ -68,12 +63,10 @@ void test_xdp_with_devmap_helpers(void) ...@@ -68,12 +63,10 @@ void test_xdp_with_devmap_helpers(void)
void test_neg_xdp_devmap_helpers(void) void test_neg_xdp_devmap_helpers(void)
{ {
struct test_xdp_devmap_helpers *skel; struct test_xdp_devmap_helpers *skel;
__u32 duration = 0;
skel = test_xdp_devmap_helpers__open_and_load(); skel = test_xdp_devmap_helpers__open_and_load();
if (CHECK(skel, if (!ASSERT_EQ(skel, NULL,
"Load of XDP program accessing egress ifindex without attach type", "Load of XDP program accessing egress ifindex without attach type")) {
"should have failed\n")) {
test_xdp_devmap_helpers__destroy(skel); test_xdp_devmap_helpers__destroy(skel);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment