DPDK  20.05.0-rc0
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 
15 #include <rte_compat.h>
16 
17 #define RTE_FIB6_IPV6_ADDR_SIZE 16
18 
19 #define RTE_FIB6_MAXDEPTH 128
20 
21 struct rte_fib6;
22 struct rte_rib6;
23 
28  RTE_FIB6_TYPE_MAX
29 };
30 
32 typedef int (*rte_fib6_modify_fn_t)(struct rte_fib6 *fib,
33  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth,
34  uint64_t next_hop, int op);
36 typedef void (*rte_fib6_lookup_fn_t)(void *fib,
37  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
38  uint64_t *next_hops, const unsigned int n);
39 
40 enum rte_fib6_op {
41  RTE_FIB6_ADD,
42  RTE_FIB6_DEL,
43 };
44 
45 enum rte_fib_trie_nh_sz {
46  RTE_FIB6_TRIE_2B = 1,
47  RTE_FIB6_TRIE_4B,
48  RTE_FIB6_TRIE_8B
49 };
50 
52 struct rte_fib6_conf {
55  uint64_t default_nh;
56  int max_routes;
57  union {
58  struct {
59  enum rte_fib_trie_nh_sz nh_sz;
60  uint32_t num_tbl8;
61  } trie;
62  };
63 };
64 
78 __rte_experimental
79 struct rte_fib6 *
80 rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf);
81 
92 __rte_experimental
93 struct rte_fib6 *
94 rte_fib6_find_existing(const char *name);
95 
104 __rte_experimental
105 void
106 rte_fib6_free(struct rte_fib6 *fib);
107 
122 __rte_experimental
123 int
124 rte_fib6_add(struct rte_fib6 *fib, const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE],
125  uint8_t depth, uint64_t next_hop);
126 
139 __rte_experimental
140 int
141 rte_fib6_delete(struct rte_fib6 *fib,
142  const uint8_t ip[RTE_FIB6_IPV6_ADDR_SIZE], uint8_t depth);
143 
161 __rte_experimental
162 int
163 rte_fib6_lookup_bulk(struct rte_fib6 *fib,
164  uint8_t ips[][RTE_FIB6_IPV6_ADDR_SIZE],
165  uint64_t *next_hops, int n);
166 
176 __rte_experimental
177 void *
178 rte_fib6_get_dp(struct rte_fib6 *fib);
179 
189 __rte_experimental
190 struct rte_rib6 *
191 rte_fib6_get_rib(struct rte_fib6 *fib);
192 
193 #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:32
__rte_experimental void rte_fib6_free(struct rte_fib6 *fib)
rte_fib6_type
Definition: rte_fib6.h:25
enum rte_fib6_type type
Definition: rte_fib6.h:53
__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:55
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:36
__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)