DPDK  21.02.0
rte_rib.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_RIB_H_
7 #define _RTE_RIB_H_
8 
21 #include <stdlib.h>
22 #include <stdint.h>
23 
24 #include <rte_compat.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
33 enum {
38 };
39 
40 struct rte_rib;
41 struct rte_rib_node;
42 
44 struct rte_rib_conf {
50  size_t ext_sz;
51  /* size of rte_rib_node's pool */
52  int max_nodes;
53 };
54 
64 static inline uint32_t
65 rte_rib_depth_to_mask(uint8_t depth)
66 {
67  return (uint32_t)(UINT64_MAX << (32 - depth));
68 }
69 
81 __rte_experimental
82 struct rte_rib_node *
83 rte_rib_lookup(struct rte_rib *rib, uint32_t ip);
84 
95 __rte_experimental
96 struct rte_rib_node *
97 rte_rib_lookup_parent(struct rte_rib_node *ent);
98 
112 __rte_experimental
113 struct rte_rib_node *
114 rte_rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth);
115 
139 __rte_experimental
140 struct rte_rib_node *
141 rte_rib_get_nxt(struct rte_rib *rib, uint32_t ip, uint8_t depth,
142  struct rte_rib_node *last, int flag);
143 
154 __rte_experimental
155 void
156 rte_rib_remove(struct rte_rib *rib, uint32_t ip, uint8_t depth);
157 
171 __rte_experimental
172 struct rte_rib_node *
173 rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth);
174 
186 __rte_experimental
187 int
188 rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip);
189 
201 __rte_experimental
202 int
203 rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth);
204 
215 __rte_experimental
216 void *
217 rte_rib_get_ext(struct rte_rib_node *node);
218 
230 __rte_experimental
231 int
232 rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh);
233 
245 __rte_experimental
246 int
247 rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh);
248 
262 __rte_experimental
263 struct rte_rib *
264 rte_rib_create(const char *name, int socket_id,
265  const struct rte_rib_conf *conf);
266 
276 __rte_experimental
277 struct rte_rib *
278 rte_rib_find_existing(const char *name);
279 
288 __rte_experimental
289 void
290 rte_rib_free(struct rte_rib *rib);
291 
292 #ifdef __cplusplus
293 }
294 #endif
295 
296 #endif /* _RTE_RIB_H_ */
__rte_experimental void * rte_rib_get_ext(struct rte_rib_node *node)
__rte_experimental struct rte_rib_node * rte_rib_get_nxt(struct rte_rib *rib, uint32_t ip, uint8_t depth, struct rte_rib_node *last, int flag)
__rte_experimental int rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh)
__rte_experimental int rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip)
__rte_experimental struct rte_rib_node * rte_rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth)
__rte_experimental struct rte_rib * rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf)
__rte_experimental void rte_rib_remove(struct rte_rib *rib, uint32_t ip, uint8_t depth)
__rte_experimental struct rte_rib_node * rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth)
__rte_experimental struct rte_rib * rte_rib_find_existing(const char *name)
__rte_experimental struct rte_rib_node * rte_rib_lookup_parent(struct rte_rib_node *ent)
__rte_experimental int rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh)
size_t ext_sz
Definition: rte_rib.h:50
__rte_experimental struct rte_rib_node * rte_rib_lookup(struct rte_rib *rib, uint32_t ip)
__rte_experimental int rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth)
static uint32_t rte_rib_depth_to_mask(uint8_t depth)
Definition: rte_rib.h:65
__rte_experimental void rte_rib_free(struct rte_rib *rib)