1 #ifndef __BPF_KFUNCS__
2 #define __BPF_KFUNCS__
3 
4 /* Description
5  *  Initializes an skb-type dynptr
6  * Returns
7  *  Error code
8  */
9 extern int bpf_dynptr_from_skb(struct __sk_buff *skb, __u64 flags,
10     struct bpf_dynptr *ptr__uninit) __ksym;
11 
12 /* Description
13  *  Initializes an xdp-type dynptr
14  * Returns
15  *  Error code
16  */
17 extern int bpf_dynptr_from_xdp(struct xdp_md *xdp, __u64 flags,
18 			       struct bpf_dynptr *ptr__uninit) __ksym;
19 
20 /* Description
21  *  Obtain a read-only pointer to the dynptr's data
22  * Returns
23  *  Either a direct pointer to the dynptr data or a pointer to the user-provided
24  *  buffer if unable to obtain a direct pointer
25  */
26 extern void *bpf_dynptr_slice(const struct bpf_dynptr *ptr, __u32 offset,
27 			      void *buffer, __u32 buffer__szk) __ksym;
28 
29 /* Description
30  *  Obtain a read-write pointer to the dynptr's data
31  * Returns
32  *  Either a direct pointer to the dynptr data or a pointer to the user-provided
33  *  buffer if unable to obtain a direct pointer
34  */
35 extern void *bpf_dynptr_slice_rdwr(const struct bpf_dynptr *ptr, __u32 offset,
36 			      void *buffer, __u32 buffer__szk) __ksym;
37 
38 extern int bpf_dynptr_adjust(const struct bpf_dynptr *ptr, __u32 start, __u32 end) __ksym;
39 extern bool bpf_dynptr_is_null(const struct bpf_dynptr *ptr) __ksym;
40 extern bool bpf_dynptr_is_rdonly(const struct bpf_dynptr *ptr) __ksym;
41 extern __u32 bpf_dynptr_size(const struct bpf_dynptr *ptr) __ksym;
42 extern int bpf_dynptr_clone(const struct bpf_dynptr *ptr, struct bpf_dynptr *clone__init) __ksym;
43 
44 #endif
45