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 bpf_testmod_ctx {
84  	struct callback_head	rcu;
85  	refcount_t		usage;
86  };
87  
88  struct prog_test_ref_kfunc *
89  bpf_kfunc_call_test_acquire(unsigned long *scalar_ptr) __ksym;
90  void bpf_kfunc_call_test_release(struct prog_test_ref_kfunc *p) __ksym;
91  void bpf_kfunc_call_test_ref(struct prog_test_ref_kfunc *p) __ksym;
92  
93  void bpf_kfunc_call_test_mem_len_pass1(void *mem, int len) __ksym;
94  int *bpf_kfunc_call_test_get_rdwr_mem(struct prog_test_ref_kfunc *p, const int rdwr_buf_size) __ksym;
95  int *bpf_kfunc_call_test_get_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
96  int *bpf_kfunc_call_test_acq_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size) __ksym;
97  void bpf_kfunc_call_int_mem_release(int *p) __ksym;
98  
99  /* The bpf_kfunc_call_test_static_unused_arg is defined as static,
100   * but bpf program compilation needs to see it as global symbol.
101   */
102  #ifndef __KERNEL__
103  u32 bpf_kfunc_call_test_static_unused_arg(u32 arg, u32 unused) __ksym;
104  #endif
105  
106  void bpf_testmod_test_mod_kfunc(int i) __ksym;
107  
108  __u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b,
109  				__u32 c, __u64 d) __ksym;
110  int bpf_kfunc_call_test2(struct sock *sk, __u32 a, __u32 b) __ksym;
111  struct sock *bpf_kfunc_call_test3(struct sock *sk) __ksym;
112  long bpf_kfunc_call_test4(signed char a, short b, int c, long d) __ksym;
113  
114  void bpf_kfunc_call_test_pass_ctx(struct __sk_buff *skb) __ksym;
115  void bpf_kfunc_call_test_pass1(struct prog_test_pass1 *p) __ksym;
116  void bpf_kfunc_call_test_pass2(struct prog_test_pass2 *p) __ksym;
117  void bpf_kfunc_call_test_mem_len_fail2(__u64 *mem, int len) __ksym;
118  
119  void bpf_kfunc_call_test_destructive(void) __ksym;
120  void bpf_kfunc_call_test_sleepable(void) __ksym;
121  
122  void bpf_kfunc_call_test_offset(struct prog_test_ref_kfunc *p);
123  struct prog_test_member *bpf_kfunc_call_memb_acquire(void);
124  void bpf_kfunc_call_memb1_release(struct prog_test_member1 *p);
125  void bpf_kfunc_call_test_fail1(struct prog_test_fail1 *p);
126  void bpf_kfunc_call_test_fail2(struct prog_test_fail2 *p);
127  void bpf_kfunc_call_test_fail3(struct prog_test_fail3 *p);
128  void bpf_kfunc_call_test_mem_len_fail1(void *mem, int len);
129  
130  void bpf_kfunc_common_test(void) __ksym;
131  
132  int bpf_kfunc_init_sock(struct init_sock_args *args) __ksym;
133  void bpf_kfunc_close_sock(void) __ksym;
134  int bpf_kfunc_call_kernel_connect(struct addr_args *args) __ksym;
135  int bpf_kfunc_call_kernel_bind(struct addr_args *args) __ksym;
136  int bpf_kfunc_call_kernel_listen(void) __ksym;
137  int bpf_kfunc_call_kernel_sendmsg(struct sendmsg_args *args) __ksym;
138  int bpf_kfunc_call_sock_sendmsg(struct sendmsg_args *args) __ksym;
139  int bpf_kfunc_call_kernel_getsockname(struct addr_args *args) __ksym;
140  int bpf_kfunc_call_kernel_getpeername(struct addr_args *args) __ksym;
141  
142  void bpf_kfunc_dynptr_test(struct bpf_dynptr *ptr, struct bpf_dynptr *ptr__nullable) __ksym;
143  
144  struct bpf_testmod_ctx *bpf_testmod_ctx_create(int *err) __ksym;
145  void bpf_testmod_ctx_release(struct bpf_testmod_ctx *ctx) __ksym;
146  
147  struct sk_buff *bpf_kfunc_nested_acquire_nonzero_offset_test(struct sk_buff_head *ptr) __ksym;
148  struct sk_buff *bpf_kfunc_nested_acquire_zero_offset_test(struct sock_common *ptr) __ksym;
149  void bpf_kfunc_nested_release_test(struct sk_buff *ptr) __ksym;
150  
151  struct st_ops_args;
152  int bpf_kfunc_st_ops_test_prologue(struct st_ops_args *args) __ksym;
153  int bpf_kfunc_st_ops_test_epilogue(struct st_ops_args *args) __ksym;
154  int bpf_kfunc_st_ops_test_pro_epilogue(struct st_ops_args *args) __ksym;
155  int bpf_kfunc_st_ops_inc10(struct st_ops_args *args) __ksym;
156  
157  void bpf_kfunc_trusted_vma_test(struct vm_area_struct *ptr) __ksym;
158  void bpf_kfunc_trusted_task_test(struct task_struct *ptr) __ksym;
159  void bpf_kfunc_trusted_num_test(int *ptr) __ksym;
160  void bpf_kfunc_rcu_task_test(struct task_struct *ptr) __ksym;
161  
162  #endif /* _BPF_TESTMOD_KFUNC_H */
163