xref: /linux/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod_kfunc.h (revision 001821b0e79716c4e17c71d8e053a23599a7a508)
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 init_sock_args {
68 	int af;
69 	int type;
70 };
71 
72 struct addr_args {
73 	char addr[sizeof(struct __kernel_sockaddr_storage)];
74 	int addrlen;
75 };
76 
77 struct sendmsg_args {
78 	struct addr_args addr;
79 	char msg[10];
80 	int msglen;
81 };
82 
83 struct prog_test_ref_kfunc *
84 bpf_kfunc_call_test_acquire(unsigned long *scalar_ptr) __ksym;
85 void bpf_kfunc_call_test_release(struct prog_test_ref_kfunc *p) __ksym;
86 void bpf_kfunc_call_test_ref(struct prog_test_ref_kfunc *p) __ksym;
87 
88 void bpf_kfunc_call_test_mem_len_pass1(void *mem, int len) __ksym;
89 int *bpf_kfunc_call_test_get_rdwr_mem(struct prog_test_ref_kfunc *p, const int rdwr_buf_size) __ksym;
90 int *bpf_kfunc_call_test_get_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
91 int *bpf_kfunc_call_test_acq_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
92 void bpf_kfunc_call_int_mem_release(int *p) __ksym;
93 
94 /* The bpf_kfunc_call_test_static_unused_arg is defined as static,
95  * but bpf program compilation needs to see it as global symbol.
96  */
97 #ifndef __KERNEL__
98 u32 bpf_kfunc_call_test_static_unused_arg(u32 arg, u32 unused) __ksym;
99 #endif
100 
101 void bpf_testmod_test_mod_kfunc(int i) __ksym;
102 
103 __u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b,
104 				__u32 c, __u64 d) __ksym;
105 int bpf_kfunc_call_test2(struct sock *sk, __u32 a, __u32 b) __ksym;
106 struct sock *bpf_kfunc_call_test3(struct sock *sk) __ksym;
107 long bpf_kfunc_call_test4(signed char a, short b, int c, long d) __ksym;
108 
109 void bpf_kfunc_call_test_pass_ctx(struct __sk_buff *skb) __ksym;
110 void bpf_kfunc_call_test_pass1(struct prog_test_pass1 *p) __ksym;
111 void bpf_kfunc_call_test_pass2(struct prog_test_pass2 *p) __ksym;
112 void bpf_kfunc_call_test_mem_len_fail2(__u64 *mem, int len) __ksym;
113 
114 void bpf_kfunc_call_test_destructive(void) __ksym;
115 void bpf_kfunc_call_test_sleepable(void) __ksym;
116 
117 void bpf_kfunc_call_test_offset(struct prog_test_ref_kfunc *p);
118 struct prog_test_member *bpf_kfunc_call_memb_acquire(void);
119 void bpf_kfunc_call_memb1_release(struct prog_test_member1 *p);
120 void bpf_kfunc_call_test_fail1(struct prog_test_fail1 *p);
121 void bpf_kfunc_call_test_fail2(struct prog_test_fail2 *p);
122 void bpf_kfunc_call_test_fail3(struct prog_test_fail3 *p);
123 void bpf_kfunc_call_test_mem_len_fail1(void *mem, int len);
124 
125 void bpf_kfunc_common_test(void) __ksym;
126 
127 int bpf_kfunc_init_sock(struct init_sock_args *args) __ksym;
128 void bpf_kfunc_close_sock(void) __ksym;
129 int bpf_kfunc_call_kernel_connect(struct addr_args *args) __ksym;
130 int bpf_kfunc_call_kernel_bind(struct addr_args *args) __ksym;
131 int bpf_kfunc_call_kernel_listen(void) __ksym;
132 int bpf_kfunc_call_kernel_sendmsg(struct sendmsg_args *args) __ksym;
133 int bpf_kfunc_call_sock_sendmsg(struct sendmsg_args *args) __ksym;
134 int bpf_kfunc_call_kernel_getsockname(struct addr_args *args) __ksym;
135 int bpf_kfunc_call_kernel_getpeername(struct addr_args *args) __ksym;
136 
137 #endif /* _BPF_TESTMOD_KFUNC_H */
138