DPDK  20.11.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 
22 #include <rte_compat.h>
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #define RTE_FIB6_IPV6_ADDR_SIZE 16
29 
30 #define RTE_FIB6_MAXDEPTH 128
31 
32 struct rte_fib6;
33 struct rte_rib6;
34 
39 };
40 
42 typedef int (*rte_fib6_modify_fn_t)(struct rte_fib6 *fib,
43  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth,
44  uint64_t next_hop, int op);
46 typedef void (*rte_fib6_lookup_fn_t)(void *fib,
47  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
48  uint64_t *next_hops, const unsigned int n);
49 
50 enum rte_fib6_op {
51  RTE_FIB6_ADD,
52  RTE_FIB6_DEL,
53 };
54 
57  RTE_FIB6_TRIE_2B = 1,
58  RTE_FIB6_TRIE_4B,
59  RTE_FIB6_TRIE_8B
60 };
61 
68 };
69 
71 struct rte_fib6_conf {
72  enum rte_fib6_type type;
74  uint64_t default_nh;
75  int max_routes;
76  union {
77  struct {
78  enum rte_fib_trie_nh_sz nh_sz;
79  uint32_t num_tbl8;
80  } trie;
81  };
82 };
83 
97 __rte_experimental
98 struct rte_fib6 *
99 rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf);
100 
111 __rte_experimental
112 struct rte_fib6 *
113 rte_fib6_find_existing(const char *name);
114 
123 __rte_experimental
124 void
125 rte_fib6_free(struct rte_fib6 *fib);
126 
141 __rte_experimental
142 int
143 rte_fib6_add(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
144  uint8_t depth, uint64_t next_hop);
145 
158 __rte_experimental
159 int
160 rte_fib6_delete(struct rte_fib6 *fib,
161  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth);
162 
180 __rte_experimental
181 int
182 rte_fib6_lookup_bulk(struct rte_fib6 *fib,
183  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
184  uint64_t *next_hops, int n);
185 
195 __rte_experimental
196 void *
197 rte_fib6_get_dp(struct rte_fib6 *fib);
198 
208 __rte_experimental
209 struct rte_rib6 *
210 rte_fib6_get_rib(struct rte_fib6 *fib);
211 
224 __rte_experimental
225 int
226 rte_fib6_select_lookup(struct rte_fib6 *fib, enum rte_fib6_lookup_type type);
227 
228 #ifdef __cplusplus
229 }
230 #endif
231 
232 #endif /* _RTE_FIB6_H_ */
rte_fib6_find_existing
__rte_experimental struct rte_fib6 * rte_fib6_find_existing(const char *name)
rte_fib6_get_rib
__rte_experimental struct rte_rib6 * rte_fib6_get_rib(struct rte_fib6 *fib)
rte_fib6_conf::default_nh
uint64_t default_nh
Definition: rte_fib6.h:74
rte_fib6_conf::type
enum rte_fib6_type type
Definition: rte_fib6.h:72
rte_fib6_get_dp
__rte_experimental void * rte_fib6_get_dp(struct rte_fib6 *fib)
rte_fib6_type
rte_fib6_type
Definition: rte_fib6.h:36
RTE_FIB6_LOOKUP_DEFAULT
@ RTE_FIB6_LOOKUP_DEFAULT
Definition: rte_fib6.h:64
rte_fib6_add
__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_fib6_select_lookup
__rte_experimental int rte_fib6_select_lookup(struct rte_fib6 *fib, enum rte_fib6_lookup_type type)
rte_fib6_create
__rte_experimental struct rte_fib6 * rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
rte_fib_trie_nh_sz
rte_fib_trie_nh_sz
Definition: rte_fib6.h:56
rte_fib6_conf
Definition: rte_fib6.h:71
RTE_FIB6_TRIE
@ RTE_FIB6_TRIE
Definition: rte_fib6.h:38
rte_fib6_lookup_type
rte_fib6_lookup_type
Definition: rte_fib6.h:63
RTE_FIB6_LOOKUP_TRIE_SCALAR
@ RTE_FIB6_LOOKUP_TRIE_SCALAR
Definition: rte_fib6.h:66
rte_fib6_lookup_bulk
__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)
RTE_FIB6_DUMMY
@ RTE_FIB6_DUMMY
Definition: rte_fib6.h:37
rte_fib6_free
__rte_experimental void rte_fib6_free(struct rte_fib6 *fib)
rte_fib6_delete
__rte_experimental int rte_fib6_delete(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth)
rte_fib6_lookup_fn_t
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:46
RTE_FIB6_LOOKUP_TRIE_VECTOR_AVX512
@ RTE_FIB6_LOOKUP_TRIE_VECTOR_AVX512
Definition: rte_fib6.h:67
rte_fib6_modify_fn_t
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:42