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