Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: Test for get_netns_cookie

Add test to use get_netns_cookie() from BPF_PROG_TYPE_SK_MSG.

Signed-off-by: Xu Liu <liuxu623@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210820071712.52852-3-liuxu623@gmail.com

authored by

Xu Liu and committed by
Alexei Starovoitov
6cbca1ee fab60e29

+92 -28
+38 -19
tools/testing/selftests/bpf/prog_tests/netns_cookie.c
··· 12 12 13 13 void test_netns_cookie(void) 14 14 { 15 - int server_fd = 0, client_fd = 0, cgroup_fd = 0, err = 0, val = 0; 15 + int server_fd = -1, client_fd = -1, cgroup_fd = -1; 16 + int err, val, ret, map, verdict; 16 17 struct netns_cookie_prog *skel; 17 18 uint64_t cookie_expected_value; 18 19 socklen_t vallen = sizeof(cookie_expected_value); 20 + static const char send_msg[] = "message"; 19 21 20 22 skel = netns_cookie_prog__open_and_load(); 21 23 if (!ASSERT_OK_PTR(skel, "skel_open")) ··· 25 23 26 24 cgroup_fd = test__join_cgroup("/netns_cookie"); 27 25 if (CHECK(cgroup_fd < 0, "join_cgroup", "cgroup creation failed\n")) 28 - goto out; 26 + goto done; 29 27 30 28 skel->links.get_netns_cookie_sockops = bpf_program__attach_cgroup( 31 29 skel->progs.get_netns_cookie_sockops, cgroup_fd); 32 30 if (!ASSERT_OK_PTR(skel->links.get_netns_cookie_sockops, "prog_attach")) 33 - goto close_cgroup_fd; 31 + goto done; 32 + 33 + verdict = bpf_program__fd(skel->progs.get_netns_cookie_sk_msg); 34 + map = bpf_map__fd(skel->maps.sock_map); 35 + err = bpf_prog_attach(verdict, map, BPF_SK_MSG_VERDICT, 0); 36 + if (!ASSERT_OK(err, "prog_attach")) 37 + goto done; 34 38 35 39 server_fd = start_server(AF_INET6, SOCK_STREAM, "::1", 0, 0); 36 40 if (CHECK(server_fd < 0, "start_server", "errno %d\n", errno)) 37 - goto close_cgroup_fd; 41 + goto done; 38 42 39 43 client_fd = connect_to_fd(server_fd, 0); 40 44 if (CHECK(client_fd < 0, "connect_to_fd", "errno %d\n", errno)) 41 - goto close_server_fd; 45 + goto done; 42 46 43 - err = bpf_map_lookup_elem(bpf_map__fd(skel->maps.netns_cookies), 44 - &client_fd, &val); 45 - if (!ASSERT_OK(err, "map_lookup(socket_cookies)")) 46 - goto close_client_fd; 47 + ret = send(client_fd, send_msg, sizeof(send_msg), 0); 48 + if (CHECK(ret != sizeof(send_msg), "send(msg)", "ret:%d\n", ret)) 49 + goto done; 50 + 51 + err = bpf_map_lookup_elem(bpf_map__fd(skel->maps.sockops_netns_cookies), 52 + &client_fd, &val); 53 + if (!ASSERT_OK(err, "map_lookup(sockops_netns_cookies)")) 54 + goto done; 47 55 48 56 err = getsockopt(client_fd, SOL_SOCKET, SO_NETNS_COOKIE, 49 - &cookie_expected_value, &vallen); 50 - if (!ASSERT_OK(err, "getsockopt)")) 51 - goto close_client_fd; 57 + &cookie_expected_value, &vallen); 58 + if (!ASSERT_OK(err, "getsockopt")) 59 + goto done; 52 60 53 61 ASSERT_EQ(val, cookie_expected_value, "cookie_value"); 54 62 55 - close_client_fd: 56 - close(client_fd); 57 - close_server_fd: 58 - close(server_fd); 59 - close_cgroup_fd: 60 - close(cgroup_fd); 61 - out: 63 + err = bpf_map_lookup_elem(bpf_map__fd(skel->maps.sk_msg_netns_cookies), 64 + &client_fd, &val); 65 + if (!ASSERT_OK(err, "map_lookup(sk_msg_netns_cookies)")) 66 + goto done; 67 + 68 + ASSERT_EQ(val, cookie_expected_value, "cookie_value"); 69 + 70 + done: 71 + if (server_fd != -1) 72 + close(server_fd); 73 + if (client_fd != -1) 74 + close(client_fd); 75 + if (cgroup_fd != -1) 76 + close(cgroup_fd); 62 77 netns_cookie_prog__destroy(skel); 63 78 }