DPDK  24.11.0-rc3
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_rcu_qsbr.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 struct rte_fib;
27 struct rte_rib;
28 
30 #define RTE_FIB_MAXDEPTH 32
31 
33 #define RTE_FIB_RCU_DQ_RECLAIM_MAX 16
34 
35 #define RTE_FIB_RCU_DQ_RECLAIM_SZ 128
36 
43 };
44 
49 };
50 
52 typedef int (*rte_fib_modify_fn_t)(struct rte_fib *fib, uint32_t ip,
53  uint8_t depth, uint64_t next_hop, int op);
55 typedef void (*rte_fib_lookup_fn_t)(void *fib, const uint32_t *ips,
56  uint64_t *next_hops, const unsigned int n);
57 
58 enum rte_fib_op {
59  RTE_FIB_ADD,
60  RTE_FIB_DEL,
61 };
62 
65  RTE_FIB_DIR24_8_1B,
66  RTE_FIB_DIR24_8_2B,
67  RTE_FIB_DIR24_8_4B,
68  RTE_FIB_DIR24_8_8B
69 };
70 
88 };
89 
91 #define RTE_FIB_F_NETWORK_ORDER 1
92 #define RTE_FIB_ALLOWED_FLAGS (RTE_FIB_F_NETWORK_ORDER)
93 
95 struct rte_fib_conf {
98  uint64_t default_nh;
99  int max_routes;
101  unsigned int rib_ext_sz;
102  union {
103  struct {
104  enum rte_fib_dir24_8_nh_sz nh_sz;
105  uint32_t num_tbl8;
106  } dir24_8;
107  };
108  unsigned int flags;
109 };
110 
114  struct rte_rcu_qsbr *v;
118  enum rte_fib_qsbr_mode mode;
122  uint32_t dq_size;
124  uint32_t reclaim_thd;
128  uint32_t reclaim_max;
129 };
130 
144 struct rte_fib *
145 rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf);
146 
157 struct rte_fib *
158 rte_fib_find_existing(const char *name);
159 
167 void
168 rte_fib_free(struct rte_fib *fib);
169 
184 int
185 rte_fib_add(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop);
186 
199 int
200 rte_fib_delete(struct rte_fib *fib, uint32_t ip, uint8_t depth);
201 
219 int
220 rte_fib_lookup_bulk(struct rte_fib *fib, uint32_t *ips,
221  uint64_t *next_hops, int n);
231 void *
232 rte_fib_get_dp(struct rte_fib *fib);
233 
243 struct rte_rib *
244 rte_fib_get_rib(struct rte_fib *fib);
245 
258 int
259 rte_fib_select_lookup(struct rte_fib *fib, enum rte_fib_lookup_type type);
260 
277 __rte_experimental
278 int
279 rte_fib_rcu_qsbr_add(struct rte_fib *fib, struct rte_fib_rcu_config *cfg);
280 
281 #ifdef __cplusplus
282 }
283 #endif
284 
285 #endif /* _RTE_FIB_H_ */
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:52
struct rte_fib * rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf)
unsigned int flags
Definition: rte_fib.h:108
rte_fib_type
Definition: rte_fib.h:46
uint32_t reclaim_thd
Definition: rte_fib.h:124
void * rte_fib_get_dp(struct rte_fib *fib)
uint32_t dq_size
Definition: rte_fib.h:122
unsigned int rib_ext_sz
Definition: rte_fib.h:101
void rte_fib_free(struct rte_fib *fib)
__rte_experimental int rte_fib_rcu_qsbr_add(struct rte_fib *fib, struct rte_fib_rcu_config *cfg)
rte_fib_lookup_type
Definition: rte_fib.h:72
rte_fib_qsbr_mode
Definition: rte_fib.h:38
uint64_t default_nh
Definition: rte_fib.h:98
struct rte_rib * rte_fib_get_rib(struct rte_fib *fib)
struct rte_rcu_qsbr * v
Definition: rte_fib.h:114
struct rte_fib * rte_fib_find_existing(const char *name)
void(* rte_fib_lookup_fn_t)(void *fib, const uint32_t *ips, uint64_t *next_hops, const unsigned int n)
Definition: rte_fib.h:55
int rte_fib_lookup_bulk(struct rte_fib *fib, uint32_t *ips, uint64_t *next_hops, int n)
rte_fib_dir24_8_nh_sz
Definition: rte_fib.h:64
int rte_fib_add(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop)
uint32_t reclaim_max
Definition: rte_fib.h:128
int rte_fib_select_lookup(struct rte_fib *fib, enum rte_fib_lookup_type type)
int rte_fib_delete(struct rte_fib *fib, uint32_t ip, uint8_t depth)
enum rte_fib_type type
Definition: rte_fib.h:96