DPDK  21.08.0
Data Structures | Macros | Typedefs | Enumerations | Functions
rte_fib.h File Reference
#include <stdint.h>
#include <rte_compat.h>

Go to the source code of this file.

Data Structures

struct  rte_fib_conf
 

Macros

#define RTE_FIB_MAXDEPTH   32
 

Typedefs

typedef int(* rte_fib_modify_fn_t) (struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop, int op)
 
typedef void(* rte_fib_lookup_fn_t) (void *fib, const uint32_t *ips, uint64_t *next_hops, const unsigned int n)
 

Enumerations

enum  rte_fib_type { RTE_FIB_DUMMY, RTE_FIB_DIR24_8 }
 
enum  rte_fib_dir24_8_nh_sz
 
enum  rte_fib_lookup_type {
  RTE_FIB_LOOKUP_DEFAULT, RTE_FIB_LOOKUP_DIR24_8_SCALAR_MACRO, RTE_FIB_LOOKUP_DIR24_8_SCALAR_INLINE, RTE_FIB_LOOKUP_DIR24_8_SCALAR_UNI,
  RTE_FIB_LOOKUP_DIR24_8_VECTOR_AVX512
}
 

Functions

__rte_experimental struct rte_fib * rte_fib_create (const char *name, int socket_id, struct rte_fib_conf *conf)
 
__rte_experimental struct rte_fib * rte_fib_find_existing (const char *name)
 
__rte_experimental void rte_fib_free (struct rte_fib *fib)
 
__rte_experimental int rte_fib_add (struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop)
 
__rte_experimental int rte_fib_delete (struct rte_fib *fib, uint32_t ip, uint8_t depth)
 
__rte_experimental int rte_fib_lookup_bulk (struct rte_fib *fib, uint32_t *ips, uint64_t *next_hops, int n)
 
__rte_experimental void * rte_fib_get_dp (struct rte_fib *fib)
 
__rte_experimental struct rte_rib * rte_fib_get_rib (struct rte_fib *fib)
 
__rte_experimental int rte_fib_select_lookup (struct rte_fib *fib, enum rte_fib_lookup_type type)
 

Detailed Description

RTE FIB library.

Warning
EXPERIMENTAL: All functions in this file may be changed or removed without prior notice.

FIB (Forwarding information base) implementation for IPv4 Longest Prefix Match

Definition in file rte_fib.h.

Macro Definition Documentation

◆ RTE_FIB_MAXDEPTH

#define RTE_FIB_MAXDEPTH   32

Maximum depth value possible for IPv4 FIB.

Definition at line 34 of file rte_fib.h.

Typedef Documentation

◆ rte_fib_modify_fn_t

typedef int(* rte_fib_modify_fn_t) (struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop, int op)

Modify FIB function

Definition at line 43 of file rte_fib.h.

◆ rte_fib_lookup_fn_t

typedef void(* rte_fib_lookup_fn_t) (void *fib, const uint32_t *ips, uint64_t *next_hops, const unsigned int n)

FIB bulk lookup function

Definition at line 46 of file rte_fib.h.

Enumeration Type Documentation

◆ rte_fib_type

Type of FIB struct

Enumerator
RTE_FIB_DUMMY 

RIB tree based FIB

RTE_FIB_DIR24_8 

DIR24_8 based FIB

Definition at line 37 of file rte_fib.h.

◆ rte_fib_dir24_8_nh_sz

Size of nexthop (1 << nh_sz) bits for DIR24_8 based FIB

Definition at line 55 of file rte_fib.h.

◆ rte_fib_lookup_type

Type of lookup function implementation

Enumerator
RTE_FIB_LOOKUP_DEFAULT 

Selects the best implementation based on the max simd bitwidth

RTE_FIB_LOOKUP_DIR24_8_SCALAR_MACRO 

Macro based lookup function

RTE_FIB_LOOKUP_DIR24_8_SCALAR_INLINE 

Lookup implementation using inlined functions for different next hop sizes

RTE_FIB_LOOKUP_DIR24_8_SCALAR_UNI 

Unified lookup function for all next hop sizes

RTE_FIB_LOOKUP_DIR24_8_VECTOR_AVX512 

Vector implementation using AVX512

Definition at line 63 of file rte_fib.h.

Function Documentation

◆ rte_fib_create()

__rte_experimental struct rte_fib* rte_fib_create ( const char *  name,
int  socket_id,
struct rte_fib_conf conf 
)

Create FIB

Parameters
nameFIB name
socket_idNUMA socket ID for FIB table memory allocation
confStructure containing the configuration
Returns
Handle to the FIB object on success NULL otherwise with rte_errno set to an appropriate values.
Examples:
examples/l3fwd/l3fwd_fib.c.

◆ rte_fib_find_existing()

__rte_experimental struct rte_fib* rte_fib_find_existing ( const char *  name)

Find an existing FIB object and return a pointer to it.

Parameters
nameName of the fib object as passed to rte_fib_create()
Returns
Pointer to fib object or NULL if object not found with rte_errno set appropriately. Possible rte_errno values include:
  • ENOENT - required entry not available to return.

◆ rte_fib_free()

__rte_experimental void rte_fib_free ( struct rte_fib *  fib)

Free an FIB object.

Parameters
fibFIB object handle
Returns
None

◆ rte_fib_add()

__rte_experimental int rte_fib_add ( struct rte_fib *  fib,
uint32_t  ip,
uint8_t  depth,
uint64_t  next_hop 
)

Add a route to the FIB.

Parameters
fibFIB object handle
ipIPv4 prefix address to be added to the FIB
depthPrefix length
next_hopNext hop to be added to the FIB
Returns
0 on success, negative value otherwise
Examples:
examples/l3fwd/l3fwd_fib.c.

◆ rte_fib_delete()

__rte_experimental int rte_fib_delete ( struct rte_fib *  fib,
uint32_t  ip,
uint8_t  depth 
)

Delete a rule from the FIB.

Parameters
fibFIB object handle
ipIPv4 prefix address to be deleted from the FIB
depthPrefix length
Returns
0 on success, negative value otherwise

◆ rte_fib_lookup_bulk()

__rte_experimental int rte_fib_lookup_bulk ( struct rte_fib *  fib,
uint32_t *  ips,
uint64_t *  next_hops,
int  n 
)

Lookup multiple IP addresses in the FIB.

Parameters
fibFIB object handle
ipsArray of IPs to be looked up in the FIB
next_hopsNext hop of the most specific rule found for IP. This is an array of eight byte values. If the lookup for the given IP failed, then corresponding element would contain default nexthop value configured for a FIB.
nNumber of elements in ips (and next_hops) array to lookup.
Returns
-EINVAL for incorrect arguments, otherwise 0
Examples:
examples/l3fwd/l3fwd_fib.c.

◆ rte_fib_get_dp()

__rte_experimental void* rte_fib_get_dp ( struct rte_fib *  fib)

Get pointer to the dataplane specific struct

Parameters
fibFIB object handle
Returns
Pointer on the dataplane struct on success NULL othervise

◆ rte_fib_get_rib()

__rte_experimental struct rte_rib* rte_fib_get_rib ( struct rte_fib *  fib)

Get pointer to the RIB

Parameters
fibFIB object handle
Returns
Pointer on the RIB on success NULL othervise

◆ rte_fib_select_lookup()

__rte_experimental int rte_fib_select_lookup ( struct rte_fib *  fib,
enum rte_fib_lookup_type  type 
)

Set lookup function based on type

Parameters
fibFIB object handle
typetype of lookup function
Returns
0 on success -EINVAL on failure