1 // SPDX-License-Identifier: GPL-2.0 2 3 #include <test_progs.h> 4 #include "netns_cookie_prog.skel.h" 5 #include "network_helpers.h" 6 7 #ifndef SO_NETNS_COOKIE 8 #define SO_NETNS_COOKIE 71 9 #endif 10 11 static int duration; 12 13 void test_netns_cookie(void) 14 { 15 int server_fd = 0, client_fd = 0, cgroup_fd = 0, err = 0, val = 0; 16 struct netns_cookie_prog *skel; 17 uint64_t cookie_expected_value; 18 socklen_t vallen = sizeof(cookie_expected_value); 19 20 skel = netns_cookie_prog__open_and_load(); 21 if (!ASSERT_OK_PTR(skel, "skel_open")) 22 return; 23 24 cgroup_fd = test__join_cgroup("/netns_cookie"); 25 if (CHECK(cgroup_fd < 0, "join_cgroup", "cgroup creation failed\n")) 26 goto out; 27 28 skel->links.get_netns_cookie_sockops = bpf_program__attach_cgroup( 29 skel->progs.get_netns_cookie_sockops, cgroup_fd); 30 if (!ASSERT_OK_PTR(skel->links.get_netns_cookie_sockops, "prog_attach")) 31 goto close_cgroup_fd; 32 33 server_fd = start_server(AF_INET6, SOCK_STREAM, "::1", 0, 0); 34 if (CHECK(server_fd < 0, "start_server", "errno %d\n", errno)) 35 goto close_cgroup_fd; 36 37 client_fd = connect_to_fd(server_fd, 0); 38 if (CHECK(client_fd < 0, "connect_to_fd", "errno %d\n", errno)) 39 goto close_server_fd; 40 41 err = bpf_map_lookup_elem(bpf_map__fd(skel->maps.netns_cookies), 42 &client_fd, &val); 43 if (!ASSERT_OK(err, "map_lookup(socket_cookies)")) 44 goto close_client_fd; 45 46 err = getsockopt(client_fd, SOL_SOCKET, SO_NETNS_COOKIE, 47 &cookie_expected_value, &vallen); 48 if (!ASSERT_OK(err, "getsockopt)")) 49 goto close_client_fd; 50 51 ASSERT_EQ(val, cookie_expected_value, "cookie_value"); 52 53 close_client_fd: 54 close(client_fd); 55 close_server_fd: 56 close(server_fd); 57 close_cgroup_fd: 58 close(cgroup_fd); 59 out: 60 netns_cookie_prog__destroy(skel); 61 } 62