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