DPDK  20.08.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  RTE_FIB6_TYPE_MAX
40 };
41 
43 typedef int (*rte_fib6_modify_fn_t)(struct rte_fib6 *fib,
44  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth,
45  uint64_t next_hop, int op);
47 typedef void (*rte_fib6_lookup_fn_t)(void *fib,
48  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
49  uint64_t *next_hops, const unsigned int n);
50 
51 enum rte_fib6_op {
52  RTE_FIB6_ADD,
53  RTE_FIB6_DEL,
54 };
55 
56 enum rte_fib_trie_nh_sz {
57  RTE_FIB6_TRIE_2B = 1,
58  RTE_FIB6_TRIE_4B,
59  RTE_FIB6_TRIE_8B
60 };
61 
63 struct rte_fib6_conf {
66  uint64_t default_nh;
67  int max_routes;
68  union {
69  struct {
70  enum rte_fib_trie_nh_sz nh_sz;
71  uint32_t num_tbl8;
72  } trie;
73  };
74 };
75 
89 __rte_experimental
90 struct rte_fib6 *
91 rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf);
92 
103 __rte_experimental
104 struct rte_fib6 *
105 rte_fib6_find_existing(const char *name);
106 
115 __rte_experimental
116 void
117 rte_fib6_free(struct rte_fib6 *fib);
118 
133 __rte_experimental
134 int
135 rte_fib6_add(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
136  uint8_t depth, uint64_t next_hop);
137 
150 __rte_experimental
151 int
152 rte_fib6_delete(struct rte_fib6 *fib,
153  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth);
154 
172 __rte_experimental
173 int
174 rte_fib6_lookup_bulk(struct rte_fib6 *fib,
175  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
176  uint64_t *next_hops, int n);
177 
187 __rte_experimental
188 void *
189 rte_fib6_get_dp(struct rte_fib6 *fib);
190 
200 __rte_experimental
201 struct rte_rib6 *
202 rte_fib6_get_rib(struct rte_fib6 *fib);
203 
204 #ifdef __cplusplus
205 }
206 #endif
207 
208 #endif /* _RTE_FIB6_H_ */
__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)
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:43
__rte_experimental void rte_fib6_free(struct rte_fib6 *fib)
rte_fib6_type
Definition: rte_fib6.h:36
enum rte_fib6_type type
Definition: rte_fib6.h:64
__rte_experimental void * rte_fib6_get_dp(struct rte_fib6 *fib)
__rte_experimental int rte_fib6_delete(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth)
__rte_experimental struct rte_fib6 * rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
uint64_t default_nh
Definition: rte_fib6.h:66
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:47
__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_experimental struct rte_rib6 * rte_fib6_get_rib(struct rte_fib6 *fib)
__rte_experimental struct rte_fib6 * rte_fib6_find_existing(const char *name)