DPDK 25.03.0-rc0
rte_rib6.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2018 Vladimir Medvedkin <medvedkinv@gmail.com>
3 * Copyright(c) 2019 Intel Corporation
4 */
5
6#ifndef _RTE_RIB6_H_
7#define _RTE_RIB6_H_
8
17#include <rte_memcpy.h>
18#include <rte_common.h>
19#include <rte_ip6.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#define RTE_RIB6_IPV6_ADDR_SIZE (RTE_DEPRECATED(RTE_RIB6_IPV6_ADDR_SIZE) RTE_IPV6_ADDR_SIZE)
26
30enum {
35};
36
37struct rte_rib6;
38struct rte_rib6_node;
39
47 size_t ext_sz;
48 /* size of rte_rib6_node's pool */
49 int max_nodes;
50};
51
60static inline void rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src)
61 __rte_deprecated_msg("use direct struct assignment");
62
63static inline void
64rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src)
65{
66 if ((dst == NULL) || (src == NULL))
67 return;
69}
70
83static inline int rte_rib6_is_equal(const uint8_t *ip1, const uint8_t *ip2)
84 __rte_deprecated_msg("use rte_ipv6_addr_eq");
85
86static inline int
87rte_rib6_is_equal(const uint8_t *ip1, const uint8_t *ip2) {
88 int i;
89
90 if ((ip1 == NULL) || (ip2 == NULL))
91 return 0;
92 for (i = 0; i < RTE_IPV6_ADDR_SIZE; i++) {
93 if (ip1[i] != ip2[i])
94 return 0;
95 }
96 return 1;
97}
98
110static inline uint8_t get_msk_part(uint8_t depth, int byte) __rte_deprecated;
111
112static inline uint8_t
113get_msk_part(uint8_t depth, int byte) {
114 uint8_t part;
115
116 byte &= 0xf;
117 depth = RTE_MIN(depth, 128);
118 part = RTE_MAX((int16_t)depth - (byte * 8), 0);
119 part = (part > 8) ? 8 : part;
120 return (uint16_t)(~UINT8_MAX) >> part;
121}
122
134struct rte_rib6_node *
135rte_rib6_lookup(struct rte_rib6 *rib,
136 const struct rte_ipv6_addr *ip);
137
148struct rte_rib6_node *
149rte_rib6_lookup_parent(struct rte_rib6_node *ent);
150
164struct rte_rib6_node *
165rte_rib6_lookup_exact(struct rte_rib6 *rib,
166 const struct rte_ipv6_addr *ip, uint8_t depth);
167
191struct rte_rib6_node *
192rte_rib6_get_nxt(struct rte_rib6 *rib,
193 const struct rte_ipv6_addr *ip,
194 uint8_t depth, struct rte_rib6_node *last, int flag);
195
206void
207rte_rib6_remove(struct rte_rib6 *rib,
208 const struct rte_ipv6_addr *ip, uint8_t depth);
209
223struct rte_rib6_node *
224rte_rib6_insert(struct rte_rib6 *rib,
225 const struct rte_ipv6_addr *ip, uint8_t depth);
226
238int
239rte_rib6_get_ip(const struct rte_rib6_node *node,
240 struct rte_ipv6_addr *ip);
241
253int
254rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth);
255
266void *
267rte_rib6_get_ext(struct rte_rib6_node *node);
268
280int
281rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh);
282
294int
295rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh);
296
310struct rte_rib6 *
311rte_rib6_create(const char *name, int socket_id,
312 const struct rte_rib6_conf *conf);
313
323struct rte_rib6 *
324rte_rib6_find_existing(const char *name);
325
333void
334rte_rib6_free(struct rte_rib6 *rib);
335
336#ifdef __cplusplus
337}
338#endif
339
340#endif /* _RTE_RIB6_H_ */
#define RTE_MIN(a, b)
Definition: rte_common.h:683
#define RTE_MAX(a, b)
Definition: rte_common.h:703
#define RTE_IPV6_ADDR_SIZE
Definition: rte_ip6.h:43
static void * rte_memcpy(void *dst, const void *src, size_t n)
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)
static uint8_t get_msk_part(uint8_t depth, int byte) __rte_deprecated
Definition: rte_rib6.h:113
void rte_rib6_remove(struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)
struct rte_rib6 * rte_rib6_create(const char *name, int socket_id, const struct rte_rib6_conf *conf)
void * rte_rib6_get_ext(struct rte_rib6_node *node)
struct rte_rib6 * rte_rib6_find_existing(const char *name)
static void rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src) __rte_deprecated_msg("use direct struct assignment")
Definition: rte_rib6.h:64
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_insert(struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)
struct rte_rib6_node * rte_rib6_lookup_parent(struct rte_rib6_node *ent)
void rte_rib6_free(struct rte_rib6 *rib)
static int rte_rib6_is_equal(const uint8_t *ip1, const uint8_t *ip2) __rte_deprecated_msg("use rte_ipv6_addr_eq")
Definition: rte_rib6.h:87
int rte_rib6_get_ip(const struct rte_rib6_node *node, struct rte_ipv6_addr *ip)
struct rte_rib6_node * rte_rib6_lookup(struct rte_rib6 *rib, const struct rte_ipv6_addr *ip)
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)
int rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth)
@ RTE_RIB6_GET_NXT_COVER
Definition: rte_rib6.h:34
@ RTE_RIB6_GET_NXT_ALL
Definition: rte_rib6.h:32
size_t ext_sz
Definition: rte_rib6.h:47