1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*2d9fd380Sjfb8856606  * Copyright(C) 2020 Marvell International Ltd.
3*2d9fd380Sjfb8856606  */
4*2d9fd380Sjfb8856606 #ifndef __INCLUDE_IP4_REWRITE_PRIV_H__
5*2d9fd380Sjfb8856606 #define __INCLUDE_IP4_REWRITE_PRIV_H__
6*2d9fd380Sjfb8856606 
7*2d9fd380Sjfb8856606 #ifdef __cplusplus
8*2d9fd380Sjfb8856606 extern "C" {
9*2d9fd380Sjfb8856606 #endif
10*2d9fd380Sjfb8856606 
11*2d9fd380Sjfb8856606 #include <rte_common.h>
12*2d9fd380Sjfb8856606 
13*2d9fd380Sjfb8856606 #define RTE_GRAPH_IP4_REWRITE_MAX_NH 64
14*2d9fd380Sjfb8856606 #define RTE_GRAPH_IP4_REWRITE_MAX_LEN 56
15*2d9fd380Sjfb8856606 
16*2d9fd380Sjfb8856606 /**
17*2d9fd380Sjfb8856606  * @internal
18*2d9fd380Sjfb8856606  *
19*2d9fd380Sjfb8856606  * Ipv4 rewrite next hop header data structure. Used to store port specific
20*2d9fd380Sjfb8856606  * rewrite data.
21*2d9fd380Sjfb8856606  */
22*2d9fd380Sjfb8856606 struct ip4_rewrite_nh_header {
23*2d9fd380Sjfb8856606 	uint16_t rewrite_len; /**< Header rewrite length. */
24*2d9fd380Sjfb8856606 	uint16_t tx_node;     /**< Tx node next index identifier. */
25*2d9fd380Sjfb8856606 	uint16_t enabled;     /**< NH enable flag */
26*2d9fd380Sjfb8856606 	uint16_t rsvd;
27*2d9fd380Sjfb8856606 	union {
28*2d9fd380Sjfb8856606 		struct {
29*2d9fd380Sjfb8856606 			struct rte_ether_addr dst;
30*2d9fd380Sjfb8856606 			/**< Destination mac address. */
31*2d9fd380Sjfb8856606 			struct rte_ether_addr src;
32*2d9fd380Sjfb8856606 			/**< Source mac address. */
33*2d9fd380Sjfb8856606 		};
34*2d9fd380Sjfb8856606 		uint8_t rewrite_data[RTE_GRAPH_IP4_REWRITE_MAX_LEN];
35*2d9fd380Sjfb8856606 		/**< Generic rewrite data */
36*2d9fd380Sjfb8856606 	};
37*2d9fd380Sjfb8856606 };
38*2d9fd380Sjfb8856606 
39*2d9fd380Sjfb8856606 /**
40*2d9fd380Sjfb8856606  * @internal
41*2d9fd380Sjfb8856606  *
42*2d9fd380Sjfb8856606  * Ipv4 node main data structure.
43*2d9fd380Sjfb8856606  */
44*2d9fd380Sjfb8856606 struct ip4_rewrite_node_main {
45*2d9fd380Sjfb8856606 	struct ip4_rewrite_nh_header nh[RTE_GRAPH_IP4_REWRITE_MAX_NH];
46*2d9fd380Sjfb8856606 	/**< Array of next hop header data */
47*2d9fd380Sjfb8856606 	uint16_t next_index[RTE_MAX_ETHPORTS];
48*2d9fd380Sjfb8856606 	/**< Next index of each configured port. */
49*2d9fd380Sjfb8856606 };
50*2d9fd380Sjfb8856606 
51*2d9fd380Sjfb8856606 /**
52*2d9fd380Sjfb8856606  * @internal
53*2d9fd380Sjfb8856606  *
54*2d9fd380Sjfb8856606  * Get the ipv4 rewrite node.
55*2d9fd380Sjfb8856606  *
56*2d9fd380Sjfb8856606  * @retrun
57*2d9fd380Sjfb8856606  *   Pointer to the ipv4 rewrite node.
58*2d9fd380Sjfb8856606  */
59*2d9fd380Sjfb8856606 struct rte_node_register *ip4_rewrite_node_get(void);
60*2d9fd380Sjfb8856606 
61*2d9fd380Sjfb8856606 /**
62*2d9fd380Sjfb8856606  * @internal
63*2d9fd380Sjfb8856606  *
64*2d9fd380Sjfb8856606  * Set the Edge index of a given port_id.
65*2d9fd380Sjfb8856606  *
66*2d9fd380Sjfb8856606  * @param port_id
67*2d9fd380Sjfb8856606  *   Ethernet port identifier.
68*2d9fd380Sjfb8856606  * @param next_index
69*2d9fd380Sjfb8856606  *   Edge index of the Given Tx node.
70*2d9fd380Sjfb8856606  */
71*2d9fd380Sjfb8856606 int ip4_rewrite_set_next(uint16_t port_id, uint16_t next_index);
72*2d9fd380Sjfb8856606 
73*2d9fd380Sjfb8856606 #ifdef __cplusplus
74*2d9fd380Sjfb8856606 }
75*2d9fd380Sjfb8856606 #endif
76*2d9fd380Sjfb8856606 
77*2d9fd380Sjfb8856606 #endif /* __INCLUDE_IP4_REWRITE_PRIV_H__ */
78