rte_rib6.h(3)
π¦ rte_rib6.h β Library Functions Manual π
okay bestie, so this is the <rte_rib6.h> page from the DPDK docs, and before you ask: yes, it's the RTE rib6 library, yes it's a whole level-compressed-tree situation, and yes it ate. Let's get into it π«Ά
β¨ NAME β¨
rte_rib6.h β that's the whole name, no cap. It's the header you're looking at and everything below is what lives inside it π
β¨ SYNOPSIS β¨
So first things first, you gotta pull in your includes, periodt:
#include <rte_memcpy.h>
#include <rte_common.h>
#include <rte_ip6.h>
π Data Structures
struct rte_rib6_confβ the config struct, she's giving necessary-evil energy π
π Enumerations
enum { RTE_RIB6_GET_NXT_ALL, RTE_RIB6_GET_NXT_COVER }
π Functions
okay this is the list, and I need you to read it because there's some deprecated stuff in here and I don't want you getting attached to the wrong functions π
static void rte_rib6_copy_addr (uint8_t *dst, const uint8_t *src)β__rte_deprecated_msg('use direct struct assignment')β yeah she's deprecated, do direct struct assignment instead, I'm serious πstatic int rte_rib6_is_equal (const uint8_t *ip1, const uint8_t *ip2)β__rte_deprecated_msg('use rte_ipv6_addr_eq')β also deprecated, userte_ipv6_addr_eqbestie, the note literally says so πstatic uint8_t get_msk_part (uint8_t depth, int byte)β__rte_deprecatedβ yep, deprecated too, no note attached, just vibesstruct rte_rib6_node * rte_rib6_lookup (struct rte_rib6 *rib, const struct rte_ipv6_addr *ip)β the actual lookup, she's alive and well β¨struct rte_rib6_node * rte_rib6_lookup_parent (struct rte_rib6_node *ent)β go find the parent, we love a nepotism moment πstruct rte_rib6_node * rte_rib6_lookup_exact (struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)β exact match only, she's picky π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)β next more specific prefix, ascending order, main character behaviorvoid rte_rib6_remove (struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)β bye bye prefix π¦struct rte_rib6_node * rte_rib6_insert (struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)β come on in, prefix πΈint rte_rib6_get_ip (const struct rte_rib6_node *node, struct rte_ipv6_addr *ip)β grab the ip off a nodeint rte_rib6_get_depth (const struct rte_rib6_node *node, uint8_t *depth)β grab the depth off a nodevoid * rte_rib6_get_ext (struct rte_rib6_node *node)β grab the ext field π§int rte_rib6_get_nh (const struct rte_rib6_node *node, uint64_t *nh)β get the nexthopint rte_rib6_set_nh (struct rte_rib6_node *node, uint64_t nh)β set the nexthopvoid rte_rib6_free (struct rte_rib6 *rib)β free the whole RIB objectstruct rte_rib6 * rte_rib6_create (const char *name, int socket_id, const struct rte_rib6_conf *conf)β__rte_malloc__rte_dealloc(rte_rib6_freeβ make a new RIB, and yes that's the exact annotation text, I'm not touching it πstruct rte_rib6 struct rte_rib6 * rte_rib6_find_existing (const char *name)β find one that already exists π
β¨ Detailed Description β¨
RTE rib6 library. Periodt π
Level compressed tree implementation for IPv6 Longest Prefix Match. Literally that's the whole thing β it's a tree, it's level-compressed, it does LPM for IPv6, and it's iconic for it β
Definition in file rte_rib6.h.
β¨ Enumeration Type Documentation β¨
π anonymous enum
These are the rte_rib6_get_nxt() flags, bestie β you'll see them in the params down below π«Ά
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 β¨
π void rte_rib6_copy_addr (uint8_t * dst, const uint8_t * src) [inline], [static]
Copy IPv6 address from one location to another.
ngl she's deprecated β the manpage annotation literally says use direct struct assignment π
Parameters
dstβ pointer to the place to copysrcβ pointer from where to copy
Definition at line 64 of file rte_rib6.h.
π int rte_rib6_is_equal (const uint8_t * ip1, const uint8_t * ip2) [inline], [static]
Compare two IPv6 addresses.
also deprecated β annotation says use rte_ipv6_addr_eq π
Parameters
ip1β pointer to the first ipv6 addressip2β pointer to the second ipv6 address
Returns β 1 if equal, 0 otherwise
Definition at line 87 of file rte_rib6.h.
π uint8_t get_msk_part (uint8_t depth, int byte) [inline], [static]
Get 8-bit part of 128-bit IPv6 mask. she's a lil slice π
deprecated, __rte_deprecated, no extra note, just so you know π
Parameters
depthβ ipv6 prefix lengthbyteβ 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 handleipβ 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. she's the less-specific one, the chill older sibling π¦
Parameters
entβ Pointer tostruct rte_rib6_nodethat 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. (yes, "mach", that's what the page says, I don't make the rules π)
Parameters
ribβ RIB object handleipβ net to be looked up in the RIBdepthβ 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. she's giving ordered-queued-kingdom π
Parameters
ribβ RIB object handleipβ net address of supernet prefix that covers returned more specific prefixesdepthβ supernet prefix lengthlastβ pointer to the last returned prefix to get next prefix orNULLto get first more specific prefixflagβ-RTE_RIB6_GET_NXT_ALLget all prefixes from subtrie;-RTE_RIB6_GET_NXT_COVERget 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. sorry girl, you're out π
Parameters
ribβ RIB object handleipβ net to be removed from the RIBdepthβ 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. welcome to the tree bestie πΈ
Parameters
ribβ RIB object handleipβ net to be inserted to the RIBdepthβ 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 nodeipβ 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 nodedepthβ 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.
β οΈ read that again bestie β you have to make sure there's enough space for the ext field inside the rib6 node. that's on you, not her π
Parameters
nodeβ pointer to therte_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 nodenhβ 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 nodenhβ nexthop value to set to the rib6 node
Returns β 0 on success, -1 on failure, with rte_errno indicating reason for failure.
π void rte_rib6_free (struct rte_rib6 * rib)
Free an RIB object. let her go π¦
Parameters
ribβ RIB object handle created withrte_rib6_create(). IfribisNULL, no operation is performed.
π struct rte_rib6 * rte_rib6_create (const char * name, int socket_id, const struct rte_rib6_conf * conf)
Create RIB. build her, she's new π
Parameters
nameβ RIB namesocket_idβ NUMA socket ID for RIB table memory allocationconfβ Structure containing the configuration
Returns β Pointer to RIB object on success, NULL otherwise with rte_errno indicating reason for failure.
π struct rte_rib6 struct rte_rib6 * rte_rib6_find_existing (const char * name)
Find an existing RIB object and return a pointer to it. she's already out there, go get her π
Parameters
nameβ Name of the rib object as passed torte_rib6_create()
Returns β Pointer to RIB object on success, NULL otherwise with rte_errno indicating reason for failure.
β¨ Author β¨
Generated automatically by Doxygen for DPDK from the source code. not a human, not a bestie, just Doxygen doing her thing π€π
π and that's the whole page! this one came out of DPDK, Version 26.03.0, and she's filed under rte_rib6.h(3) β mwah, go build something iconic with your longest-prefix-matching self πβ¨
π¦ where this page comes from
- nixos 26.05: dpdk 26.03
- nixpkgs unstable: dpdk 26.03
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms