DPDK  25.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 
18 #include <stdint.h>
19 
20 #include <rte_common.h>
21 #include <rte_ip6.h>
22 #include <rte_rcu_qsbr.h>
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #define RTE_FIB6_IPV6_ADDR_SIZE (RTE_DEPRECATED(RTE_FIB6_IPV6_ADDR_SIZE) RTE_IPV6_ADDR_SIZE)
30 #define RTE_FIB6_MAXDEPTH (RTE_DEPRECATED(RTE_FIB6_MAXDEPTH) RTE_IPV6_MAX_DEPTH)
31 
32 /* Maximum length of a FIB name. */
33 #define RTE_FIB6_NAMESIZE 64
34 
35 struct rte_fib6;
36 struct rte_rib6;
37 
39 #define RTE_FIB6_RCU_DQ_RECLAIM_MAX 16
41 #define RTE_FIB6_RCU_DQ_RECLAIM_SZ 128
42 
49 };
50 
55 };
56 
58 typedef int (*rte_fib6_modify_fn_t)(struct rte_fib6 *fib,
59  const struct rte_ipv6_addr *ip, uint8_t depth,
60  uint64_t next_hop, int op);
62 typedef void (*rte_fib6_lookup_fn_t)(void *fib,
63  const struct rte_ipv6_addr *ips,
64  uint64_t *next_hops, const unsigned int n);
65 
66 enum rte_fib6_op {
67  RTE_FIB6_ADD,
68  RTE_FIB6_DEL,
69 };
70 
73  RTE_FIB6_TRIE_2B = 1,
74  RTE_FIB6_TRIE_4B,
75  RTE_FIB6_TRIE_8B
76 };
77 
84 };
85 
87 struct rte_fib6_conf {
88  enum rte_fib6_type type;
90  uint64_t default_nh;
91  int max_routes;
93  unsigned int rib_ext_sz;
94  union {
95  struct {
96  enum rte_fib_trie_nh_sz nh_sz;
97  uint32_t num_tbl8;
98  } trie;
99  };
100 };
101 
105  struct rte_rcu_qsbr *v;
113  uint32_t dq_size;
115  uint32_t reclaim_thd;
119  uint32_t reclaim_max;
120 };
121 
129 void
130 rte_fib6_free(struct rte_fib6 *fib);
131 
145 struct rte_fib6 *
146 rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
148 
159 struct rte_fib6 *
160 rte_fib6_find_existing(const char *name);
161 
176 int
177 rte_fib6_add(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
178  uint8_t depth, uint64_t next_hop);
179 
192 int
193 rte_fib6_delete(struct rte_fib6 *fib,
194  const struct rte_ipv6_addr *ip, uint8_t depth);
195 
213 int
214 rte_fib6_lookup_bulk(struct rte_fib6 *fib,
215  const struct rte_ipv6_addr *ips,
216  uint64_t *next_hops, int n);
217 
227 void *
228 rte_fib6_get_dp(struct rte_fib6 *fib);
229 
239 struct rte_rib6 *
240 rte_fib6_get_rib(struct rte_fib6 *fib);
241 
254 int
255 rte_fib6_select_lookup(struct rte_fib6 *fib, enum rte_fib6_lookup_type type);
256 
271 __rte_experimental
272 int
273 rte_fib6_rcu_qsbr_add(struct rte_fib6 *fib, struct rte_fib6_rcu_config *cfg);
274 
275 #ifdef __cplusplus
276 }
277 #endif
278 
279 #endif /* _RTE_FIB6_H_ */
#define __rte_dealloc(dealloc, argno)
Definition: rte_common.h:339
#define __rte_malloc
Definition: rte_common.h:328
rte_fib6_lookup_type
Definition: rte_fib6.h:79
@ RTE_FIB6_LOOKUP_TRIE_VECTOR_AVX512
Definition: rte_fib6.h:83
@ RTE_FIB6_LOOKUP_DEFAULT
Definition: rte_fib6.h:80
@ RTE_FIB6_LOOKUP_TRIE_SCALAR
Definition: rte_fib6.h:82
int rte_fib6_lookup_bulk(struct rte_fib6 *fib, const struct rte_ipv6_addr *ips, uint64_t *next_hops, int n)
struct rte_fib6 struct rte_fib6 * rte_fib6_find_existing(const char *name)
rte_fib6_type
Definition: rte_fib6.h:52
@ RTE_FIB6_TRIE
Definition: rte_fib6.h:54
@ RTE_FIB6_DUMMY
Definition: rte_fib6.h:53
int rte_fib6_delete(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip, uint8_t depth)
struct rte_rib6 * rte_fib6_get_rib(struct rte_fib6 *fib)
rte_fib6_qsbr_mode
Definition: rte_fib6.h:44
@ RTE_FIB6_QSBR_MODE_DQ
Definition: rte_fib6.h:46
@ RTE_FIB6_QSBR_MODE_SYNC
Definition: rte_fib6.h:48
__rte_experimental int rte_fib6_rcu_qsbr_add(struct rte_fib6 *fib, struct rte_fib6_rcu_config *cfg)
int rte_fib6_select_lookup(struct rte_fib6 *fib, enum rte_fib6_lookup_type type)
rte_fib_trie_nh_sz
Definition: rte_fib6.h:72
void rte_fib6_free(struct rte_fib6 *fib)
int rte_fib6_add(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip, uint8_t depth, uint64_t next_hop)
int(* rte_fib6_modify_fn_t)(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip, uint8_t depth, uint64_t next_hop, int op)
Definition: rte_fib6.h:58
void(* rte_fib6_lookup_fn_t)(void *fib, const struct rte_ipv6_addr *ips, uint64_t *next_hops, const unsigned int n)
Definition: rte_fib6.h:62
void * rte_fib6_get_dp(struct rte_fib6 *fib)
struct rte_fib6 * rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf) __rte_malloc __rte_dealloc(rte_fib6_free
enum rte_fib6_type type
Definition: rte_fib6.h:88
uint64_t default_nh
Definition: rte_fib6.h:90
unsigned int rib_ext_sz
Definition: rte_fib6.h:93
struct rte_rcu_qsbr * v
Definition: rte_fib6.h:105
enum rte_fib6_qsbr_mode mode
Definition: rte_fib6.h:109
uint32_t reclaim_max
Definition: rte_fib6.h:119
uint32_t reclaim_thd
Definition: rte_fib6.h:115
uint32_t dq_size
Definition: rte_fib6.h:113