DPDK 25.11.0-rc3
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
25extern "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
35struct rte_fib6;
36struct 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
58typedef 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);
62typedef 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
66enum 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
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
129void
130rte_fib6_free(struct rte_fib6 *fib);
131
145struct rte_fib6 *
146rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
148
159struct rte_fib6 *
160rte_fib6_find_existing(const char *name);
161
176int
177rte_fib6_add(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
178 uint8_t depth, uint64_t next_hop);
179
192int
193rte_fib6_delete(struct rte_fib6 *fib,
194 const struct rte_ipv6_addr *ip, uint8_t depth);
195
213int
214rte_fib6_lookup_bulk(struct rte_fib6 *fib,
215 const struct rte_ipv6_addr *ips,
216 uint64_t *next_hops, int n);
217
227void *
228rte_fib6_get_dp(struct rte_fib6 *fib);
229
239struct rte_rib6 *
240rte_fib6_get_rib(struct rte_fib6 *fib);
241
254int
255rte_fib6_select_lookup(struct rte_fib6 *fib, enum rte_fib6_lookup_type type);
256
271__rte_experimental
272int
273rte_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_rib6 * rte_fib6_get_rib(struct rte_fib6 *fib)
rte_fib6_type
Definition: rte_fib6.h:52
@ RTE_FIB6_TRIE
Definition: rte_fib6.h:54
@ RTE_FIB6_DUMMY
Definition: rte_fib6.h:53
struct rte_fib6 struct rte_fib6 * rte_fib6_find_existing(const char *name)
int rte_fib6_delete(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip, uint8_t depth)
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
void * rte_fib6_get_dp(struct rte_fib6 *fib)
__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
struct rte_fib6 * rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf) __rte_malloc __rte_dealloc(rte_fib6_free
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
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