0001
0002
0003 #include <test_progs.h>
0004 #include <network_helpers.h>
0005 #include "kfunc_call_test.lskel.h"
0006 #include "kfunc_call_test_subprog.skel.h"
0007 #include "kfunc_call_test_subprog.lskel.h"
0008
0009 static void test_main(void)
0010 {
0011 struct kfunc_call_test_lskel *skel;
0012 int prog_fd, err;
0013 LIBBPF_OPTS(bpf_test_run_opts, topts,
0014 .data_in = &pkt_v4,
0015 .data_size_in = sizeof(pkt_v4),
0016 .repeat = 1,
0017 );
0018
0019 skel = kfunc_call_test_lskel__open_and_load();
0020 if (!ASSERT_OK_PTR(skel, "skel"))
0021 return;
0022
0023 prog_fd = skel->progs.kfunc_call_test1.prog_fd;
0024 err = bpf_prog_test_run_opts(prog_fd, &topts);
0025 ASSERT_OK(err, "bpf_prog_test_run(test1)");
0026 ASSERT_EQ(topts.retval, 12, "test1-retval");
0027
0028 prog_fd = skel->progs.kfunc_call_test2.prog_fd;
0029 err = bpf_prog_test_run_opts(prog_fd, &topts);
0030 ASSERT_OK(err, "bpf_prog_test_run(test2)");
0031 ASSERT_EQ(topts.retval, 3, "test2-retval");
0032
0033 prog_fd = skel->progs.kfunc_call_test_ref_btf_id.prog_fd;
0034 err = bpf_prog_test_run_opts(prog_fd, &topts);
0035 ASSERT_OK(err, "bpf_prog_test_run(test_ref_btf_id)");
0036 ASSERT_EQ(topts.retval, 0, "test_ref_btf_id-retval");
0037
0038 kfunc_call_test_lskel__destroy(skel);
0039 }
0040
0041 static void test_subprog(void)
0042 {
0043 struct kfunc_call_test_subprog *skel;
0044 int prog_fd, err;
0045 LIBBPF_OPTS(bpf_test_run_opts, topts,
0046 .data_in = &pkt_v4,
0047 .data_size_in = sizeof(pkt_v4),
0048 .repeat = 1,
0049 );
0050
0051 skel = kfunc_call_test_subprog__open_and_load();
0052 if (!ASSERT_OK_PTR(skel, "skel"))
0053 return;
0054
0055 prog_fd = bpf_program__fd(skel->progs.kfunc_call_test1);
0056 err = bpf_prog_test_run_opts(prog_fd, &topts);
0057 ASSERT_OK(err, "bpf_prog_test_run(test1)");
0058 ASSERT_EQ(topts.retval, 10, "test1-retval");
0059 ASSERT_NEQ(skel->data->active_res, -1, "active_res");
0060 ASSERT_EQ(skel->data->sk_state_res, BPF_TCP_CLOSE, "sk_state_res");
0061
0062 kfunc_call_test_subprog__destroy(skel);
0063 }
0064
0065 static void test_subprog_lskel(void)
0066 {
0067 struct kfunc_call_test_subprog_lskel *skel;
0068 int prog_fd, err;
0069 LIBBPF_OPTS(bpf_test_run_opts, topts,
0070 .data_in = &pkt_v4,
0071 .data_size_in = sizeof(pkt_v4),
0072 .repeat = 1,
0073 );
0074
0075 skel = kfunc_call_test_subprog_lskel__open_and_load();
0076 if (!ASSERT_OK_PTR(skel, "skel"))
0077 return;
0078
0079 prog_fd = skel->progs.kfunc_call_test1.prog_fd;
0080 err = bpf_prog_test_run_opts(prog_fd, &topts);
0081 ASSERT_OK(err, "bpf_prog_test_run(test1)");
0082 ASSERT_EQ(topts.retval, 10, "test1-retval");
0083 ASSERT_NEQ(skel->data->active_res, -1, "active_res");
0084 ASSERT_EQ(skel->data->sk_state_res, BPF_TCP_CLOSE, "sk_state_res");
0085
0086 kfunc_call_test_subprog_lskel__destroy(skel);
0087 }
0088
0089 void test_kfunc_call(void)
0090 {
0091 if (test__start_subtest("main"))
0092 test_main();
0093
0094 if (test__start_subtest("subprog"))
0095 test_subprog();
0096
0097 if (test__start_subtest("subprog_lskel"))
0098 test_subprog_lskel();
0099 }