03ba0ae1128d17821049bbfad1322cb163dd099f
[dpdk.git] / lib / bpf / bpf_impl.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Intel Corporation
3  */
4
5 #ifndef _BPF_H_
6 #define _BPF_H_
7
8 #include <rte_bpf.h>
9 #include <sys/mman.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 #define MAX_BPF_STACK_SIZE      0x200
16
17 struct rte_bpf {
18         struct rte_bpf_prm prm;
19         struct rte_bpf_jit jit;
20         size_t sz;
21         uint32_t stack_sz;
22 };
23
24 extern int bpf_validate(struct rte_bpf *bpf);
25
26 extern int bpf_jit(struct rte_bpf *bpf);
27
28 extern int bpf_jit_x86(struct rte_bpf *);
29 extern int bpf_jit_arm64(struct rte_bpf *);
30
31 extern int rte_bpf_logtype;
32
33 #define RTE_BPF_LOG(lvl, fmt, args...) \
34         rte_log(RTE_LOG_## lvl, rte_bpf_logtype, fmt, ##args)
35
36 static inline size_t
37 bpf_size(uint32_t bpf_op_sz)
38 {
39         if (bpf_op_sz == BPF_B)
40                 return sizeof(uint8_t);
41         else if (bpf_op_sz == BPF_H)
42                 return sizeof(uint16_t);
43         else if (bpf_op_sz == BPF_W)
44                 return sizeof(uint32_t);
45         else if (bpf_op_sz == EBPF_DW)
46                 return sizeof(uint64_t);
47         return 0;
48 }
49
50 #ifdef __cplusplus
51 }
52 #endif
53
54 #endif /* _BPF_H_ */