---
name: "RTE_RIB6_GET_NXT_ALL"
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_rib6.h"
---

# RTE\_RIB6\_GET\_NXT\_ALL(3)

Part of [rte\_rib6.h(3)](/rte_rib6.h/3.md).

## NAME

rte\_rib6.h

## SYNOPSIS

`#include <rte_memcpy.h>`\
 `#include <rte_common.h>`\
 `#include <rte_ip6.h>`\

### Data Structures

struct **rte\_rib6\_conf**\

### Enumerations

enum { **RTE\_RIB6\_GET\_NXT\_ALL**, **RTE\_RIB6\_GET\_NXT\_COVER** }\

### Functions

static void **rte\_rib6\_copy\_addr** (uint8\_t \*dst, const uint8\_t \*src) \_\_rte\_deprecated\_msg('use direct struct assignment')\
 static int **rte\_rib6\_is\_equal** (const uint8\_t \*ip1, const uint8\_t \*ip2) \_\_rte\_deprecated\_msg('use rte\_ipv6\_addr\_eq')\
 static uint8\_t **get\_msk\_part** (uint8\_t depth, int byte) \_\_rte\_deprecated\
 struct rte\_rib6\_node \* **rte\_rib6\_lookup** (struct rte\_rib6 \*rib, const struct **rte\_ipv6\_addr** \*ip)\
 struct rte\_rib6\_node \* **rte\_rib6\_lookup\_parent** (struct rte\_rib6\_node \*ent)\
 struct rte\_rib6\_node \* **rte\_rib6\_lookup\_exact** (struct rte\_rib6 \*rib, const struct **rte\_ipv6\_addr** \*ip, uint8\_t depth)\
 struct rte\_rib6\_node \* **rte\_rib6\_get\_nxt** (struct rte\_rib6 \*rib, const struct **rte\_ipv6\_addr** \*ip, uint8\_t depth, struct rte\_rib6\_node \*last, int flag)\
 void **rte\_rib6\_remove** (struct rte\_rib6 \*rib, const struct **rte\_ipv6\_addr** \*ip, uint8\_t depth)\
 struct rte\_rib6\_node \* **rte\_rib6\_insert** (struct rte\_rib6 \*rib, const struct **rte\_ipv6\_addr** \*ip, uint8\_t depth)\
 int **rte\_rib6\_get\_ip** (const struct rte\_rib6\_node \*node, struct **rte\_ipv6\_addr** \*ip)\
 int **rte\_rib6\_get\_depth** (const struct rte\_rib6\_node \*node, uint8\_t \*depth)\
 void \* **rte\_rib6\_get\_ext** (struct rte\_rib6\_node \*node)\
 int **rte\_rib6\_get\_nh** (const struct rte\_rib6\_node \*node, uint64\_t \*nh)\
 int **rte\_rib6\_set\_nh** (struct rte\_rib6\_node \*node, uint64\_t nh)\
 struct rte\_rib6 \* **rte\_rib6\_create** (const char \*name, int socket\_id, const struct **rte\_rib6\_conf** \*conf)\
 struct rte\_rib6 \* **rte\_rib6\_find\_existing** (const char \*name)\
 void **rte\_rib6\_free** (struct rte\_rib6 \*rib)\

## Detailed Description

RTE rib6 library.

Level compressed tree implementation for IPv6 Longest Prefix Match

Definition in file **rte\_rib6.h**.

## Enumeration Type Documentation

### anonymous enum

**rte\_rib6\_get\_nxt()** flags

**Enumerator**

- *RTE\_RIB6\_GET\_NXT\_ALL*

  *flag to get all subroutes in a RIB tree*

- *RTE\_RIB6\_GET\_NXT\_COVER*

  *flag to get first matched subroutes in a RIB tree*

*Definition at line* **30** *of file* **rte\_rib6.h***.*

## Function Documentation

### static void rte\_rib6\_copy\_addr (uint8\_t \* dst, const uint8\_t \* src)` [inline]`, ` [static]`

*Copy IPv6 address from one location to another*

**Parameters**

*dst pointer to the place to copy* \
 *src pointer from where to copy*

*Definition at line* **64** *of file* **rte\_rib6.h***.*

### static int rte\_rib6\_is\_equal (const uint8\_t \* ip1, const uint8\_t \* ip2)` [inline]`, ` [static]`

*Compare two IPv6 addresses*

**Parameters**

*ip1 pointer to the first ipv6 address* \
 *ip2 pointer to the second ipv6 address*

**Returns**

*1 if equal 0 otherwise*

*Definition at line* **87** *of file* **rte\_rib6.h***.*

### static uint8\_t get\_msk\_part (uint8\_t depth, int byte)` [inline]`, ` [static]`

*Get 8-bit part of 128-bit IPv6 mask*

**Parameters**

*depth ipv6 prefix length* \
 *byte position of a 8-bit chunk in the 128-bit mask*

**Returns**

*8-bit chunk of the 128-bit IPv6 mask*

*Definition at line* **113** *of file* **rte\_rib6.h***.*

### struct rte\_rib6\_node \* rte\_rib6\_lookup (struct rte\_rib6 \* rib, const struct rte\_ipv6\_addr \* ip)

*Lookup an IP into the RIB structure*

**Parameters**

*rib RIB object handle* \
 *ip IP to be looked up in the RIB*

**Returns**

*pointer to struct rte\_rib6\_node on success NULL otherwise*

### struct rte\_rib6\_node \* rte\_rib6\_lookup\_parent (struct rte\_rib6\_node \* ent)

*Lookup less specific route into the RIB structure*

**Parameters**

*ent Pointer to struct rte\_rib6\_node that represents target route*

**Returns**

*pointer to struct rte\_rib6\_node that represents less specific route on success NULL otherwise*

### struct rte\_rib6\_node \* rte\_rib6\_lookup\_exact (struct rte\_rib6 \* rib, const struct rte\_ipv6\_addr \* ip, uint8\_t depth)

*Provides exact mach lookup of the prefix into the RIB structure*

**Parameters**

*rib RIB object handle* \
 *ip net to be looked up in the RIB* \
 *depth prefix length*

**Returns**

*pointer to struct rte\_rib6\_node on success NULL otherwise*

### struct rte\_rib6\_node \* rte\_rib6\_get\_nxt (struct rte\_rib6 \* rib, const struct rte\_ipv6\_addr \* ip, uint8\_t depth, struct rte\_rib6\_node \* last, int flag)

*Retrieve next more specific prefix from the RIB that is covered by ip/depth supernet in an ascending order*

**Parameters**

*rib RIB object handle* \
 *ip net address of supernet prefix that covers returned more specific prefixes* \
 *depth supernet prefix length* \
 *last pointer to the last returned prefix to get next prefix or NULL to get first more specific prefix* \
 *flag -RTE\_RIB6\_GET\_NXT\_ALL get all prefixes from subtrie -RTE\_RIB6\_GET\_NXT\_COVER get only first more specific prefix even if it have more specifics*

**Returns**

*pointer to the next more specific prefix NULL if there is no prefixes left*

### void rte\_rib6\_remove (struct rte\_rib6 \* rib, const struct rte\_ipv6\_addr \* ip, uint8\_t depth)

*Remove prefix from the RIB*

**Parameters**

*rib RIB object handle* \
 *ip net to be removed from the RIB* \
 *depth prefix length*

### struct rte\_rib6\_node \* rte\_rib6\_insert (struct rte\_rib6 \* rib, const struct rte\_ipv6\_addr \* ip, uint8\_t depth)

*Insert prefix into the RIB*

**Parameters**

*rib RIB object handle* \
 *ip net to be inserted to the RIB* \
 *depth prefix length*

**Returns**

*pointer to new rte\_rib6\_node on success NULL otherwise*

### int rte\_rib6\_get\_ip (const struct rte\_rib6\_node \* node, struct rte\_ipv6\_addr \* ip)

*Get an ip from rte\_rib6\_node*

**Parameters**

*node pointer to the rib6 node* \
 *ip pointer to the ipv6 to save*

**Returns**

*0 on success -1 on failure with rte\_errno indicating reason for failure.*

### int rte\_rib6\_get\_depth (const struct rte\_rib6\_node \* node, uint8\_t \* depth)

*Get a depth from rte\_rib6\_node*

**Parameters**

*node pointer to the rib6 node* \
 *depth pointer to the depth to save*

**Returns**

*0 on success -1 on failure with rte\_errno indicating reason for failure.*

### void \* rte\_rib6\_get\_ext (struct rte\_rib6\_node \* node)

*Get ext field from the rte\_rib6\_node It is caller responsibility to make sure there are necessary space for the ext field inside rib6 node.*

**Parameters**

*node pointer to the rte\_rib6\_node*

**Returns**

*pointer to the ext*

### int rte\_rib6\_get\_nh (const struct rte\_rib6\_node \* node, uint64\_t \* nh)

*Get nexthop from the rte\_rib6\_node*

**Parameters**

*node pointer to the rib6 node* \
 *nh pointer to the nexthop to save*

**Returns**

*0 on success -1 on failure, with rte\_errno indicating reason for failure.*

### int rte\_rib6\_set\_nh (struct rte\_rib6\_node \* node, uint64\_t nh)

*Set nexthop into the rte\_rib6\_node*

**Parameters**

*node pointer to the rib6 node* \
 *nh nexthop value to set to the rib6 node*

**Returns**

*0 on success -1 on failure, with rte\_errno indicating reason for failure.*

### struct rte\_rib6 \* rte\_rib6\_create (const char \* name, int socket\_id, const struct rte\_rib6\_conf \* conf)

*Create RIB*

**Parameters**

*name RIB name* \
 *socket\_id NUMA socket ID for RIB table memory allocation* \
 *conf Structure containing the configuration*

**Returns**

*Pointer to RIB object on success NULL otherwise with rte\_errno indicating reason for failure.*

### struct rte\_rib6 \* rte\_rib6\_find\_existing (const char \* name)

*Find an existing RIB object and return a pointer to it.*

**Parameters**

*name Name of the rib object as passed to* **rte\_rib6\_create()**

**Returns**

*Pointer to RIB object on success NULL otherwise with rte\_errno indicating reason for failure.*

### void rte\_rib6\_free (struct rte\_rib6 \* rib)

*Free an RIB object.*

**Parameters**

*rib RIB object handle created with* **rte\_rib6\_create()***. If rib is NULL, no operation is performed.*

## Author

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