DPDK  25.11.0
rte_fib.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_FIB_H_
7 #define _RTE_FIB_H_
8 
18 #include <stdint.h>
19 
20 #include <rte_common.h>
21 #include <rte_rcu_qsbr.h>
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 struct rte_fib;
28 struct rte_rib;
29 
30 /* Maximum length of a FIB name. */
31 #define RTE_FIB_NAMESIZE 64
32 
34 #define RTE_FIB_MAXDEPTH 32
35 
37 #define RTE_FIB_RCU_DQ_RECLAIM_MAX 16
39 #define RTE_FIB_RCU_DQ_RECLAIM_SZ 128
40 
47 };
48 
53 };
54 
56 typedef int (*rte_fib_modify_fn_t)(struct rte_fib *fib, uint32_t ip,
57  uint8_t depth, uint64_t next_hop, int op);
59 typedef void (*rte_fib_lookup_fn_t)(void *fib, const uint32_t *ips,
60  uint64_t *next_hops, const unsigned int n);
61 
62 enum rte_fib_op {
63  RTE_FIB_ADD,
64  RTE_FIB_DEL,
65 };
66 
69  RTE_FIB_DIR24_8_1B,
70  RTE_FIB_DIR24_8_2B,
71  RTE_FIB_DIR24_8_4B,
72  RTE_FIB_DIR24_8_8B
73 };
74 
92 };
93 
95 #define RTE_FIB_F_LOOKUP_NETWORK_ORDER 1
96 #define RTE_FIB_ALLOWED_FLAGS (RTE_FIB_F_LOOKUP_NETWORK_ORDER)
97 
99 struct rte_fib_conf {
100  enum rte_fib_type type;
102  uint64_t default_nh;
103  int max_routes;
105  unsigned int rib_ext_sz;
106  union {
107  struct {
108  enum rte_fib_dir24_8_nh_sz nh_sz;
109  uint32_t num_tbl8;
110  } dir24_8;
111  };
112  unsigned int flags;
113 };
114 
118  struct rte_rcu_qsbr *v;
122  enum rte_fib_qsbr_mode mode;
126  uint32_t dq_size;
128  uint32_t reclaim_thd;
132  uint32_t reclaim_max;
133 };
134 
142 void
143 rte_fib_free(struct rte_fib *fib);
144 
158 struct rte_fib *
159 rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf)
161 
172 struct rte_fib *
173 rte_fib_find_existing(const char *name);
174 
189 int
190 rte_fib_add(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop);
191 
204 int
205 rte_fib_delete(struct rte_fib *fib, uint32_t ip, uint8_t depth);
206 
224 int
225 rte_fib_lookup_bulk(struct rte_fib *fib, uint32_t *ips,
226  uint64_t *next_hops, int n);
236 void *
237 rte_fib_get_dp(struct rte_fib *fib);
238 
248 struct rte_rib *
249 rte_fib_get_rib(struct rte_fib *fib);
250 
263 int
264 rte_fib_select_lookup(struct rte_fib *fib, enum rte_fib_lookup_type type);
265 
282 __rte_experimental
283 int
284 rte_fib_rcu_qsbr_add(struct rte_fib *fib, struct rte_fib_rcu_config *cfg);
285 
286 #ifdef __cplusplus
287 }
288 #endif
289 
290 #endif /* _RTE_FIB_H_ */
#define __rte_dealloc(dealloc, argno)
Definition: rte_common.h:339
#define __rte_malloc
Definition: rte_common.h:328
struct rte_fib * rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf) __rte_malloc __rte_dealloc(rte_fib_free
int rte_fib_delete(struct rte_fib *fib, uint32_t ip, uint8_t depth)
rte_fib_lookup_type
Definition: rte_fib.h:76
@ RTE_FIB_LOOKUP_DIR24_8_SCALAR_UNI
Definition: rte_fib.h:86
@ RTE_FIB_LOOKUP_DIR24_8_SCALAR_INLINE
Definition: rte_fib.h:81
@ RTE_FIB_LOOKUP_DIR24_8_SCALAR_MACRO
Definition: rte_fib.h:79
@ RTE_FIB_LOOKUP_DEFAULT
Definition: rte_fib.h:77
@ RTE_FIB_LOOKUP_DIR24_8_VECTOR_AVX512
Definition: rte_fib.h:90
void(* rte_fib_lookup_fn_t)(void *fib, const uint32_t *ips, uint64_t *next_hops, const unsigned int n)
Definition: rte_fib.h:59
__rte_experimental int rte_fib_rcu_qsbr_add(struct rte_fib *fib, struct rte_fib_rcu_config *cfg)
struct rte_fib struct rte_fib * rte_fib_find_existing(const char *name)
struct rte_rib * rte_fib_get_rib(struct rte_fib *fib)
rte_fib_dir24_8_nh_sz
Definition: rte_fib.h:68
int rte_fib_select_lookup(struct rte_fib *fib, enum rte_fib_lookup_type type)
int(* rte_fib_modify_fn_t)(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop, int op)
Definition: rte_fib.h:56
rte_fib_qsbr_mode
Definition: rte_fib.h:42
@ RTE_FIB_QSBR_MODE_DQ
Definition: rte_fib.h:44
@ RTE_FIB_QSBR_MODE_SYNC
Definition: rte_fib.h:46
void rte_fib_free(struct rte_fib *fib)
void * rte_fib_get_dp(struct rte_fib *fib)
int rte_fib_lookup_bulk(struct rte_fib *fib, uint32_t *ips, uint64_t *next_hops, int n)
int rte_fib_add(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop)
rte_fib_type
Definition: rte_fib.h:50
@ RTE_FIB_DUMMY
Definition: rte_fib.h:51
@ RTE_FIB_DIR24_8
Definition: rte_fib.h:52
uint64_t default_nh
Definition: rte_fib.h:102
unsigned int flags
Definition: rte_fib.h:112
enum rte_fib_type type
Definition: rte_fib.h:100
unsigned int rib_ext_sz
Definition: rte_fib.h:105
struct rte_rcu_qsbr * v
Definition: rte_fib.h:118
enum rte_fib_qsbr_mode mode
Definition: rte_fib.h:122
uint32_t reclaim_max
Definition: rte_fib.h:132
uint32_t reclaim_thd
Definition: rte_fib.h:128
uint32_t dq_size
Definition: rte_fib.h:126