DPDK 21.11.9
Data Structures | Macros | Functions
rte_lpm6.h File Reference
#include <stdint.h>
#include <rte_compat.h>

Go to the source code of this file.

Data Structures

struct  rte_lpm6_config
 

Macros

#define RTE_LPM6_NAMESIZE   32
 

Functions

struct rte_lpm6 * rte_lpm6_create (const char *name, int socket_id, const struct rte_lpm6_config *config)
 
struct rte_lpm6 * rte_lpm6_find_existing (const char *name)
 
void rte_lpm6_free (struct rte_lpm6 *lpm)
 
int rte_lpm6_add (struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth, uint32_t next_hop)
 
int rte_lpm6_is_rule_present (struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth, uint32_t *next_hop)
 
int rte_lpm6_delete (struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth)
 
int rte_lpm6_delete_bulk_func (struct rte_lpm6 *lpm, uint8_t ips[][RTE_LPM6_IPV6_ADDR_SIZE], uint8_t *depths, unsigned n)
 
void rte_lpm6_delete_all (struct rte_lpm6 *lpm)
 
int rte_lpm6_lookup (const struct rte_lpm6 *lpm, const uint8_t *ip, uint32_t *next_hop)
 
int rte_lpm6_lookup_bulk_func (const struct rte_lpm6 *lpm, uint8_t ips[][RTE_LPM6_IPV6_ADDR_SIZE], int32_t *next_hops, unsigned int n)
 

Detailed Description

RTE Longest Prefix Match for IPv6 (LPM6)

Definition in file rte_lpm6.h.

Macro Definition Documentation

◆ RTE_LPM6_NAMESIZE

#define RTE_LPM6_NAMESIZE   32

Max number of characters in LPM name.

Definition at line 23 of file rte_lpm6.h.

Function Documentation

◆ rte_lpm6_create()

struct rte_lpm6 * rte_lpm6_create ( const char *  name,
int  socket_id,
const struct rte_lpm6_config config 
)

Create an LPM object.

Parameters
nameLPM object name
socket_idNUMA socket ID for LPM table memory allocation
configStructure containing the configuration
Returns
Handle to LPM object on success, NULL otherwise with rte_errno set to an appropriate values. Possible rte_errno values include:
  • E_RTE_NO_CONFIG - function could not get pointer to rte_config structure
  • E_RTE_SECONDARY - function was called from a secondary process instance
  • EINVAL - invalid parameter passed to function
  • ENOSPC - the maximum number of memzones has already been allocated
  • EEXIST - a memzone with the same name already exists
  • ENOMEM - no appropriate memory area found in which to create memzone
Examples
examples/ip_fragmentation/main.c, examples/ip_reassembly/main.c, examples/ipsec-secgw/rt.c, examples/l3fwd/l3fwd_lpm.c, and examples/performance-thread/l3fwd-thread/main.c.

◆ rte_lpm6_find_existing()

struct rte_lpm6 * rte_lpm6_find_existing ( const char *  name)

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

Parameters
nameName of the lpm object as passed to rte_lpm6_create()
Returns
Pointer to lpm 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_lpm6_free()

void rte_lpm6_free ( struct rte_lpm6 *  lpm)

Free an LPM object.

Parameters
lpmLPM object handle

◆ rte_lpm6_add()

int rte_lpm6_add ( struct rte_lpm6 *  lpm,
const uint8_t *  ip,
uint8_t  depth,
uint32_t  next_hop 
)

Add a rule to the LPM table.

Parameters
lpmLPM object handle
ipIP of the rule to be added to the LPM table
depthDepth of the rule to be added to the LPM table
next_hopNext hop of the rule to be added to the LPM table
Returns
0 on success, negative value otherwise
Examples
examples/ip_fragmentation/main.c, examples/ip_reassembly/main.c, examples/ipsec-secgw/rt.c, examples/l3fwd/l3fwd_lpm.c, and examples/performance-thread/l3fwd-thread/main.c.

◆ rte_lpm6_is_rule_present()

int rte_lpm6_is_rule_present ( struct rte_lpm6 *  lpm,
const uint8_t *  ip,
uint8_t  depth,
uint32_t *  next_hop 
)

Check if a rule is present in the LPM table, and provide its next hop if it is.

Parameters
lpmLPM object handle
ipIP of the rule to be searched
depthDepth of the rule to searched
next_hopNext hop of the rule (valid only if it is found)
Returns
1 if the rule exists, 0 if it does not, a negative value on failure

◆ rte_lpm6_delete()

int rte_lpm6_delete ( struct rte_lpm6 *  lpm,
const uint8_t *  ip,
uint8_t  depth 
)

Delete a rule from the LPM table.

Parameters
lpmLPM object handle
ipIP of the rule to be deleted from the LPM table
depthDepth of the rule to be deleted from the LPM table
Returns
0 on success, negative value otherwise

◆ rte_lpm6_delete_bulk_func()

int rte_lpm6_delete_bulk_func ( struct rte_lpm6 *  lpm,
uint8_t  ips[][RTE_LPM6_IPV6_ADDR_SIZE],
uint8_t *  depths,
unsigned  n 
)

Delete a rule from the LPM table.

Parameters
lpmLPM object handle
ipsArray of IPs to be deleted from the LPM table
depthsArray of depths of the rules to be deleted from the LPM table
nNumber of rules to be deleted from the LPM table
Returns
0 on success, negative value otherwise.

◆ rte_lpm6_delete_all()

void rte_lpm6_delete_all ( struct rte_lpm6 *  lpm)

Delete all rules from the LPM table.

Parameters
lpmLPM object handle

◆ rte_lpm6_lookup()

int rte_lpm6_lookup ( const struct rte_lpm6 *  lpm,
const uint8_t *  ip,
uint32_t *  next_hop 
)

Lookup an IP into the LPM table.

Parameters
lpmLPM object handle
ipIP to be looked up in the LPM table
next_hopNext hop of the most specific rule found for IP (valid on lookup hit only)
Returns
-EINVAL for incorrect arguments, -ENOENT on lookup miss, 0 on lookup hit
Examples
examples/ip_fragmentation/main.c, examples/ip_reassembly/main.c, examples/ipsec-secgw/ipsec_worker.c, examples/l3fwd/l3fwd_lpm.c, and examples/performance-thread/l3fwd-thread/main.c.

◆ rte_lpm6_lookup_bulk_func()

int rte_lpm6_lookup_bulk_func ( const struct rte_lpm6 *  lpm,
uint8_t  ips[][RTE_LPM6_IPV6_ADDR_SIZE],
int32_t *  next_hops,
unsigned int  n 
)

Lookup multiple IP addresses in an LPM table.

Parameters
lpmLPM object handle
ipsArray of IPs to be looked up in the LPM table
next_hopsNext hop of the most specific rule found for IP (valid on lookup hit only). This is an array of two byte values. The next hop will be stored on each position on success; otherwise the position will be set to -1.
nNumber of elements in ips (and next_hops) array to lookup.
Returns
-EINVAL for incorrect arguments, otherwise 0
Examples
examples/ipsec-secgw/ipsec-secgw.c.