DPDK  20.08.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 <rte_compat.h>
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
30 enum {
35 };
36 
37 struct rte_rib;
38 struct rte_rib_node;
39 
41 struct rte_rib_conf {
47  size_t ext_sz;
48  /* size of rte_rib_node's pool */
49  int max_nodes;
50 };
51 
61 static inline uint32_t
62 rte_rib_depth_to_mask(uint8_t depth)
63 {
64  return (uint32_t)(UINT64_MAX << (32 - depth));
65 }
66 
78 __rte_experimental
79 struct rte_rib_node *
80 rte_rib_lookup(struct rte_rib *rib, uint32_t ip);
81 
92 __rte_experimental
93 struct rte_rib_node *
94 rte_rib_lookup_parent(struct rte_rib_node *ent);
95 
109 __rte_experimental
110 struct rte_rib_node *
111 rte_rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth);
112 
136 __rte_experimental
137 struct rte_rib_node *
138 rte_rib_get_nxt(struct rte_rib *rib, uint32_t ip, uint8_t depth,
139  struct rte_rib_node *last, int flag);
140 
151 __rte_experimental
152 void
153 rte_rib_remove(struct rte_rib *rib, uint32_t ip, uint8_t depth);
154 
168 __rte_experimental
169 struct rte_rib_node *
170 rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth);
171 
183 __rte_experimental
184 int
185 rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip);
186 
198 __rte_experimental
199 int
200 rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth);
201 
212 __rte_experimental
213 void *
214 rte_rib_get_ext(struct rte_rib_node *node);
215 
227 __rte_experimental
228 int
229 rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh);
230 
242 __rte_experimental
243 int
244 rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh);
245 
259 __rte_experimental
260 struct rte_rib *
261 rte_rib_create(const char *name, int socket_id,
262  const struct rte_rib_conf *conf);
263 
273 __rte_experimental
274 struct rte_rib *
275 rte_rib_find_existing(const char *name);
276 
285 __rte_experimental
286 void
287 rte_rib_free(struct rte_rib *rib);
288 
289 #ifdef __cplusplus
290 }
291 #endif
292 
293 #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:47
__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:62
__rte_experimental void rte_rib_free(struct rte_rib *rib)