DPDK  20.05.0
rte_fib6.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_FIB6_H_
7 #define _RTE_FIB6_H_
8 
15 #include <rte_compat.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #define RTE_FIB6_IPV6_ADDR_SIZE 16
22 
23 #define RTE_FIB6_MAXDEPTH 128
24 
25 struct rte_fib6;
26 struct rte_rib6;
27 
32  RTE_FIB6_TYPE_MAX
33 };
34 
36 typedef int (*rte_fib6_modify_fn_t)(struct rte_fib6 *fib,
37  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth,
38  uint64_t next_hop, int op);
40 typedef void (*rte_fib6_lookup_fn_t)(void *fib,
41  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
42  uint64_t *next_hops, const unsigned int n);
43 
44 enum rte_fib6_op {
45  RTE_FIB6_ADD,
46  RTE_FIB6_DEL,
47 };
48 
49 enum rte_fib_trie_nh_sz {
50  RTE_FIB6_TRIE_2B = 1,
51  RTE_FIB6_TRIE_4B,
52  RTE_FIB6_TRIE_8B
53 };
54 
56 struct rte_fib6_conf {
59  uint64_t default_nh;
60  int max_routes;
61  union {
62  struct {
63  enum rte_fib_trie_nh_sz nh_sz;
64  uint32_t num_tbl8;
65  } trie;
66  };
67 };
68 
82 __rte_experimental
83 struct rte_fib6 *
84 rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf);
85 
96 __rte_experimental
97 struct rte_fib6 *
98 rte_fib6_find_existing(const char *name);
99 
108 __rte_experimental
109 void
110 rte_fib6_free(struct rte_fib6 *fib);
111 
126 __rte_experimental
127 int
128 rte_fib6_add(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
129  uint8_t depth, uint64_t next_hop);
130 
143 __rte_experimental
144 int
145 rte_fib6_delete(struct rte_fib6 *fib,
146  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth);
147 
165 __rte_experimental
166 int
167 rte_fib6_lookup_bulk(struct rte_fib6 *fib,
168  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
169  uint64_t *next_hops, int n);
170 
180 __rte_experimental
181 void *
182 rte_fib6_get_dp(struct rte_fib6 *fib);
183 
193 __rte_experimental
194 struct rte_rib6 *
195 rte_fib6_get_rib(struct rte_fib6 *fib);
196 
197 #ifdef __cplusplus
198 }
199 #endif
200 
201 #endif /* _RTE_FIB6_H_ */
__rte_experimental int rte_fib6_lookup_bulk(struct rte_fib6 *fib, uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE], uint64_t *next_hops, int n)
int(* rte_fib6_modify_fn_t)(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth, uint64_t next_hop, int op)
Definition: rte_fib6.h:36
__rte_experimental void rte_fib6_free(struct rte_fib6 *fib)
rte_fib6_type
Definition: rte_fib6.h:29
enum rte_fib6_type type
Definition: rte_fib6.h:57
__rte_experimental void * rte_fib6_get_dp(struct rte_fib6 *fib)
__rte_experimental int rte_fib6_delete(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth)
__rte_experimental struct rte_fib6 * rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
uint64_t default_nh
Definition: rte_fib6.h:59
void(* rte_fib6_lookup_fn_t)(void *fib, uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE], uint64_t *next_hops, const unsigned int n)
Definition: rte_fib6.h:40
__rte_experimental int rte_fib6_add(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth, uint64_t next_hop)
__rte_experimental struct rte_rib6 * rte_fib6_get_rib(struct rte_fib6 *fib)
__rte_experimental struct rte_fib6 * rte_fib6_find_existing(const char *name)