xref: /dpdk/lib/node/rte_node_ip4_api.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(C) 2020 Marvell International Ltd.
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef __INCLUDE_RTE_NODE_IP4_API_H__
699a2dd95SBruce Richardson #define __INCLUDE_RTE_NODE_IP4_API_H__
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson /**
999a2dd95SBruce Richardson  * @file rte_node_ip4_api.h
1099a2dd95SBruce Richardson  *
1199a2dd95SBruce Richardson  * @warning
1299a2dd95SBruce Richardson  * @b EXPERIMENTAL:
1399a2dd95SBruce Richardson  * All functions in this file may be changed or removed without prior notice.
1499a2dd95SBruce Richardson  *
1599a2dd95SBruce Richardson  * This API allows to do control path functions of ip4_* nodes
1699a2dd95SBruce Richardson  * like ip4_lookup, ip4_rewrite.
1799a2dd95SBruce Richardson  */
1899a2dd95SBruce Richardson #include <rte_common.h>
1999a2dd95SBruce Richardson #include <rte_compat.h>
2099a2dd95SBruce Richardson 
210124e18fSPavan Nikhilesh #include <rte_graph.h>
220124e18fSPavan Nikhilesh 
23*719834a6SMattias Rönnblom #ifdef __cplusplus
24*719834a6SMattias Rönnblom extern "C" {
25*719834a6SMattias Rönnblom #endif
26*719834a6SMattias Rönnblom 
2799a2dd95SBruce Richardson /**
2899a2dd95SBruce Richardson  * IP4 lookup next nodes.
2999a2dd95SBruce Richardson  */
3099a2dd95SBruce Richardson enum rte_node_ip4_lookup_next {
3199a2dd95SBruce Richardson 	RTE_NODE_IP4_LOOKUP_NEXT_REWRITE,
3299a2dd95SBruce Richardson 	/**< Rewrite node. */
3358fbbccaSRakesh Kudurumalla 	RTE_NODE_IP4_LOOKUP_NEXT_IP4_LOCAL,
3458fbbccaSRakesh Kudurumalla 	/** IP Local node. */
3599a2dd95SBruce Richardson 	RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP,
3699a2dd95SBruce Richardson 	/**< Number of next nodes of lookup node. */
3799a2dd95SBruce Richardson };
3899a2dd95SBruce Richardson 
3999a2dd95SBruce Richardson /**
4058fbbccaSRakesh Kudurumalla  * IP4 Local next nodes.
4158fbbccaSRakesh Kudurumalla  */
4258fbbccaSRakesh Kudurumalla enum rte_node_ip4_local_next {
4358fbbccaSRakesh Kudurumalla 	RTE_NODE_IP4_LOCAL_NEXT_UDP4_INPUT,
4458fbbccaSRakesh Kudurumalla 	/**< ip4 Local node. */
4558fbbccaSRakesh Kudurumalla 	RTE_NODE_IP4_LOCAL_NEXT_PKT_DROP,
4658fbbccaSRakesh Kudurumalla 	/**< Packet drop node. */
4758fbbccaSRakesh Kudurumalla };
4858fbbccaSRakesh Kudurumalla 
4958fbbccaSRakesh Kudurumalla /**
500124e18fSPavan Nikhilesh  * IP4 reassembly next nodes.
510124e18fSPavan Nikhilesh  */
520124e18fSPavan Nikhilesh enum rte_node_ip4_reassembly_next {
530124e18fSPavan Nikhilesh 	RTE_NODE_IP4_REASSEMBLY_NEXT_PKT_DROP,
540124e18fSPavan Nikhilesh        /**< Packet drop node. */
550124e18fSPavan Nikhilesh };
560124e18fSPavan Nikhilesh 
570124e18fSPavan Nikhilesh /**
580124e18fSPavan Nikhilesh  * Reassembly configure structure.
590124e18fSPavan Nikhilesh  * @see rte_node_ip4_reassembly_configure
600124e18fSPavan Nikhilesh  */
610124e18fSPavan Nikhilesh struct rte_node_ip4_reassembly_cfg {
620124e18fSPavan Nikhilesh 	struct rte_ip_frag_tbl *tbl;
630124e18fSPavan Nikhilesh 	/**< Reassembly fragmentation table. */
640124e18fSPavan Nikhilesh 	struct rte_ip_frag_death_row *dr;
650124e18fSPavan Nikhilesh 	/**< Reassembly deathrow table. */
660124e18fSPavan Nikhilesh 	rte_node_t node_id;
670124e18fSPavan Nikhilesh 	/**< Node identifier to configure. */
680124e18fSPavan Nikhilesh };
690124e18fSPavan Nikhilesh 
700124e18fSPavan Nikhilesh /**
7199a2dd95SBruce Richardson  * Add ipv4 route to lookup table.
7299a2dd95SBruce Richardson  *
7399a2dd95SBruce Richardson  * @param ip
7499a2dd95SBruce Richardson  *   IP address of route to be added.
7599a2dd95SBruce Richardson  * @param depth
7699a2dd95SBruce Richardson  *   Depth of the rule to be added.
7799a2dd95SBruce Richardson  * @param next_hop
7899a2dd95SBruce Richardson  *   Next hop id of the rule result to be added.
7999a2dd95SBruce Richardson  * @param next_node
8099a2dd95SBruce Richardson  *   Next node to redirect traffic to.
8199a2dd95SBruce Richardson  *
8299a2dd95SBruce Richardson  * @return
8399a2dd95SBruce Richardson  *   0 on success, negative otherwise.
8499a2dd95SBruce Richardson  */
8599a2dd95SBruce Richardson int rte_node_ip4_route_add(uint32_t ip, uint8_t depth, uint16_t next_hop,
8699a2dd95SBruce Richardson 			   enum rte_node_ip4_lookup_next next_node);
8799a2dd95SBruce Richardson 
8899a2dd95SBruce Richardson /**
8999a2dd95SBruce Richardson  * Add a next hop's rewrite data.
9099a2dd95SBruce Richardson  *
9199a2dd95SBruce Richardson  * @param next_hop
9299a2dd95SBruce Richardson  *   Next hop id to add rewrite data to.
9399a2dd95SBruce Richardson  * @param rewrite_data
9499a2dd95SBruce Richardson  *   Rewrite data.
9599a2dd95SBruce Richardson  * @param rewrite_len
9699a2dd95SBruce Richardson  *   Length of rewrite data.
9799a2dd95SBruce Richardson  * @param dst_port
9899a2dd95SBruce Richardson  *   Destination port to redirect traffic to.
9999a2dd95SBruce Richardson  *
10099a2dd95SBruce Richardson  * @return
10199a2dd95SBruce Richardson  *   0 on success, negative otherwise.
10299a2dd95SBruce Richardson  */
10399a2dd95SBruce Richardson int rte_node_ip4_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
10499a2dd95SBruce Richardson 			     uint8_t rewrite_len, uint16_t dst_port);
10599a2dd95SBruce Richardson 
1060124e18fSPavan Nikhilesh /**
1070124e18fSPavan Nikhilesh  * Add reassembly node configuration data.
1080124e18fSPavan Nikhilesh  *
1090124e18fSPavan Nikhilesh  * @param cfg
1100124e18fSPavan Nikhilesh  *   Pointer to the configuration structure.
1110124e18fSPavan Nikhilesh  * @param cnt
1120124e18fSPavan Nikhilesh  *   Number of configuration structures passed.
1130124e18fSPavan Nikhilesh  *
1140124e18fSPavan Nikhilesh  * @return
1150124e18fSPavan Nikhilesh  *   0 on success, negative otherwise.
1160124e18fSPavan Nikhilesh  */
1170124e18fSPavan Nikhilesh __rte_experimental
1180124e18fSPavan Nikhilesh int rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, uint16_t cnt);
1190124e18fSPavan Nikhilesh 
12099a2dd95SBruce Richardson #ifdef __cplusplus
12199a2dd95SBruce Richardson }
12299a2dd95SBruce Richardson #endif
12399a2dd95SBruce Richardson 
12499a2dd95SBruce Richardson #endif /* __INCLUDE_RTE_NODE_IP4_API_H__ */
125