xref: /openbmc/linux/tools/testing/selftests/bpf/prog_tests/snprintf_btf.c (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
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