1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #ifndef _BPF_TESTMOD_KFUNC_H
4 #define _BPF_TESTMOD_KFUNC_H
5 
6 #ifndef __KERNEL__
7 #include <vmlinux.h>
8 #include <bpf/bpf_helpers.h>
9 #else
10 #define __ksym
11 struct prog_test_member1 {
12 	int a;
13 };
14 
15 struct prog_test_member {
16 	struct prog_test_member1 m;
17 	int c;
18 };
19 
20 struct prog_test_ref_kfunc {
21 	int a;
22 	int b;
23 	struct prog_test_member memb;
24 	struct prog_test_ref_kfunc *next;
25 	refcount_t cnt;
26 };
27 #endif
28 
29 struct prog_test_pass1 {
30 	int x0;
31 	struct {
32 		int x1;
33 		struct {
34 			int x2;
35 			struct {
36 				int x3;
37 			};
38 		};
39 	};
40 };
41 
42 struct prog_test_pass2 {
43 	int len;
44 	short arr1[4];
45 	struct {
46 		char arr2[4];
47 		unsigned long arr3[8];
48 	} x;
49 };
50 
51 struct prog_test_fail1 {
52 	void *p;
53 	int x;
54 };
55 
56 struct prog_test_fail2 {
57 	int x8;
58 	struct prog_test_pass1 x;
59 };
60 
61 struct prog_test_fail3 {
62 	int len;
63 	char arr1[2];
64 	char arr2[];
65 };
66 
67 struct prog_test_ref_kfunc *
68 bpf_kfunc_call_test_acquire(unsigned long *scalar_ptr) __ksym;
69 void bpf_kfunc_call_test_release(struct prog_test_ref_kfunc *p) __ksym;
70 void bpf_kfunc_call_test_ref(struct prog_test_ref_kfunc *p) __ksym;
71 
72 void bpf_kfunc_call_test_mem_len_pass1(void *mem, int len) __ksym;
73 int *bpf_kfunc_call_test_get_rdwr_mem(struct prog_test_ref_kfunc *p, const int rdwr_buf_size) __ksym;
74 int *bpf_kfunc_call_test_get_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
75 int *bpf_kfunc_call_test_acq_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
76 void bpf_kfunc_call_int_mem_release(int *p) __ksym;
77 
78 /* The bpf_kfunc_call_test_static_unused_arg is defined as static,
79  * but bpf program compilation needs to see it as global symbol.
80  */
81 #ifndef __KERNEL__
82 u32 bpf_kfunc_call_test_static_unused_arg(u32 arg, u32 unused) __ksym;
83 #endif
84 
85 void bpf_testmod_test_mod_kfunc(int i) __ksym;
86 
87 __u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b,
88 				__u32 c, __u64 d) __ksym;
89 int bpf_kfunc_call_test2(struct sock *sk, __u32 a, __u32 b) __ksym;
90 struct sock *bpf_kfunc_call_test3(struct sock *sk) __ksym;
91 long bpf_kfunc_call_test4(signed char a, short b, int c, long d) __ksym;
92 
93 void bpf_kfunc_call_test_pass_ctx(struct __sk_buff *skb) __ksym;
94 void bpf_kfunc_call_test_pass1(struct prog_test_pass1 *p) __ksym;
95 void bpf_kfunc_call_test_pass2(struct prog_test_pass2 *p) __ksym;
96 void bpf_kfunc_call_test_mem_len_fail2(__u64 *mem, int len) __ksym;
97 
98 void bpf_kfunc_call_test_destructive(void) __ksym;
99 
100 void bpf_kfunc_call_test_offset(struct prog_test_ref_kfunc *p);
101 struct prog_test_member *bpf_kfunc_call_memb_acquire(void);
102 void bpf_kfunc_call_memb1_release(struct prog_test_member1 *p);
103 void bpf_kfunc_call_test_fail1(struct prog_test_fail1 *p);
104 void bpf_kfunc_call_test_fail2(struct prog_test_fail2 *p);
105 void bpf_kfunc_call_test_fail3(struct prog_test_fail3 *p);
106 void bpf_kfunc_call_test_mem_len_fail1(void *mem, int len);
107 #endif /* _BPF_TESTMOD_KFUNC_H */
108