Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 
0003 /*
0004  * Copyright 2020 Google LLC.
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 }