Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
  1// SPDX-License-Identifier: GPL-2.0
  2/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
  3
  4#include <test_progs.h>
  5#include <network_helpers.h>
  6
  7#include "local_kptr_stash.skel.h"
  8#include "local_kptr_stash_fail.skel.h"
  9static void test_local_kptr_stash_simple(void)
 10{
 11	LIBBPF_OPTS(bpf_test_run_opts, opts,
 12		    .data_in = &pkt_v4,
 13		    .data_size_in = sizeof(pkt_v4),
 14		    .repeat = 1,
 15	);
 16	struct local_kptr_stash *skel;
 17	int ret;
 18
 19	skel = local_kptr_stash__open_and_load();
 20	if (!ASSERT_OK_PTR(skel, "local_kptr_stash__open_and_load"))
 21		return;
 22
 23	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.stash_rb_nodes), &opts);
 24	ASSERT_OK(ret, "local_kptr_stash_add_nodes run");
 25	ASSERT_OK(opts.retval, "local_kptr_stash_add_nodes retval");
 26
 27	local_kptr_stash__destroy(skel);
 28}
 29
 30static void test_local_kptr_stash_plain(void)
 31{
 32	LIBBPF_OPTS(bpf_test_run_opts, opts,
 33		    .data_in = &pkt_v4,
 34		    .data_size_in = sizeof(pkt_v4),
 35		    .repeat = 1,
 36	);
 37	struct local_kptr_stash *skel;
 38	int ret;
 39
 40	skel = local_kptr_stash__open_and_load();
 41	if (!ASSERT_OK_PTR(skel, "local_kptr_stash__open_and_load"))
 42		return;
 43
 44	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.stash_plain), &opts);
 45	ASSERT_OK(ret, "local_kptr_stash_add_plain run");
 46	ASSERT_OK(opts.retval, "local_kptr_stash_add_plain retval");
 47
 48	local_kptr_stash__destroy(skel);
 49}
 50
 51static void test_local_kptr_stash_local_with_root(void)
 52{
 53	LIBBPF_OPTS(bpf_test_run_opts, opts,
 54		    .data_in = &pkt_v4,
 55		    .data_size_in = sizeof(pkt_v4),
 56		    .repeat = 1,
 57	);
 58	struct local_kptr_stash *skel;
 59	int ret;
 60
 61	skel = local_kptr_stash__open_and_load();
 62	if (!ASSERT_OK_PTR(skel, "local_kptr_stash__open_and_load"))
 63		return;
 64
 65	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.stash_local_with_root), &opts);
 66	ASSERT_OK(ret, "local_kptr_stash_add_local_with_root run");
 67	ASSERT_OK(opts.retval, "local_kptr_stash_add_local_with_root retval");
 68
 69	local_kptr_stash__destroy(skel);
 70}
 71
 72static void test_local_kptr_stash_unstash(void)
 73{
 74	LIBBPF_OPTS(bpf_test_run_opts, opts,
 75		    .data_in = &pkt_v4,
 76		    .data_size_in = sizeof(pkt_v4),
 77		    .repeat = 1,
 78	);
 79	struct local_kptr_stash *skel;
 80	int ret;
 81
 82	skel = local_kptr_stash__open_and_load();
 83	if (!ASSERT_OK_PTR(skel, "local_kptr_stash__open_and_load"))
 84		return;
 85
 86	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.stash_rb_nodes), &opts);
 87	ASSERT_OK(ret, "local_kptr_stash_add_nodes run");
 88	ASSERT_OK(opts.retval, "local_kptr_stash_add_nodes retval");
 89
 90	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.unstash_rb_node), &opts);
 91	ASSERT_OK(ret, "local_kptr_stash_add_nodes run");
 92	ASSERT_EQ(opts.retval, 42, "local_kptr_stash_add_nodes retval");
 93
 94	local_kptr_stash__destroy(skel);
 95}
 96
 97static void test_refcount_acquire_without_unstash(void)
 98{
 99	LIBBPF_OPTS(bpf_test_run_opts, opts,
100		    .data_in = &pkt_v4,
101		    .data_size_in = sizeof(pkt_v4),
102		    .repeat = 1,
103	);
104	struct local_kptr_stash *skel;
105	int ret;
106
107	skel = local_kptr_stash__open_and_load();
108	if (!ASSERT_OK_PTR(skel, "local_kptr_stash__open_and_load"))
109		return;
110
111	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.refcount_acquire_without_unstash),
112				     &opts);
113	ASSERT_OK(ret, "refcount_acquire_without_unstash run");
114	ASSERT_EQ(opts.retval, 2, "refcount_acquire_without_unstash retval");
115
116	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.stash_refcounted_node), &opts);
117	ASSERT_OK(ret, "stash_refcounted_node run");
118	ASSERT_OK(opts.retval, "stash_refcounted_node retval");
119
120	ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.refcount_acquire_without_unstash),
121				     &opts);
122	ASSERT_OK(ret, "refcount_acquire_without_unstash (2) run");
123	ASSERT_EQ(opts.retval, 42, "refcount_acquire_without_unstash (2) retval");
124
125	local_kptr_stash__destroy(skel);
126}
127
128static void test_local_kptr_stash_fail(void)
129{
130	RUN_TESTS(local_kptr_stash_fail);
131}
132
133void test_local_kptr_stash(void)
134{
135	if (test__start_subtest("local_kptr_stash_simple"))
136		test_local_kptr_stash_simple();
137	if (test__start_subtest("local_kptr_stash_plain"))
138		test_local_kptr_stash_plain();
139	if (test__start_subtest("local_kptr_stash_local_with_root"))
140		test_local_kptr_stash_local_with_root();
141	if (test__start_subtest("local_kptr_stash_unstash"))
142		test_local_kptr_stash_unstash();
143	if (test__start_subtest("refcount_acquire_without_unstash"))
144		test_refcount_acquire_without_unstash();
145	if (test__start_subtest("local_kptr_stash_fail"))
146		test_local_kptr_stash_fail();
147}