---
name: "rte_lpm.h"
section: "3"
platform: "linux"
package: "dpdk-doc"
version: "24.11.4-0+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/rte_lpm.h"
---

# 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

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)\

## 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 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**.

## 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

### 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 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*

### 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.*

### 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.*

### 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* **279** *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 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.*

## Author

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