DPDK  24.11.0-rc3
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
22 extern "C" {
23 #endif
24 
25 #define RTE_RIB6_IPV6_ADDR_SIZE (RTE_DEPRECATED(RTE_RIB6_IPV6_ADDR_SIZE) RTE_IPV6_ADDR_SIZE)
26 
30 enum {
35 };
36 
37 struct rte_rib6;
38 struct rte_rib6_node;
39 
41 struct rte_rib6_conf {
47  size_t ext_sz;
48  /* size of rte_rib6_node's pool */
49  int max_nodes;
50 };
51 
60 static inline void rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src)
61  __rte_deprecated_msg("use direct struct assignment");
62 
63 static inline void
64 rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src)
65 {
66  if ((dst == NULL) || (src == NULL))
67  return;
68  rte_memcpy(dst, src, RTE_IPV6_ADDR_SIZE);
69 }
70 
83 static inline int rte_rib6_is_equal(const uint8_t *ip1, const uint8_t *ip2)
84  __rte_deprecated_msg("use rte_ipv6_addr_eq");
85 
86 static inline int
87 rte_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 
110 static inline uint8_t get_msk_part(uint8_t depth, int byte) __rte_deprecated;
111 
112 static inline uint8_t
113 get_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 
134 struct rte_rib6_node *
135 rte_rib6_lookup(struct rte_rib6 *rib,
136  const struct rte_ipv6_addr *ip);
137 
148 struct rte_rib6_node *
149 rte_rib6_lookup_parent(struct rte_rib6_node *ent);
150 
164 struct rte_rib6_node *
165 rte_rib6_lookup_exact(struct rte_rib6 *rib,
166  const struct rte_ipv6_addr *ip, uint8_t depth);
167 
191 struct rte_rib6_node *
192 rte_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 
206 void
207 rte_rib6_remove(struct rte_rib6 *rib,
208  const struct rte_ipv6_addr *ip, uint8_t depth);
209 
223 struct rte_rib6_node *
224 rte_rib6_insert(struct rte_rib6 *rib,
225  const struct rte_ipv6_addr *ip, uint8_t depth);
226 
238 int
239 rte_rib6_get_ip(const struct rte_rib6_node *node,
240  struct rte_ipv6_addr *ip);
241 
253 int
254 rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth);
255 
266 void *
267 rte_rib6_get_ext(struct rte_rib6_node *node);
268 
280 int
281 rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh);
282 
294 int
295 rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh);
296 
310 struct rte_rib6 *
311 rte_rib6_create(const char *name, int socket_id,
312  const struct rte_rib6_conf *conf);
313 
323 struct rte_rib6 *
324 rte_rib6_find_existing(const char *name);
325 
333 void
334 rte_rib6_free(struct rte_rib6 *rib);
335 
336 #ifdef __cplusplus
337 }
338 #endif
339 
340 #endif /* _RTE_RIB6_H_ */
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_depth(const struct rte_rib6_node *node, uint8_t *depth)
static uint8_t get_msk_part(uint8_t depth, int byte) __rte_deprecated
Definition: rte_rib6.h:113
void rte_rib6_free(struct rte_rib6 *rib)
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_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
#define RTE_MIN(a, b)
Definition: rte_common.h:683
struct rte_rib6 * rte_rib6_create(const char *name, int socket_id, const struct rte_rib6_conf *conf)
struct rte_rib6_node * rte_rib6_insert(struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)
void rte_rib6_remove(struct rte_rib6 *rib, const struct rte_ipv6_addr *ip, uint8_t depth)
int rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh)
struct rte_rib6_node * rte_rib6_lookup_exact(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_set_nh(struct rte_rib6_node *node, uint64_t nh)
struct rte_rib6_node * rte_rib6_lookup_parent(struct rte_rib6_node *ent)
static void * rte_memcpy(void *dst, const void *src, size_t n)
#define RTE_IPV6_ADDR_SIZE
Definition: rte_ip6.h:43
#define RTE_MAX(a, b)
Definition: rte_common.h:703
struct rte_rib6_node * rte_rib6_lookup(struct rte_rib6 *rib, const struct rte_ipv6_addr *ip)
size_t ext_sz
Definition: rte_rib6.h:47