xref: /freebsd/sys/contrib/dpdk_rte_lpm/dpdk_lpm6.h (revision c7a063741720ef81d4caa4613242579d12f1d605)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2020 Alexander V. Chernikov
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  * $FreeBSD$
28  */
29 
30 /*
31  * Contains various definitions shared between the parts of a routing subsystem.
32  *
33  */
34 
35 #ifndef	_NETINET6_DPDK_LPM6_H_
36 #define _NETINET6_DPDK_LPM6_H_
37 
38 /** LPM structure. */
39 struct rte_lpm6;
40 
41 /** LPM configuration structure. */
42 struct rte_lpm6_config {
43 	uint32_t max_rules;      /**< Max number of rules. */
44 	uint32_t number_tbl8s;   /**< Number of tbl8s to allocate. */
45 	int flags;               /**< This field is currently unused. */
46 };
47 
48 struct rte_lpm6 *
49 rte_lpm6_create(const char *name, int socket_id,
50 		const struct rte_lpm6_config *config);
51 void
52 rte_lpm6_free(struct rte_lpm6 *lpm);
53 int
54 rte_lpm6_add(struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth,
55 	     uint32_t next_hop, int is_new_rule);
56 
57 #endif
58