0001
0002
0003
0004
0005
0006
0007 #include <test_progs.h>
0008 #include <network_helpers.h>
0009
0010 void test_load_bytes_relative(void)
0011 {
0012 int server_fd, cgroup_fd, prog_fd, map_fd, client_fd;
0013 int err;
0014 struct bpf_object *obj;
0015 struct bpf_program *prog;
0016 struct bpf_map *test_result;
0017 __u32 duration = 0;
0018
0019 __u32 map_key = 0;
0020 __u32 map_value = 0;
0021
0022 cgroup_fd = test__join_cgroup("/load_bytes_relative");
0023 if (CHECK_FAIL(cgroup_fd < 0))
0024 return;
0025
0026 server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
0027 if (CHECK_FAIL(server_fd < 0))
0028 goto close_cgroup_fd;
0029
0030 err = bpf_prog_test_load("./load_bytes_relative.o", BPF_PROG_TYPE_CGROUP_SKB,
0031 &obj, &prog_fd);
0032 if (CHECK_FAIL(err))
0033 goto close_server_fd;
0034
0035 test_result = bpf_object__find_map_by_name(obj, "test_result");
0036 if (CHECK_FAIL(!test_result))
0037 goto close_bpf_object;
0038
0039 map_fd = bpf_map__fd(test_result);
0040 if (map_fd < 0)
0041 goto close_bpf_object;
0042
0043 prog = bpf_object__find_program_by_name(obj, "load_bytes_relative");
0044 if (CHECK_FAIL(!prog))
0045 goto close_bpf_object;
0046
0047 err = bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_INET_EGRESS,
0048 BPF_F_ALLOW_MULTI);
0049 if (CHECK_FAIL(err))
0050 goto close_bpf_object;
0051
0052 client_fd = connect_to_fd(server_fd, 0);
0053 if (CHECK_FAIL(client_fd < 0))
0054 goto close_bpf_object;
0055 close(client_fd);
0056
0057 err = bpf_map_lookup_elem(map_fd, &map_key, &map_value);
0058 if (CHECK_FAIL(err))
0059 goto close_bpf_object;
0060
0061 CHECK(map_value != 1, "bpf", "bpf program returned failure");
0062
0063 close_bpf_object:
0064 bpf_object__close(obj);
0065
0066 close_server_fd:
0067 close(server_fd);
0068
0069 close_cgroup_fd:
0070 close(cgroup_fd);
0071 }