logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Author

       Generated automatically by Doxygen for DPDK from the source code.

DPDK                                             Version 24.11.2                                    rte_lpm.h(3)

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)

See Also