Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_lpm.h(3)			      DPDK			    rte_lpm.h(3)

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'

   Data Structures
     struct rte_lpm_config
     struct rte_lpm_rcu_config

   Macros
     #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
     void rte_lpm_free (struct rte_lpm *lpm)
     struct rte_lpm * rte_lpm_create (const char  *name,  int  socket_id,  const
	 struct rte_lpm_config *config) __rte_malloc __rte_dealloc(rte_lpm_free
     struct rte_lpm struct rte_lpm * rte_lpm_find_existing (const char *name)
     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)

Detailed Description
     RTE Longest Prefix Match (LPM)

     Definition in file rte_lpm.h.

Macro Definition Documentation
   #define RTE_LPM_NAMESIZE   32
     Max number of characters in LPM name.

     Definition at line 29 of file rte_lpm.h.

   #define RTE_LPM_MAX_DEPTH   32
     Maximum depth value possible for IPv4 LPM.

     Definition at line 32 of file rte_lpm.h.

   #define RTE_LPM_LOOKUP_SUCCESS   0x01000000
     Bitmask used to indicate successful lookup

     Definition at line 63 of file rte_lpm.h.

   #define	 rte_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.

     Parameters
	 lpm 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 signif-
	 icant	byte  in each value says whether the lookup was successful (bit-
	 mask 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  perfor-
	 mance.

     Returns
	 -EINVAL for incorrect arguments, otherwise 0

     Definition at line 345 of file rte_lpm.h.

Enumeration Type Documentation
   enum rte_lpm_qsbr_mode
     RCU reclamation modes

     Enumerator

     RTE_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
   void rte_lpm_free (struct rte_lpm * lpm)
     Free an LPM object.

     Parameters
	 lpm LPM object handle If lpm is NULL, no operation is performed.

   struct  rte_lpm  *  rte_lpm_create  (const  char * name, int socket_id, const
     struct rte_lpm_config * config)
     Create an LPM object.

     Parameters
	 name 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 struc-
	   ture

	 * E_RTE_SECONDARY  -  function  was called from a secondary process in-
	   stance

	 * 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

   struct rte_lpm struct rte_lpm * rte_lpm_find_existing (const char * name)
     Find an existing LPM object and return a pointer to it.

     Parameters
	 name 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.

   int	rte_lpm_rcu_qsbr_add  (struct rte_lpm * lpm, struct rte_lpm_rcu_config *
     cfg)
     Associate RCU QSBR variable with an LPM object.

     Parameters
	 lpm 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

   int	rte_lpm_add  (struct rte_lpm * lpm, uint32_t ip, uint8_t depth, uint32_t
     next_hop)
     Add a rule to the LPM table.

     Parameters
	 lpm 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

   int rte_lpm_is_rule_present (struct	rte_lpm  *  lpm,  uint32_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
	 lpm 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

   int rte_lpm_delete (struct rte_lpm * lpm, uint32_t ip, uint8_t depth)
     Delete a rule from the LPM table.

     Parameters
	 lpm 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

   void rte_lpm_delete_all (struct rte_lpm * lpm)
     Delete all rules from the LPM table.

     Parameters
	 lpm LPM object handle

   static  int rte_lpm_lookup (const struct rte_lpm * lpm, uint32_t ip, uint32_t
     * next_hop) [inline],  [static]
     Lookup an IP into the LPM table.

     Parameters
	 lpm 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 292 of file rte_lpm.h.

   static void rte_lpm_lookupx4 (const struct rte_lpm * lpm, xmm_t ip,	uint32_t
     hop[4], uint32_t defv) [inline],  [static]
     Lookup four IP addresses in an LPM table.

     Parameters
	 lpm 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	signifi-
	 cant  byte  is zero. If the lookup for the given IP failed, then corre-
	 sponding element would contain default value, see description	of  then
	 next parameter.
	 defv  Default value to populate into corresponding element of hop[] ar-
	 ray, if lookup would fail.

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026		    rte_lpm.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_LPM_QSBR_MODE_DQ&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help