DPDK  19.11.4
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(struct rte_rib_node *node, uint32_t *ip);
186 
198 __rte_experimental
199 int
200 rte_rib_get_depth(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(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, struct rte_rib_conf *conf);
262 
272 __rte_experimental
273 struct rte_rib *
274 rte_rib_find_existing(const char *name);
275 
284 __rte_experimental
285 void
286 rte_rib_free(struct rte_rib *rib);
287 
288 #ifdef __cplusplus
289 }
290 #endif
291 
292 #endif /* _RTE_RIB_H_ */
rte_rib_get_ip
__rte_experimental int rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip)
rte_rib_get_nxt
__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_rib_get_ext
__rte_experimental void * rte_rib_get_ext(struct rte_rib_node *node)
rte_rib_lookup_parent
__rte_experimental struct rte_rib_node * rte_rib_lookup_parent(struct rte_rib_node *ent)
rte_rib_lookup
__rte_experimental struct rte_rib_node * rte_rib_lookup(struct rte_rib *rib, uint32_t ip)
rte_rib_get_nh
__rte_experimental int rte_rib_get_nh(struct rte_rib_node *node, uint64_t *nh)
rte_rib_create
__rte_experimental struct rte_rib * rte_rib_create(const char *name, int socket_id, struct rte_rib_conf *conf)
RTE_RIB_GET_NXT_ALL
@ RTE_RIB_GET_NXT_ALL
Definition: rte_rib.h:32
rte_rib_insert
__rte_experimental struct rte_rib_node * rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth)
RTE_RIB_GET_NXT_COVER
@ RTE_RIB_GET_NXT_COVER
Definition: rte_rib.h:34
rte_rib_depth_to_mask
static uint32_t rte_rib_depth_to_mask(uint8_t depth)
Definition: rte_rib.h:62
rte_rib_set_nh
__rte_experimental int rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh)
rte_rib_get_depth
__rte_experimental int rte_rib_get_depth(struct rte_rib_node *node, uint8_t *depth)
rte_rib_lookup_exact
__rte_experimental struct rte_rib_node * rte_rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth)
rte_rib_find_existing
__rte_experimental struct rte_rib * rte_rib_find_existing(const char *name)
rte_rib_free
__rte_experimental void rte_rib_free(struct rte_rib *rib)
rte_rib_remove
__rte_experimental void rte_rib_remove(struct rte_rib *rib, uint32_t ip, uint8_t depth)
rte_rib_conf
Definition: rte_rib.h:41
rte_rib_conf::ext_sz
size_t ext_sz
Definition: rte_rib.h:47