1#ifndef __BPF_KFUNCS__
2#define __BPF_KFUNCS__
3
4/* Description
5 *  Initializes an skb-type dynptr
6 * Returns
7 *  Error code
8 */
9extern 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 */
17extern 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 */
26extern 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 */
35extern void *bpf_dynptr_slice_rdwr(const struct bpf_dynptr *ptr, __u32 offset,
36			      void *buffer, __u32 buffer__szk) __ksym;
37
38extern int bpf_dynptr_adjust(const struct bpf_dynptr *ptr, __u32 start, __u32 end) __ksym;
39extern bool bpf_dynptr_is_null(const struct bpf_dynptr *ptr) __ksym;
40extern bool bpf_dynptr_is_rdonly(const struct bpf_dynptr *ptr) __ksym;
41extern __u32 bpf_dynptr_size(const struct bpf_dynptr *ptr) __ksym;
42extern int bpf_dynptr_clone(const struct bpf_dynptr *ptr, struct bpf_dynptr *clone__init) __ksym;
43
44#endif
45