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