Loading...
Note: File does not exist in v3.5.6.
1// SPDX-License-Identifier: GPL-2.0
2#include <test_progs.h>
3#include <network_helpers.h>
4
5#include "map_kptr.skel.h"
6#include "map_kptr_fail.skel.h"
7
8static void test_map_kptr_success(bool test_run)
9{
10 LIBBPF_OPTS(bpf_test_run_opts, opts,
11 .data_in = &pkt_v4,
12 .data_size_in = sizeof(pkt_v4),
13 .repeat = 1,
14 );
15 struct map_kptr *skel;
16 int key = 0, ret;
17 char buf[16];
18
19 skel = map_kptr__open_and_load();
20 if (!ASSERT_OK_PTR(skel, "map_kptr__open_and_load"))
21 return;
22
23 ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.test_map_kptr_ref), &opts);
24 ASSERT_OK(ret, "test_map_kptr_ref refcount");
25 ASSERT_OK(opts.retval, "test_map_kptr_ref retval");
26 ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.test_map_kptr_ref2), &opts);
27 ASSERT_OK(ret, "test_map_kptr_ref2 refcount");
28 ASSERT_OK(opts.retval, "test_map_kptr_ref2 retval");
29
30 if (test_run)
31 goto exit;
32
33 ret = bpf_map__update_elem(skel->maps.array_map,
34 &key, sizeof(key), buf, sizeof(buf), 0);
35 ASSERT_OK(ret, "array_map update");
36 ret = bpf_map__update_elem(skel->maps.array_map,
37 &key, sizeof(key), buf, sizeof(buf), 0);
38 ASSERT_OK(ret, "array_map update2");
39
40 ret = bpf_map__update_elem(skel->maps.hash_map,
41 &key, sizeof(key), buf, sizeof(buf), 0);
42 ASSERT_OK(ret, "hash_map update");
43 ret = bpf_map__delete_elem(skel->maps.hash_map, &key, sizeof(key), 0);
44 ASSERT_OK(ret, "hash_map delete");
45
46 ret = bpf_map__update_elem(skel->maps.hash_malloc_map,
47 &key, sizeof(key), buf, sizeof(buf), 0);
48 ASSERT_OK(ret, "hash_malloc_map update");
49 ret = bpf_map__delete_elem(skel->maps.hash_malloc_map, &key, sizeof(key), 0);
50 ASSERT_OK(ret, "hash_malloc_map delete");
51
52 ret = bpf_map__update_elem(skel->maps.lru_hash_map,
53 &key, sizeof(key), buf, sizeof(buf), 0);
54 ASSERT_OK(ret, "lru_hash_map update");
55 ret = bpf_map__delete_elem(skel->maps.lru_hash_map, &key, sizeof(key), 0);
56 ASSERT_OK(ret, "lru_hash_map delete");
57
58exit:
59 map_kptr__destroy(skel);
60}
61
62void test_map_kptr(void)
63{
64 if (test__start_subtest("success")) {
65 test_map_kptr_success(false);
66 /* Do test_run twice, so that we see refcount going back to 1
67 * after we leave it in map from first iteration.
68 */
69 test_map_kptr_success(true);
70 }
71
72 RUN_TESTS(map_kptr_fail);
73}