rte_lpm.h
Contents
Detailed Description
RTE Longest Prefix Match (LPM)
Definition in file rte_lpm.h.
Enumeration Type Documentation
enumrte_lpm_qsbr_mode
RCU reclamation modes
EnumeratorRTE_LPM_QSBR_MODE_DQ
Create defer queue for reclaim.
RTE_LPM_QSBR_MODE_SYNC
Use blocking mode reclaim. No defer queue created.
Definition at line 69 of file rte_lpm.h.
Function Documentation
structrte_lpm*rte_lpm_create(constchar*name,intsocket_id,conststructrte_lpm_config*config)
Create an LPM object.
Parametersname LPM object name
socket_id NUMA socket ID for LPM table memory allocation
config Structure 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
structrte_lpm*rte_lpm_find_existing(constchar*name)
Find an existing LPM object and return a pointer to it.
Parametersname Name of the lpm object as passed to rte_lpm_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.
voidrte_lpm_free(structrte_lpm*lpm)
Free an LPM object.
Parameterslpm LPM object handle If lpm is NULL, no operation is performed.
intrte_lpm_rcu_qsbr_add(structrte_lpm*lpm,structrte_lpm_rcu_config*cfg)
Associate RCU QSBR variable with an LPM object.
Parameterslpm the lpm object to add RCU QSBR
cfg RCU QSBR configuration
Returns
On success - 0 On error - 1 with error code set in rte_errno. Possible rte_errno codes are:
• EINVAL - invalid pointer
• EEXIST - already added QSBR
• ENOMEM - memory allocation failure
intrte_lpm_add(structrte_lpm*lpm,uint32_tip,uint8_tdepth,uint32_tnext_hop)
Add a rule to the LPM table.
Parameterslpm LPM object handle
ip IP of the rule to be added to the LPM table
depth Depth of the rule to be added to the LPM table
next_hop Next hop of the rule to be added to the LPM table
Returns
0 on success, negative value otherwise
intrte_lpm_is_rule_present(structrte_lpm*lpm,uint32_tip,uint8_tdepth,uint32_t*next_hop)
Check if a rule is present in the LPM table, and provide its next hop if it is.
Parameterslpm LPM object handle
ip IP of the rule to be searched
depth Depth of the rule to searched
next_hop Next 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
intrte_lpm_delete(structrte_lpm*lpm,uint32_tip,uint8_tdepth)
Delete a rule from the LPM table.
Parameterslpm LPM object handle
ip IP of the rule to be deleted from the LPM table
depth Depth of the rule to be deleted from the LPM table
Returns
0 on success, negative value otherwise
voidrte_lpm_delete_all(structrte_lpm*lpm)
Delete all rules from the LPM table.
Parameterslpm LPM object handle
staticintrte_lpm_lookup(conststructrte_lpm*lpm,uint32_tip,uint32_t*next_hop)[inline],[static]
Lookup an IP into the LPM table.
Parameterslpm LPM object handle
ip IP to be looked up in the LPM table
next_hop Next 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
Definition at line 279 of file rte_lpm.h.
staticvoidrte_lpm_lookupx4(conststructrte_lpm*lpm,xmm_tip,uint32_thop[4],uint32_tdefv)[inline],[static]
Lookup four IP addresses in an LPM table.
Parameterslpm LPM object handle
ip Four IPs to be looked up in the LPM table
hop Next hop of the most specific rule found for IP (valid on lookup hit only). This is an 4 elements
array of two byte values. If the lookup was successful for the given IP, then least significant byte
of the corresponding element is the actual next hop and the most significant byte is zero. If the
lookup for the given IP failed, then corresponding element would contain default value, see
description of then next parameter.
defv Default value to populate into corresponding element of hop[] array, if lookup would fail.
Macro Definition Documentation
#defineRTE_LPM_NAMESIZE32
Max number of characters in LPM name.
Definition at line 29 of file rte_lpm.h.
#defineRTE_LPM_MAX_DEPTH32
Maximum depth value possible for IPv4 LPM.
Definition at line 32 of file rte_lpm.h.
#defineRTE_LPM_LOOKUP_SUCCESS0x01000000
Bitmask used to indicate successful lookup
Definition at line 63 of file rte_lpm.h.
#definerte_lpm_lookup_bulk(lpm,ips,next_hops,n)rte_lpm_lookup_bulk_func(lpm,ips,next_hops,n)
Lookup multiple IP addresses in an LPM table. This may be implemented as a macro, so the address of the
function should not be used.
Parameterslpm LPM object handle
ips Array of IPs to be looked up in the LPM table
next_hops Next hop of the most specific rule found for IP (valid on lookup hit only). This is an
array of two byte values. The most significant byte in each value says whether the lookup was
successful (bitmask RTE_LPM_LOOKUP_SUCCESS is set). The least significant byte is the actual next
hop.
n Number of elements in ips (and next_hops) array to lookup. This should be a compile time constant,
and divisible by 8 for best performance.
Returns
-EINVAL for incorrect arguments, otherwise 0
Definition at line 332 of file rte_lpm.h.
Name
rte_lpm.h
Synopsis
#include <errno.h>
#include <stdalign.h>
#include <stdint.h>
#include <rte_branch_prediction.h>
#include <rte_byteorder.h>
#include <rte_common.h>
#include <rte_vect.h>
#include <rte_rcu_qsbr.h>
#include 'rte_lpm_scalar.h'
DataStructures
struct rte_lpm_config
struct rte_lpm_rcu_configMacros
#define RTE_LPM_NAMESIZE 32
#define RTE_LPM_MAX_DEPTH 32
#define RTE_LPM_LOOKUP_SUCCESS 0x01000000
#define rte_lpm_lookup_bulk(lpm, ips, next_hops, n) rte_lpm_lookup_bulk_func(lpm, ips,
next_hops, n)
Enumerations
enum rte_lpm_qsbr_mode { RTE_LPM_QSBR_MODE_DQ = 0, RTE_LPM_QSBR_MODE_SYNC }
Functions
struct rte_lpm * rte_lpm_create (const char *name, int socket_id, const struct rte_lpm_config *config)
struct rte_lpm * rte_lpm_find_existing (const char *name)
void rte_lpm_free (struct rte_lpm *lpm)
int rte_lpm_rcu_qsbr_add (struct rte_lpm *lpm, struct rte_lpm_rcu_config *cfg)
int rte_lpm_add (struct rte_lpm *lpm, uint32_t ip, uint8_t depth, uint32_t next_hop)
int rte_lpm_is_rule_present (struct rte_lpm *lpm, uint32_t ip, uint8_t depth, uint32_t *next_hop)
int rte_lpm_delete (struct rte_lpm *lpm, uint32_t ip, uint8_t depth)
void rte_lpm_delete_all (struct rte_lpm *lpm)
static int rte_lpm_lookup (const struct rte_lpm *lpm, uint32_t ip, uint32_t *next_hop)
static void rte_lpm_lookupx4 (const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], uint32_t defv)
