rte_lpm6.h(3)
π rte_lpm6.h β Library Functions Manual π
okay bestie, sit down, hydrate, because today we're learning about rte_lpm6.h, which is the header for the RTE Longest Prefix Match for IPv6 (LPM6). it lives in the DPDK library functions manual and it's genuinely iconic. no cap. π¦
β¨ NAME β¨
rte_lpm6.h β the glow-up header file for IPv6 longest-prefix-match shenanigans π
πΈ SYNOPSIS πΈ
#include <stdint.h>
#include <rte_common.h>
#include <rte_ip6.h>
π Data Structures
struct rte_lpm6_config
π Macros
#define RTE_LPM6_NAMESIZE 32
π Functions
void rte_lpm6_free (struct rte_lpm6 *lpm)
struct rte_lpm6 * rte_lpm6_create (const char *name, int socket_id,
const struct rte_lpm6_config *config) __rte_malloc
__rte_dealloc(rte_lpm6_free
struct rte_lpm6 struct rte_lpm6 * rte_lpm6_find_existing (const char
*name)
int rte_lpm6_add (struct rte_lpm6 *lpm, const struct rte_ipv6_addr *ip,
uint8_t depth, uint32_t next_hop)
int rte_lpm6_is_rule_present (struct rte_lpm6 *lpm, const struct
rte_ipv6_addr *ip, uint8_t depth, uint32_t *next_hop)
int rte_lpm6_delete (struct rte_lpm6 *lpm, const struct rte_ipv6_addr
*ip, uint8_t depth)
int rte_lpm6_delete_bulk_func (struct rte_lpm6 *lpm, struct
rte_ipv6_addr *ips, uint8_t *depths, unsigned int n)
void rte_lpm6_delete_all (struct rte_lpm6 *lpm)
int rte_lpm6_lookup (const struct rte_lpm6 *lpm, const struct
rte_ipv6_addr *ip, uint32_t *next_hop)
int rte_lpm6_lookup_bulk_func (const struct rte_lpm6 *lpm, struct
rte_ipv6_addr *ips, int32_t *next_hops, unsigned int n)
π Detailed Description π
RTE Longest Prefix Match for IPv6 (LPM6)
Definition in file rte_lpm6.h.
π₯ Macro Definition Documentation π₯
#define RTE_LPM6_NAMESIZE 32
Max number of characters in LPM name. don't get cute and write a novel in there, bestie, 32 is the limit π
Definition at line 25 of file rte_lpm6.h.
π§ Function Documentation π§
void rte_lpm6_free (struct rte_lpm6 * lpm)
Free an LPM object. bye bye, you served π
Parameters
lpmβ LPM object handle. IflpmisNULL, no operation is performed. (it's giving "if you have nothing to free, don't free anything" π)
struct rte_lpm6 * rte_lpm6_create (const char * name, int socket_id, const struct rte_lpm6_config * config)
Create an LPM object. manifesting a whole routing table into existence β¨
Parameters
nameβ LPM object namesocket_idβ NUMA socket ID for LPM table memory allocationconfigβ 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 torte_configstructureE_RTE_SECONDARY- function was called from a secondary process instanceEINVAL- invalid parameter passed to functionENOSPC- the maximum number of memzones has already been allocatedEEXIST- a memzone with the same name already existsENOMEM- no appropriate memory area found in which to create memzone
so yeah, if it comes backNULL, check yourrte_errnobefore you start spiraling π
struct rte_lpm6 struct rte_lpm6 * rte_lpm6_find_existing (const char * name)
Find an existing LPM object and return a pointer to it. like spotting your friend in a crowd but for memory zones π«Ά
Parameters
nameβ Name of the lpm object as passed torte_lpm6_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_lpm6_add (struct rte_lpm6 * lpm, const struct rte_ipv6_addr * ip, uint8_t depth, uint32_t next_hop)
Add a rule to the LPM table. new rule just dropped π
Parameters
lpmβ LPM object handleipβ IP of the rule to be added to the LPM tabledepthβ Depth of the rule to be added to the LPM tablenext_hopβ Next hop of the rule to be added to the LPM table
Returns
0 on success, negative value otherwise
int rte_lpm6_is_rule_present (struct rte_lpm6 * lpm, const struct rte_ipv6_addr * 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. a vibe check, but for routing rules π
Parameters
lpmβ LPM object handleipβ IP of the rule to be searcheddepthβ Depth of the rule to searchednext_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_lpm6_delete (struct rte_lpm6 * lpm, const struct rte_ipv6_addr * ip, uint8_t depth)
Delete a rule from the LPM table. it's not you, it's the routing table π
Parameters
lpmβ LPM object handleipβ IP of the rule to be deleted from the LPM tabledepthβ Depth of the rule to be deleted from the LPM table
Returns
0 on success, negative value otherwise
int rte_lpm6_delete_bulk_func (struct rte_lpm6 * lpm, struct rte_ipv6_addr * ips, uint8_t * depths, unsigned int n)
Delete a rule from the LPM table. (yes bestie, the description really does say "a rule" again even though it's a bulk function β we keep it exactly as written, no editing the source's lore π)
Parameters
lpmβ LPM object handleipsβ Array of IPs to be deleted from the LPM tabledepthsβ Array of depths of the rules to be deleted from the LPM tablenβ Number of rules to be deleted from the LPM table
Returns
0 on success, negative value otherwise.
void rte_lpm6_delete_all (struct rte_lpm6 * lpm)
Delete all rules from the LPM table. scorched earth, but make it elegant π
Parameters
lpmβ LPM object handle
int rte_lpm6_lookup (const struct rte_lpm6 * lpm, const struct rte_ipv6_addr * ip, uint32_t * next_hop)
Lookup an IP into the LPM table. the moment of truth π
Parameters
lpmβ LPM object handleipβ IP to be looked up in the LPM tablenext_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
int rte_lpm6_lookup_bulk_func (const struct rte_lpm6 * lpm, struct rte_ipv6_addr * ips, int32_t * next_hops, unsigned int n)
Lookup multiple IP addresses in an LPM table. group lookup, main character energy for everyone π
Parameters
lpmβ LPM object handleipsβ Array of IPs to be looked up in the LPM tablenext_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 next hop will be stored on each position on success; otherwise the position will be set to-1.nβ Number of elements inips(andnext_hops) array to lookup.
Returns
-EINVAL for incorrect arguments, otherwise 0
π Author π
Generated automatically by Doxygen for DPDK from the source code. (not a human, just a very diligent little doc generator doing its thing π)
and that's the whole page, bestie!! every flag, every return value, every rte_errno β all of it, preserved, periodt. this little manual page came straight from DPDK Version 25.11.3, and its name is rte_lpm6.h(3). go forth and route your IPv6 packets responsibly π¦β¨π
π¦ where this page comes from
- ubuntu resolute: dpdk-doc 25.11.3-0ubuntu0.26.04.1 Β· BSD-3-Clause
- ubuntu stonking: dpdk-doc 25.11.3-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms