1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2*2d9fd380Sjfb8856606 * Copyright(c) 2014-2020 Broadcom 3*2d9fd380Sjfb8856606 * All rights reserved. 4*2d9fd380Sjfb8856606 */ 5*2d9fd380Sjfb8856606 6*2d9fd380Sjfb8856606 #ifndef _ULP_RTE_PARSER_H_ 7*2d9fd380Sjfb8856606 #define _ULP_RTE_PARSER_H_ 8*2d9fd380Sjfb8856606 9*2d9fd380Sjfb8856606 #include <rte_log.h> 10*2d9fd380Sjfb8856606 #include <rte_flow.h> 11*2d9fd380Sjfb8856606 #include <rte_flow_driver.h> 12*2d9fd380Sjfb8856606 #include "ulp_template_db_enum.h" 13*2d9fd380Sjfb8856606 #include "ulp_template_struct.h" 14*2d9fd380Sjfb8856606 #include "ulp_mapper.h" 15*2d9fd380Sjfb8856606 #include "bnxt_tf_common.h" 16*2d9fd380Sjfb8856606 17*2d9fd380Sjfb8856606 /* defines to be used in the tunnel header parsing */ 18*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS 2 19*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV4_ID_PROTO 6 20*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV4_DEST_IP 4 21*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV4_SIZE 12 22*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV6_VTC_FLOW 4 23*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV6_PROTO_TTL 2 24*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV6_DO 2 25*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_IPV6_SIZE 24 26*2d9fd380Sjfb8856606 #define BNXT_ULP_ENCAP_UDP_SIZE 4 27*2d9fd380Sjfb8856606 #define BNXT_ULP_INVALID_SVIF_VAL -1U 28*2d9fd380Sjfb8856606 29*2d9fd380Sjfb8856606 #define BNXT_ULP_GET_IPV6_VER(vtcf) \ 30*2d9fd380Sjfb8856606 (((vtcf) & BNXT_ULP_PARSER_IPV6_VER_MASK) >> 28) 31*2d9fd380Sjfb8856606 #define BNXT_ULP_GET_IPV6_TC(vtcf) \ 32*2d9fd380Sjfb8856606 (((vtcf) & BNXT_ULP_PARSER_IPV6_TC) >> 20) 33*2d9fd380Sjfb8856606 #define BNXT_ULP_GET_IPV6_FLOWLABEL(vtcf) \ 34*2d9fd380Sjfb8856606 ((vtcf) & BNXT_ULP_PARSER_IPV6_FLOW_LABEL) 35*2d9fd380Sjfb8856606 #define BNXT_ULP_PARSER_IPV6_VER_MASK 0xf0000000 36*2d9fd380Sjfb8856606 #define BNXT_ULP_PARSER_IPV6_TC 0x0ff00000 37*2d9fd380Sjfb8856606 #define BNXT_ULP_PARSER_IPV6_FLOW_LABEL 0x000fffff 38*2d9fd380Sjfb8856606 39*2d9fd380Sjfb8856606 void 40*2d9fd380Sjfb8856606 bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms, 41*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params, 42*2d9fd380Sjfb8856606 enum bnxt_ulp_fdb_type flow_type); 43*2d9fd380Sjfb8856606 44*2d9fd380Sjfb8856606 /* Function to handle the parsing of the RTE port id. */ 45*2d9fd380Sjfb8856606 int32_t 46*2d9fd380Sjfb8856606 ulp_rte_parser_implicit_match_port_process(struct ulp_rte_parser_params *param); 47*2d9fd380Sjfb8856606 48*2d9fd380Sjfb8856606 /* Function to handle the implicit action port id */ 49*2d9fd380Sjfb8856606 int32_t 50*2d9fd380Sjfb8856606 ulp_rte_parser_implicit_act_port_process(struct ulp_rte_parser_params *params); 51*2d9fd380Sjfb8856606 52*2d9fd380Sjfb8856606 /* 53*2d9fd380Sjfb8856606 * Function to handle the parsing of RTE Flows and placing 54*2d9fd380Sjfb8856606 * the RTE flow items into the ulp structures. 55*2d9fd380Sjfb8856606 */ 56*2d9fd380Sjfb8856606 int32_t 57*2d9fd380Sjfb8856606 bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[], 58*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 59*2d9fd380Sjfb8856606 60*2d9fd380Sjfb8856606 /* 61*2d9fd380Sjfb8856606 * Function to handle the parsing of RTE Flows and placing 62*2d9fd380Sjfb8856606 * the RTE flow actions into the ulp structures. 63*2d9fd380Sjfb8856606 */ 64*2d9fd380Sjfb8856606 int32_t 65*2d9fd380Sjfb8856606 bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action actions[], 66*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 67*2d9fd380Sjfb8856606 68*2d9fd380Sjfb8856606 /* 69*2d9fd380Sjfb8856606 * Function to handle the post processing of the parsing details 70*2d9fd380Sjfb8856606 */ 71*2d9fd380Sjfb8856606 int32_t 72*2d9fd380Sjfb8856606 bnxt_ulp_rte_parser_post_process(struct ulp_rte_parser_params *params); 73*2d9fd380Sjfb8856606 74*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item PF Header. */ 75*2d9fd380Sjfb8856606 int32_t 76*2d9fd380Sjfb8856606 ulp_rte_pf_hdr_handler(const struct rte_flow_item *item, 77*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 78*2d9fd380Sjfb8856606 79*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item VF Header. */ 80*2d9fd380Sjfb8856606 int32_t 81*2d9fd380Sjfb8856606 ulp_rte_vf_hdr_handler(const struct rte_flow_item *item, 82*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 83*2d9fd380Sjfb8856606 84*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item port id Header. */ 85*2d9fd380Sjfb8856606 int32_t 86*2d9fd380Sjfb8856606 ulp_rte_port_id_hdr_handler(const struct rte_flow_item *item, 87*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 88*2d9fd380Sjfb8856606 89*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item port Header. */ 90*2d9fd380Sjfb8856606 int32_t 91*2d9fd380Sjfb8856606 ulp_rte_phy_port_hdr_handler(const struct rte_flow_item *item, 92*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 93*2d9fd380Sjfb8856606 94*2d9fd380Sjfb8856606 /* Function to handle the RTE item Ethernet Header. */ 95*2d9fd380Sjfb8856606 int32_t 96*2d9fd380Sjfb8856606 ulp_rte_eth_hdr_handler(const struct rte_flow_item *item, 97*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 98*2d9fd380Sjfb8856606 99*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item Vlan Header. */ 100*2d9fd380Sjfb8856606 int32_t 101*2d9fd380Sjfb8856606 ulp_rte_vlan_hdr_handler(const struct rte_flow_item *item, 102*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 103*2d9fd380Sjfb8856606 104*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item IPV4 Header. */ 105*2d9fd380Sjfb8856606 int32_t 106*2d9fd380Sjfb8856606 ulp_rte_ipv4_hdr_handler(const struct rte_flow_item *item, 107*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 108*2d9fd380Sjfb8856606 109*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item IPV6 Header. */ 110*2d9fd380Sjfb8856606 int32_t 111*2d9fd380Sjfb8856606 ulp_rte_ipv6_hdr_handler(const struct rte_flow_item *item, 112*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 113*2d9fd380Sjfb8856606 114*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item UDP Header. */ 115*2d9fd380Sjfb8856606 int32_t 116*2d9fd380Sjfb8856606 ulp_rte_udp_hdr_handler(const struct rte_flow_item *item, 117*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 118*2d9fd380Sjfb8856606 119*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item TCP Header. */ 120*2d9fd380Sjfb8856606 int32_t 121*2d9fd380Sjfb8856606 ulp_rte_tcp_hdr_handler(const struct rte_flow_item *item, 122*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 123*2d9fd380Sjfb8856606 124*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item Vxlan Header. */ 125*2d9fd380Sjfb8856606 int32_t 126*2d9fd380Sjfb8856606 ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item, 127*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 128*2d9fd380Sjfb8856606 129*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow item void Header. */ 130*2d9fd380Sjfb8856606 int32_t 131*2d9fd380Sjfb8856606 ulp_rte_void_hdr_handler(const struct rte_flow_item *item, 132*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 133*2d9fd380Sjfb8856606 134*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action void Header. */ 135*2d9fd380Sjfb8856606 int32_t 136*2d9fd380Sjfb8856606 ulp_rte_void_act_handler(const struct rte_flow_action *action_item, 137*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 138*2d9fd380Sjfb8856606 139*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action RSS Header. */ 140*2d9fd380Sjfb8856606 int32_t 141*2d9fd380Sjfb8856606 ulp_rte_rss_act_handler(const struct rte_flow_action *action_item, 142*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 143*2d9fd380Sjfb8856606 144*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action Mark Header. */ 145*2d9fd380Sjfb8856606 int32_t 146*2d9fd380Sjfb8856606 ulp_rte_mark_act_handler(const struct rte_flow_action *action_item, 147*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 148*2d9fd380Sjfb8856606 149*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */ 150*2d9fd380Sjfb8856606 int32_t 151*2d9fd380Sjfb8856606 ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item, 152*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 153*2d9fd380Sjfb8856606 154*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */ 155*2d9fd380Sjfb8856606 int32_t 156*2d9fd380Sjfb8856606 ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action *action_item, 157*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 158*2d9fd380Sjfb8856606 159*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action drop Header. */ 160*2d9fd380Sjfb8856606 int32_t 161*2d9fd380Sjfb8856606 ulp_rte_drop_act_handler(const struct rte_flow_action *action_item, 162*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 163*2d9fd380Sjfb8856606 164*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action count. */ 165*2d9fd380Sjfb8856606 int32_t 166*2d9fd380Sjfb8856606 ulp_rte_count_act_handler(const struct rte_flow_action *action_item, 167*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 168*2d9fd380Sjfb8856606 169*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action PF. */ 170*2d9fd380Sjfb8856606 int32_t 171*2d9fd380Sjfb8856606 ulp_rte_pf_act_handler(const struct rte_flow_action *action_item, 172*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 173*2d9fd380Sjfb8856606 174*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action VF. */ 175*2d9fd380Sjfb8856606 int32_t 176*2d9fd380Sjfb8856606 ulp_rte_vf_act_handler(const struct rte_flow_action *action_item, 177*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 178*2d9fd380Sjfb8856606 179*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action port_id. */ 180*2d9fd380Sjfb8856606 int32_t 181*2d9fd380Sjfb8856606 ulp_rte_port_id_act_handler(const struct rte_flow_action *act_item, 182*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 183*2d9fd380Sjfb8856606 184*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action phy_port. */ 185*2d9fd380Sjfb8856606 int32_t 186*2d9fd380Sjfb8856606 ulp_rte_phy_port_act_handler(const struct rte_flow_action *action_item, 187*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 188*2d9fd380Sjfb8856606 189*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action pop vlan. */ 190*2d9fd380Sjfb8856606 int32_t 191*2d9fd380Sjfb8856606 ulp_rte_of_pop_vlan_act_handler(const struct rte_flow_action *action_item, 192*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 193*2d9fd380Sjfb8856606 194*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action push vlan. */ 195*2d9fd380Sjfb8856606 int32_t 196*2d9fd380Sjfb8856606 ulp_rte_of_push_vlan_act_handler(const struct rte_flow_action *action_item, 197*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 198*2d9fd380Sjfb8856606 199*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action set vlan id. */ 200*2d9fd380Sjfb8856606 int32_t 201*2d9fd380Sjfb8856606 ulp_rte_of_set_vlan_vid_act_handler(const struct rte_flow_action *action_item, 202*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 203*2d9fd380Sjfb8856606 204*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action set vlan pcp. */ 205*2d9fd380Sjfb8856606 int32_t 206*2d9fd380Sjfb8856606 ulp_rte_of_set_vlan_pcp_act_handler(const struct rte_flow_action *action_item, 207*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 208*2d9fd380Sjfb8856606 209*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action set ipv4 src.*/ 210*2d9fd380Sjfb8856606 int32_t 211*2d9fd380Sjfb8856606 ulp_rte_set_ipv4_src_act_handler(const struct rte_flow_action *action_item, 212*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 213*2d9fd380Sjfb8856606 214*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action set ipv4 dst.*/ 215*2d9fd380Sjfb8856606 int32_t 216*2d9fd380Sjfb8856606 ulp_rte_set_ipv4_dst_act_handler(const struct rte_flow_action *action_item, 217*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 218*2d9fd380Sjfb8856606 219*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action set tp src.*/ 220*2d9fd380Sjfb8856606 int32_t 221*2d9fd380Sjfb8856606 ulp_rte_set_tp_src_act_handler(const struct rte_flow_action *action_item, 222*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 223*2d9fd380Sjfb8856606 224*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action set tp dst.*/ 225*2d9fd380Sjfb8856606 int32_t 226*2d9fd380Sjfb8856606 ulp_rte_set_tp_dst_act_handler(const struct rte_flow_action *action_item, 227*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 228*2d9fd380Sjfb8856606 229*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action dec ttl.*/ 230*2d9fd380Sjfb8856606 int32_t 231*2d9fd380Sjfb8856606 ulp_rte_dec_ttl_act_handler(const struct rte_flow_action *action_item, 232*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 233*2d9fd380Sjfb8856606 234*2d9fd380Sjfb8856606 /* Function to handle the parsing of RTE Flow action JUMP .*/ 235*2d9fd380Sjfb8856606 int32_t 236*2d9fd380Sjfb8856606 ulp_rte_jump_act_handler(const struct rte_flow_action *action_item, 237*2d9fd380Sjfb8856606 struct ulp_rte_parser_params *params); 238*2d9fd380Sjfb8856606 239*2d9fd380Sjfb8856606 #endif /* _ULP_RTE_PARSER_H_ */ 240