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