xref: /dpdk/lib/bpf/bpf_impl.h (revision 0f1dc8cb671203d52488fd66936f2fe6dcca03cc)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Intel Corporation
3  */
4 
5 #ifndef BPF_IMPL_H
6 #define BPF_IMPL_H
7 
8 #include <rte_bpf.h>
9 #include <sys/mman.h>
10 
11 #define MAX_BPF_STACK_SIZE	0x200
12 
13 struct rte_bpf {
14 	struct rte_bpf_prm prm;
15 	struct rte_bpf_jit jit;
16 	size_t sz;
17 	uint32_t stack_sz;
18 };
19 
20 /*
21  * Use '__rte' prefix for non-static internal functions
22  * to avoid potential name conflict with other libraries.
23  */
24 int __rte_bpf_validate(struct rte_bpf *bpf);
25 int __rte_bpf_jit(struct rte_bpf *bpf);
26 int __rte_bpf_jit_x86(struct rte_bpf *bpf);
27 int __rte_bpf_jit_arm64(struct rte_bpf *bpf);
28 
29 extern int rte_bpf_logtype;
30 #define RTE_LOGTYPE_BPF rte_bpf_logtype
31 
32 #define RTE_BPF_LOG_LINE(lvl, ...) \
33 	RTE_LOG_LINE(lvl, BPF, __VA_ARGS__)
34 
35 static inline size_t
bpf_size(uint32_t bpf_op_sz)36 bpf_size(uint32_t bpf_op_sz)
37 {
38 	if (bpf_op_sz == BPF_B)
39 		return sizeof(uint8_t);
40 	else if (bpf_op_sz == BPF_H)
41 		return sizeof(uint16_t);
42 	else if (bpf_op_sz == BPF_W)
43 		return sizeof(uint32_t);
44 	else if (bpf_op_sz == EBPF_DW)
45 		return sizeof(uint64_t);
46 	return 0;
47 }
48 
49 #endif /* BPF_IMPL_H */
50