1076a95f5SAlan Maguire // SPDX-License-Identifier: GPL-2.0
2076a95f5SAlan Maguire #include <test_progs.h>
3076a95f5SAlan Maguire #include <linux/btf.h>
4076a95f5SAlan Maguire #include "netif_receive_skb.skel.h"
5076a95f5SAlan Maguire
6076a95f5SAlan Maguire /* Demonstrate that bpf_snprintf_btf succeeds and that various data types
7076a95f5SAlan Maguire * are formatted correctly.
8076a95f5SAlan Maguire */
serial_test_snprintf_btf(void)9*d3f7b166SYucong Sun void serial_test_snprintf_btf(void)
10076a95f5SAlan Maguire {
11076a95f5SAlan Maguire struct netif_receive_skb *skel;
12076a95f5SAlan Maguire struct netif_receive_skb__bss *bss;
13076a95f5SAlan Maguire int err, duration = 0;
14076a95f5SAlan Maguire
15076a95f5SAlan Maguire skel = netif_receive_skb__open();
16076a95f5SAlan Maguire if (CHECK(!skel, "skel_open", "failed to open skeleton\n"))
17076a95f5SAlan Maguire return;
18076a95f5SAlan Maguire
19076a95f5SAlan Maguire err = netif_receive_skb__load(skel);
20076a95f5SAlan Maguire if (CHECK(err, "skel_load", "failed to load skeleton: %d\n", err))
21076a95f5SAlan Maguire goto cleanup;
22076a95f5SAlan Maguire
23076a95f5SAlan Maguire bss = skel->bss;
24076a95f5SAlan Maguire
25076a95f5SAlan Maguire err = netif_receive_skb__attach(skel);
26076a95f5SAlan Maguire if (CHECK(err, "skel_attach", "skeleton attach failed: %d\n", err))
27076a95f5SAlan Maguire goto cleanup;
28076a95f5SAlan Maguire
29076a95f5SAlan Maguire /* generate receive event */
30c810b31eSJohn Fastabend err = system("ping -c 1 127.0.0.1 > /dev/null");
31c810b31eSJohn Fastabend if (CHECK(err, "system", "ping failed: %d\n", err))
32c810b31eSJohn Fastabend goto cleanup;
33076a95f5SAlan Maguire
34076a95f5SAlan Maguire if (bss->skip) {
35076a95f5SAlan Maguire printf("%s:SKIP:no __builtin_btf_type_id\n", __func__);
36076a95f5SAlan Maguire test__skip();
37076a95f5SAlan Maguire goto cleanup;
38076a95f5SAlan Maguire }
39076a95f5SAlan Maguire
40076a95f5SAlan Maguire /*
41076a95f5SAlan Maguire * Make sure netif_receive_skb program was triggered
42076a95f5SAlan Maguire * and it set expected return values from bpf_trace_printk()s
43076a95f5SAlan Maguire * and all tests ran.
44076a95f5SAlan Maguire */
457a2fa70aSAndrii Nakryiko if (!ASSERT_GT(bss->ret, 0, "bpf_snprintf_ret"))
46076a95f5SAlan Maguire goto cleanup;
47076a95f5SAlan Maguire
48076a95f5SAlan Maguire if (CHECK(bss->ran_subtests == 0, "check if subtests ran",
49076a95f5SAlan Maguire "no subtests ran, did BPF program run?"))
50076a95f5SAlan Maguire goto cleanup;
51076a95f5SAlan Maguire
52076a95f5SAlan Maguire if (CHECK(bss->num_subtests != bss->ran_subtests,
53076a95f5SAlan Maguire "check all subtests ran",
54076a95f5SAlan Maguire "only ran %d of %d tests\n", bss->num_subtests,
55076a95f5SAlan Maguire bss->ran_subtests))
56076a95f5SAlan Maguire goto cleanup;
57076a95f5SAlan Maguire
58076a95f5SAlan Maguire cleanup:
59076a95f5SAlan Maguire netif_receive_skb__destroy(skel);
60076a95f5SAlan Maguire }
61