1 // SPDX-License-Identifier: GPL-2.0 2 #include <test_progs.h> 3 #include "get_func_ip_test.skel.h" 4 5 static void test_function_entry(void) 6 { 7 struct get_func_ip_test *skel = NULL; 8 int err, prog_fd; 9 LIBBPF_OPTS(bpf_test_run_opts, topts); 10 11 skel = get_func_ip_test__open(); 12 if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open")) 13 return; 14 15 err = get_func_ip_test__load(skel); 16 if (!ASSERT_OK(err, "get_func_ip_test__load")) 17 goto cleanup; 18 19 err = get_func_ip_test__attach(skel); 20 if (!ASSERT_OK(err, "get_func_ip_test__attach")) 21 goto cleanup; 22 23 prog_fd = bpf_program__fd(skel->progs.test1); 24 err = bpf_prog_test_run_opts(prog_fd, &topts); 25 ASSERT_OK(err, "test_run"); 26 ASSERT_EQ(topts.retval, 0, "test_run"); 27 28 prog_fd = bpf_program__fd(skel->progs.test5); 29 err = bpf_prog_test_run_opts(prog_fd, &topts); 30 31 ASSERT_OK(err, "test_run"); 32 33 ASSERT_EQ(skel->bss->test1_result, 1, "test1_result"); 34 ASSERT_EQ(skel->bss->test2_result, 1, "test2_result"); 35 ASSERT_EQ(skel->bss->test3_result, 1, "test3_result"); 36 ASSERT_EQ(skel->bss->test4_result, 1, "test4_result"); 37 ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); 38 39 cleanup: 40 get_func_ip_test__destroy(skel); 41 } 42 43 /* test6 is x86_64 specific because of the instruction 44 * offset, disabling it for all other archs 45 */ 46 #ifdef __x86_64__ 47 static void test_function_body(void) 48 { 49 struct get_func_ip_test *skel = NULL; 50 LIBBPF_OPTS(bpf_test_run_opts, topts); 51 LIBBPF_OPTS(bpf_kprobe_opts, kopts); 52 struct bpf_link *link6 = NULL; 53 int err, prog_fd; 54 55 skel = get_func_ip_test__open(); 56 if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open")) 57 return; 58 59 bpf_program__set_autoload(skel->progs.test6, true); 60 61 err = get_func_ip_test__load(skel); 62 if (!ASSERT_OK(err, "get_func_ip_test__load")) 63 goto cleanup; 64 65 kopts.offset = skel->kconfig->CONFIG_X86_KERNEL_IBT ? 9 : 5; 66 67 link6 = bpf_program__attach_kprobe_opts(skel->progs.test6, "bpf_fentry_test6", &kopts); 68 if (!ASSERT_OK_PTR(link6, "link6")) 69 goto cleanup; 70 71 prog_fd = bpf_program__fd(skel->progs.test1); 72 err = bpf_prog_test_run_opts(prog_fd, &topts); 73 ASSERT_OK(err, "test_run"); 74 ASSERT_EQ(topts.retval, 0, "test_run"); 75 76 ASSERT_EQ(skel->bss->test6_result, 1, "test6_result"); 77 78 cleanup: 79 bpf_link__destroy(link6); 80 get_func_ip_test__destroy(skel); 81 } 82 #else 83 #define test_function_body() 84 #endif 85 86 void test_get_func_ip_test(void) 87 { 88 test_function_entry(); 89 test_function_body(); 90 } 91