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