1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*2d9fd380Sjfb8856606  * Copyright(C) 2020 Marvell International Ltd.
3*2d9fd380Sjfb8856606  */
4*2d9fd380Sjfb8856606 
5*2d9fd380Sjfb8856606 #ifndef __INCLUDE_RTE_NODE_IP4_API_H__
6*2d9fd380Sjfb8856606 #define __INCLUDE_RTE_NODE_IP4_API_H__
7*2d9fd380Sjfb8856606 
8*2d9fd380Sjfb8856606 /**
9*2d9fd380Sjfb8856606  * @file rte_node_ip4_api.h
10*2d9fd380Sjfb8856606  *
11*2d9fd380Sjfb8856606  * @warning
12*2d9fd380Sjfb8856606  * @b EXPERIMENTAL:
13*2d9fd380Sjfb8856606  * All functions in this file may be changed or removed without prior notice.
14*2d9fd380Sjfb8856606  *
15*2d9fd380Sjfb8856606  * This API allows to do control path functions of ip4_* nodes
16*2d9fd380Sjfb8856606  * like ip4_lookup, ip4_rewrite.
17*2d9fd380Sjfb8856606  *
18*2d9fd380Sjfb8856606  */
19*2d9fd380Sjfb8856606 #ifdef __cplusplus
20*2d9fd380Sjfb8856606 extern "C" {
21*2d9fd380Sjfb8856606 #endif
22*2d9fd380Sjfb8856606 
23*2d9fd380Sjfb8856606 #include <rte_common.h>
24*2d9fd380Sjfb8856606 
25*2d9fd380Sjfb8856606 /**
26*2d9fd380Sjfb8856606  * IP4 lookup next nodes.
27*2d9fd380Sjfb8856606  */
28*2d9fd380Sjfb8856606 enum rte_node_ip4_lookup_next {
29*2d9fd380Sjfb8856606 	RTE_NODE_IP4_LOOKUP_NEXT_REWRITE,
30*2d9fd380Sjfb8856606 	/**< Rewrite node. */
31*2d9fd380Sjfb8856606 	RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP,
32*2d9fd380Sjfb8856606 	/**< Packet drop node. */
33*2d9fd380Sjfb8856606 	RTE_NODE_IP4_LOOKUP_NEXT_MAX,
34*2d9fd380Sjfb8856606 	/**< Number of next nodes of lookup node. */
35*2d9fd380Sjfb8856606 };
36*2d9fd380Sjfb8856606 
37*2d9fd380Sjfb8856606 /**
38*2d9fd380Sjfb8856606  * Add ipv4 route to lookup table.
39*2d9fd380Sjfb8856606  *
40*2d9fd380Sjfb8856606  * @param ip
41*2d9fd380Sjfb8856606  *   IP address of route to be added.
42*2d9fd380Sjfb8856606  * @param depth
43*2d9fd380Sjfb8856606  *   Depth of the rule to be added.
44*2d9fd380Sjfb8856606  * @param next_hop
45*2d9fd380Sjfb8856606  *   Next hop id of the rule result to be added.
46*2d9fd380Sjfb8856606  * @param next_node
47*2d9fd380Sjfb8856606  *   Next node to redirect traffic to.
48*2d9fd380Sjfb8856606  *
49*2d9fd380Sjfb8856606  * @return
50*2d9fd380Sjfb8856606  *   0 on success, negative otherwise.
51*2d9fd380Sjfb8856606  */
52*2d9fd380Sjfb8856606 __rte_experimental
53*2d9fd380Sjfb8856606 int rte_node_ip4_route_add(uint32_t ip, uint8_t depth, uint16_t next_hop,
54*2d9fd380Sjfb8856606 			   enum rte_node_ip4_lookup_next next_node);
55*2d9fd380Sjfb8856606 
56*2d9fd380Sjfb8856606 /**
57*2d9fd380Sjfb8856606  * Add a next hop's rewrite data.
58*2d9fd380Sjfb8856606  *
59*2d9fd380Sjfb8856606  * @param next_hop
60*2d9fd380Sjfb8856606  *   Next hop id to add rewrite data to.
61*2d9fd380Sjfb8856606  * @param rewrite_data
62*2d9fd380Sjfb8856606  *   Rewrite data.
63*2d9fd380Sjfb8856606  * @param rewrite_len
64*2d9fd380Sjfb8856606  *   Length of rewrite data.
65*2d9fd380Sjfb8856606  * @param dst_port
66*2d9fd380Sjfb8856606  *   Destination port to redirect traffic to.
67*2d9fd380Sjfb8856606  *
68*2d9fd380Sjfb8856606  * @return
69*2d9fd380Sjfb8856606  *   0 on success, negative otherwise.
70*2d9fd380Sjfb8856606  */
71*2d9fd380Sjfb8856606 __rte_experimental
72*2d9fd380Sjfb8856606 int rte_node_ip4_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
73*2d9fd380Sjfb8856606 			     uint8_t rewrite_len, uint16_t dst_port);
74*2d9fd380Sjfb8856606 
75*2d9fd380Sjfb8856606 #ifdef __cplusplus
76*2d9fd380Sjfb8856606 }
77*2d9fd380Sjfb8856606 #endif
78*2d9fd380Sjfb8856606 
79*2d9fd380Sjfb8856606 #endif /* __INCLUDE_RTE_NODE_IP4_API_H__ */
80