File Index
Files and directories
Sign in
FILE

prepare.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/bpf/prog_tests/prepare.c C
 1// SPDX-License-Identifier: GPL-2.0
 2/* Copyright (c) 2025 Meta */
 3
 4#include <test_progs.h>
 5#include <network_helpers.h>
 6#include "prepare.skel.h"
 7
 8static bool check_prepared(struct bpf_object *obj)
 9{
10	bool is_prepared = true;
11	const struct bpf_map *map;
12
13	bpf_object__for_each_map(map, obj) {
14		if (bpf_map__fd(map) < 0)
15			is_prepared = false;
16	}
17
18	return is_prepared;
19}
20
21static void test_prepare_no_load(void)
22{
23	struct prepare *skel;
24	int err;
25	LIBBPF_OPTS(bpf_test_run_opts, topts,
26		    .data_in = &pkt_v4,
27		    .data_size_in = sizeof(pkt_v4),
28	);
29
30	skel = prepare__open();
31	if (!ASSERT_OK_PTR(skel, "prepare__open"))
32		return;
33
34	if (!ASSERT_FALSE(check_prepared(skel->obj), "not check_prepared"))
35		goto cleanup;
36
37	err = bpf_object__prepare(skel->obj);
38
39	if (!ASSERT_TRUE(check_prepared(skel->obj), "check_prepared"))
40		goto cleanup;
41
42	if (!ASSERT_OK(err, "bpf_object__prepare"))
43		goto cleanup;
44
45cleanup:
46	prepare__destroy(skel);
47}
48
49static void test_prepare_load(void)
50{
51	struct prepare *skel;
52	int err, prog_fd;
53	LIBBPF_OPTS(bpf_test_run_opts, topts,
54		    .data_in = &pkt_v4,
55		    .data_size_in = sizeof(pkt_v4),
56	);
57
58	skel = prepare__open();
59	if (!ASSERT_OK_PTR(skel, "prepare__open"))
60		return;
61
62	if (!ASSERT_FALSE(check_prepared(skel->obj), "not check_prepared"))
63		goto cleanup;
64
65	err = bpf_object__prepare(skel->obj);
66	if (!ASSERT_OK(err, "bpf_object__prepare"))
67		goto cleanup;
68
69	err = prepare__load(skel);
70	if (!ASSERT_OK(err, "prepare__load"))
71		goto cleanup;
72
73	if (!ASSERT_TRUE(check_prepared(skel->obj), "check_prepared"))
74		goto cleanup;
75
76	prog_fd = bpf_program__fd(skel->progs.program);
77	if (!ASSERT_GE(prog_fd, 0, "prog_fd"))
78		goto cleanup;
79
80	err = bpf_prog_test_run_opts(prog_fd, &topts);
81	if (!ASSERT_OK(err, "test_run_opts err"))
82		goto cleanup;
83
84	if (!ASSERT_OK(topts.retval, "test_run_opts retval"))
85		goto cleanup;
86
87	ASSERT_EQ(skel->bss->err, 0, "err");
88
89cleanup:
90	prepare__destroy(skel);
91}
92
93void test_prepare(void)
94{
95	if (test__start_subtest("prepare_load"))
96		test_prepare_load();
97	if (test__start_subtest("prepare_no_load"))
98		test_prepare_no_load();
99}
~/ Read-only file preview.