DPDK  19.08.2
Data Structures | Macros | Enumerations | Functions
rte_bpf.h File Reference
#include <rte_common.h>
#include <rte_mbuf.h>
#include <bpf_def.h>

Go to the source code of this file.

Data Structures

struct  rte_bpf_arg
 
struct  rte_bpf_xsym
 
struct  rte_bpf_prm
 
struct  rte_bpf_jit
 

Macros

#define RTE_BPF_ARG_PTR_TYPE(x)   ((x) & RTE_BPF_ARG_PTR)
 

Enumerations

enum  rte_bpf_arg_type { RTE_BPF_ARG_UNDEF, RTE_BPF_ARG_RAW, RTE_BPF_ARG_PTR = 0x10, RTE_BPF_ARG_PTR_MBUF }
 
enum  rte_bpf_xtype { RTE_BPF_XTYPE_FUNC, RTE_BPF_XTYPE_VAR }
 

Functions

__rte_experimental void rte_bpf_destroy (struct rte_bpf *bpf)
 
__rte_experimental struct rte_bpf * rte_bpf_load (const struct rte_bpf_prm *prm)
 
__rte_experimental struct rte_bpf * rte_bpf_elf_load (const struct rte_bpf_prm *prm, const char *fname, const char *sname)
 
__rte_experimental uint64_t rte_bpf_exec (const struct rte_bpf *bpf, void *ctx)
 
__rte_experimental uint32_t rte_bpf_exec_burst (const struct rte_bpf *bpf, void *ctx[], uint64_t rc[], uint32_t num)
 
__rte_experimental int rte_bpf_get_jit (const struct rte_bpf *bpf, struct rte_bpf_jit *jit)
 

Detailed Description

EXPERIMENTAL: this API may change without prior notice

RTE BPF support. librte_bpf provides a framework to load and execute eBPF bytecode inside user-space dpdk based applications. It supports basic set of features from eBPF spec (https://www.kernel.org/doc/Documentation/networking/filter.txt).

Definition in file rte_bpf.h.

Macro Definition Documentation

#define RTE_BPF_ARG_PTR_TYPE (   x)    ((x) & RTE_BPF_ARG_PTR)

determine is argument a pointer

Definition at line 55 of file rte_bpf.h.

Enumeration Type Documentation

Possible types for function/BPF program arguments.

Enumerator
RTE_BPF_ARG_UNDEF 

undefined

RTE_BPF_ARG_RAW 

scalar value

RTE_BPF_ARG_PTR 

pointer to data buffer

RTE_BPF_ARG_PTR_MBUF 

pointer to rte_mbuf

Definition at line 30 of file rte_bpf.h.

Possible types for external symbols.

Enumerator
RTE_BPF_XTYPE_FUNC 

function

RTE_BPF_XTYPE_VAR 

variable

Definition at line 60 of file rte_bpf.h.

Function Documentation

__rte_experimental void rte_bpf_destroy ( struct rte_bpf *  bpf)

De-allocate all memory used by this eBPF execution context.

Parameters
bpfBPF handle to destroy.
__rte_experimental struct rte_bpf* rte_bpf_load ( const struct rte_bpf_prm prm)

Create a new eBPF execution context and load given BPF code into it.

Parameters
prmParameters used to create and initialise the BPF execution context.
Returns
BPF handle that is used in future BPF operations, or NULL on error, with error code set in rte_errno. Possible rte_errno errors include:
  • EINVAL - invalid parameter passed to function
  • ENOMEM - can't reserve enough memory
__rte_experimental struct rte_bpf* rte_bpf_elf_load ( const struct rte_bpf_prm prm,
const char *  fname,
const char *  sname 
)

Create a new eBPF execution context and load BPF code from given ELF file into it. Note that if the function will encounter EBPF_PSEUDO_CALL instruction that references external symbol, it will treat is as standard BPF_CALL to the external helper function.

Parameters
prmParameters used to create and initialise the BPF execution context.
fnamePathname for a ELF file.
snameName of the executable section within the file to load.
Returns
BPF handle that is used in future BPF operations, or NULL on error, with error code set in rte_errno. Possible rte_errno errors include:
  • EINVAL - invalid parameter passed to function
  • ENOMEM - can't reserve enough memory
__rte_experimental uint64_t rte_bpf_exec ( const struct rte_bpf *  bpf,
void *  ctx 
)

Execute given BPF bytecode.

Parameters
bpfhandle for the BPF code to execute.
ctxpointer to input context.
Returns
BPF execution return value.
__rte_experimental uint32_t rte_bpf_exec_burst ( const struct rte_bpf *  bpf,
void *  ctx[],
uint64_t  rc[],
uint32_t  num 
)

Execute given BPF bytecode over a set of input contexts.

Parameters
bpfhandle for the BPF code to execute.
ctxarray of pointers to the input contexts.
rcarray of return values (one per input).
numnumber of elements in ctx[] (and rc[]).
Returns
number of successfully processed inputs.
__rte_experimental int rte_bpf_get_jit ( const struct rte_bpf *  bpf,
struct rte_bpf_jit jit 
)

Provide information about natively compiled code for given BPF handle.

Parameters
bpfhandle for the BPF code.
jitpointer to the rte_bpf_jit structure to be filled with related data.
Returns
  • -EINVAL if the parameters are invalid.
  • Zero if operation completed successfully.