Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /* Copyright (c) 2021 Facebook */
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 }