1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2014-2021 Broadcom 3 * All rights reserved. 4 */ 5 6 #include "ulp_template_db_enum.h" 7 #include "ulp_template_struct.h" 8 #include "ulp_rte_parser.h" 9 10 /* 11 * This structure has to be indexed based on the rte_flow_action_type that is 12 * part of DPDK. The below array is list of parsing functions for each of the 13 * flow actions that are supported. 14 */ 15 struct bnxt_ulp_rte_act_info ulp_act_info[] = { 16 [RTE_FLOW_ACTION_TYPE_END] = { 17 .act_type = BNXT_ULP_ACT_TYPE_END, 18 .proto_act_func = NULL 19 }, 20 [RTE_FLOW_ACTION_TYPE_VOID] = { 21 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 22 .proto_act_func = ulp_rte_void_act_handler 23 }, 24 [RTE_FLOW_ACTION_TYPE_PASSTHRU] = { 25 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 26 .proto_act_func = NULL 27 }, 28 [RTE_FLOW_ACTION_TYPE_JUMP] = { 29 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 30 .proto_act_func = ulp_rte_jump_act_handler 31 }, 32 [RTE_FLOW_ACTION_TYPE_MARK] = { 33 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 34 .proto_act_func = ulp_rte_mark_act_handler 35 }, 36 [RTE_FLOW_ACTION_TYPE_FLAG] = { 37 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 38 .proto_act_func = NULL 39 }, 40 [RTE_FLOW_ACTION_TYPE_QUEUE] = { 41 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 42 .proto_act_func = NULL 43 }, 44 [RTE_FLOW_ACTION_TYPE_DROP] = { 45 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 46 .proto_act_func = ulp_rte_drop_act_handler 47 }, 48 [RTE_FLOW_ACTION_TYPE_COUNT] = { 49 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 50 .proto_act_func = ulp_rte_count_act_handler 51 }, 52 [RTE_FLOW_ACTION_TYPE_RSS] = { 53 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 54 .proto_act_func = ulp_rte_rss_act_handler 55 }, 56 [RTE_FLOW_ACTION_TYPE_PF] = { 57 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 58 .proto_act_func = ulp_rte_pf_act_handler 59 }, 60 [RTE_FLOW_ACTION_TYPE_VF] = { 61 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 62 .proto_act_func = ulp_rte_vf_act_handler 63 }, 64 [RTE_FLOW_ACTION_TYPE_PHY_PORT] = { 65 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 66 .proto_act_func = ulp_rte_phy_port_act_handler 67 }, 68 [RTE_FLOW_ACTION_TYPE_PORT_ID] = { 69 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 70 .proto_act_func = ulp_rte_port_id_act_handler 71 }, 72 [RTE_FLOW_ACTION_TYPE_METER] = { 73 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 74 .proto_act_func = NULL 75 }, 76 [RTE_FLOW_ACTION_TYPE_SECURITY] = { 77 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 78 .proto_act_func = NULL 79 }, 80 [RTE_FLOW_ACTION_TYPE_OF_SET_MPLS_TTL] = { 81 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 82 .proto_act_func = NULL 83 }, 84 [RTE_FLOW_ACTION_TYPE_OF_DEC_MPLS_TTL] = { 85 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 86 .proto_act_func = NULL 87 }, 88 [RTE_FLOW_ACTION_TYPE_OF_SET_NW_TTL] = { 89 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 90 .proto_act_func = NULL 91 }, 92 [RTE_FLOW_ACTION_TYPE_OF_DEC_NW_TTL] = { 93 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 94 .proto_act_func = NULL 95 }, 96 [RTE_FLOW_ACTION_TYPE_OF_COPY_TTL_OUT] = { 97 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 98 .proto_act_func = NULL 99 }, 100 [RTE_FLOW_ACTION_TYPE_OF_COPY_TTL_IN] = { 101 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 102 .proto_act_func = NULL 103 }, 104 [RTE_FLOW_ACTION_TYPE_OF_POP_VLAN] = { 105 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 106 .proto_act_func = ulp_rte_of_pop_vlan_act_handler 107 }, 108 [RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN] = { 109 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 110 .proto_act_func = ulp_rte_of_push_vlan_act_handler 111 }, 112 [RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID] = { 113 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 114 .proto_act_func = ulp_rte_of_set_vlan_vid_act_handler 115 }, 116 [RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP] = { 117 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 118 .proto_act_func = ulp_rte_of_set_vlan_pcp_act_handler 119 }, 120 [RTE_FLOW_ACTION_TYPE_OF_POP_MPLS] = { 121 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 122 .proto_act_func = NULL 123 }, 124 [RTE_FLOW_ACTION_TYPE_OF_PUSH_MPLS] = { 125 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 126 .proto_act_func = NULL 127 }, 128 [RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP] = { 129 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 130 .proto_act_func = ulp_rte_vxlan_encap_act_handler 131 }, 132 [RTE_FLOW_ACTION_TYPE_VXLAN_DECAP] = { 133 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 134 .proto_act_func = ulp_rte_vxlan_decap_act_handler 135 }, 136 [RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP] = { 137 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 138 .proto_act_func = NULL 139 }, 140 [RTE_FLOW_ACTION_TYPE_NVGRE_DECAP] = { 141 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 142 .proto_act_func = NULL 143 }, 144 [RTE_FLOW_ACTION_TYPE_RAW_ENCAP] = { 145 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 146 .proto_act_func = NULL 147 }, 148 [RTE_FLOW_ACTION_TYPE_RAW_DECAP] = { 149 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 150 .proto_act_func = NULL 151 }, 152 [RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC] = { 153 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 154 .proto_act_func = ulp_rte_set_ipv4_src_act_handler 155 }, 156 [RTE_FLOW_ACTION_TYPE_SET_IPV4_DST] = { 157 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 158 .proto_act_func = ulp_rte_set_ipv4_dst_act_handler 159 }, 160 [RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC] = { 161 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 162 .proto_act_func = NULL 163 }, 164 [RTE_FLOW_ACTION_TYPE_SET_IPV6_DST] = { 165 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 166 .proto_act_func = NULL 167 }, 168 [RTE_FLOW_ACTION_TYPE_SET_TP_SRC] = { 169 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 170 .proto_act_func = ulp_rte_set_tp_src_act_handler 171 }, 172 [RTE_FLOW_ACTION_TYPE_SET_TP_DST] = { 173 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 174 .proto_act_func = ulp_rte_set_tp_dst_act_handler 175 }, 176 [RTE_FLOW_ACTION_TYPE_MAC_SWAP] = { 177 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 178 .proto_act_func = NULL 179 }, 180 [RTE_FLOW_ACTION_TYPE_DEC_TTL] = { 181 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 182 .proto_act_func = ulp_rte_dec_ttl_act_handler 183 }, 184 [RTE_FLOW_ACTION_TYPE_SET_TTL] = { 185 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 186 .proto_act_func = NULL 187 }, 188 [RTE_FLOW_ACTION_TYPE_SET_MAC_SRC] = { 189 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 190 .proto_act_func = NULL 191 }, 192 [RTE_FLOW_ACTION_TYPE_SET_MAC_DST] = { 193 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 194 .proto_act_func = NULL 195 }, 196 [RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ] = { 197 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 198 .proto_act_func = NULL 199 }, 200 [RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ] = { 201 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 202 .proto_act_func = NULL 203 }, 204 [RTE_FLOW_ACTION_TYPE_INC_TCP_ACK] = { 205 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 206 .proto_act_func = NULL 207 }, 208 [RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK] = { 209 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED, 210 .proto_act_func = NULL 211 }, 212 [RTE_FLOW_ACTION_TYPE_SAMPLE] = { 213 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED, 214 .proto_act_func = ulp_rte_sample_act_handler 215 } 216 }; 217 218 /* 219 * This table has to be indexed based on the rte_flow_item_type that is part of 220 * DPDK. The below array is list of parsing functions for each of the flow items 221 * that are supported. 222 */ 223 struct bnxt_ulp_rte_hdr_info ulp_hdr_info[] = { 224 [RTE_FLOW_ITEM_TYPE_END] = { 225 .hdr_type = BNXT_ULP_HDR_TYPE_END, 226 .proto_hdr_func = NULL 227 }, 228 [RTE_FLOW_ITEM_TYPE_VOID] = { 229 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 230 .proto_hdr_func = ulp_rte_void_hdr_handler 231 }, 232 [RTE_FLOW_ITEM_TYPE_INVERT] = { 233 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 234 .proto_hdr_func = NULL 235 }, 236 [RTE_FLOW_ITEM_TYPE_ANY] = { 237 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 238 .proto_hdr_func = ulp_rte_item_any_handler 239 }, 240 [RTE_FLOW_ITEM_TYPE_PF] = { 241 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 242 .proto_hdr_func = ulp_rte_pf_hdr_handler 243 }, 244 [RTE_FLOW_ITEM_TYPE_VF] = { 245 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 246 .proto_hdr_func = ulp_rte_vf_hdr_handler 247 }, 248 [RTE_FLOW_ITEM_TYPE_PHY_PORT] = { 249 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 250 .proto_hdr_func = ulp_rte_phy_port_hdr_handler 251 }, 252 [RTE_FLOW_ITEM_TYPE_PORT_ID] = { 253 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 254 .proto_hdr_func = ulp_rte_port_id_hdr_handler 255 }, 256 [RTE_FLOW_ITEM_TYPE_RAW] = { 257 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 258 .proto_hdr_func = NULL 259 }, 260 [RTE_FLOW_ITEM_TYPE_ETH] = { 261 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 262 .proto_hdr_func = ulp_rte_eth_hdr_handler 263 }, 264 [RTE_FLOW_ITEM_TYPE_VLAN] = { 265 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 266 .proto_hdr_func = ulp_rte_vlan_hdr_handler 267 }, 268 [RTE_FLOW_ITEM_TYPE_IPV4] = { 269 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 270 .proto_hdr_func = ulp_rte_ipv4_hdr_handler 271 }, 272 [RTE_FLOW_ITEM_TYPE_IPV6] = { 273 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 274 .proto_hdr_func = ulp_rte_ipv6_hdr_handler 275 }, 276 [RTE_FLOW_ITEM_TYPE_ICMP] = { 277 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 278 .proto_hdr_func = ulp_rte_icmp_hdr_handler 279 }, 280 [RTE_FLOW_ITEM_TYPE_UDP] = { 281 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 282 .proto_hdr_func = ulp_rte_udp_hdr_handler 283 }, 284 [RTE_FLOW_ITEM_TYPE_TCP] = { 285 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 286 .proto_hdr_func = ulp_rte_tcp_hdr_handler 287 }, 288 [RTE_FLOW_ITEM_TYPE_SCTP] = { 289 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 290 .proto_hdr_func = NULL 291 }, 292 [RTE_FLOW_ITEM_TYPE_VXLAN] = { 293 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 294 .proto_hdr_func = ulp_rte_vxlan_hdr_handler 295 }, 296 [RTE_FLOW_ITEM_TYPE_E_TAG] = { 297 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 298 .proto_hdr_func = NULL 299 }, 300 [RTE_FLOW_ITEM_TYPE_NVGRE] = { 301 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 302 .proto_hdr_func = NULL 303 }, 304 [RTE_FLOW_ITEM_TYPE_MPLS] = { 305 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 306 .proto_hdr_func = NULL 307 }, 308 [RTE_FLOW_ITEM_TYPE_GRE] = { 309 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 310 .proto_hdr_func = ulp_rte_gre_hdr_handler 311 }, 312 [RTE_FLOW_ITEM_TYPE_FUZZY] = { 313 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 314 .proto_hdr_func = NULL 315 }, 316 [RTE_FLOW_ITEM_TYPE_GTP] = { 317 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 318 .proto_hdr_func = NULL 319 }, 320 [RTE_FLOW_ITEM_TYPE_GTPC] = { 321 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 322 .proto_hdr_func = NULL 323 }, 324 [RTE_FLOW_ITEM_TYPE_GTPU] = { 325 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 326 .proto_hdr_func = NULL 327 }, 328 [RTE_FLOW_ITEM_TYPE_ESP] = { 329 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 330 .proto_hdr_func = NULL 331 }, 332 [RTE_FLOW_ITEM_TYPE_GENEVE] = { 333 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 334 .proto_hdr_func = NULL 335 }, 336 [RTE_FLOW_ITEM_TYPE_VXLAN_GPE] = { 337 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 338 .proto_hdr_func = NULL 339 }, 340 [RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4] = { 341 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 342 .proto_hdr_func = NULL 343 }, 344 [RTE_FLOW_ITEM_TYPE_IPV6_EXT] = { 345 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 346 .proto_hdr_func = NULL 347 }, 348 [RTE_FLOW_ITEM_TYPE_ICMP6] = { 349 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, 350 .proto_hdr_func = ulp_rte_icmp6_hdr_handler 351 }, 352 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS] = { 353 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 354 .proto_hdr_func = NULL 355 }, 356 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA] = { 357 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 358 .proto_hdr_func = NULL 359 }, 360 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT] = { 361 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 362 .proto_hdr_func = NULL 363 }, 364 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_SLA_ETH] = { 365 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 366 .proto_hdr_func = NULL 367 }, 368 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_TLA_ETH] = { 369 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 370 .proto_hdr_func = NULL 371 }, 372 [RTE_FLOW_ITEM_TYPE_MARK] = { 373 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 374 .proto_hdr_func = NULL 375 }, 376 [RTE_FLOW_ITEM_TYPE_META] = { 377 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 378 .proto_hdr_func = NULL 379 }, 380 [RTE_FLOW_ITEM_TYPE_GRE_KEY] = { 381 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 382 .proto_hdr_func = NULL 383 }, 384 [RTE_FLOW_ITEM_TYPE_GTP_PSC] = { 385 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 386 .proto_hdr_func = NULL 387 }, 388 [RTE_FLOW_ITEM_TYPE_PPPOES] = { 389 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 390 .proto_hdr_func = NULL 391 }, 392 [RTE_FLOW_ITEM_TYPE_PPPOED] = { 393 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 394 .proto_hdr_func = NULL 395 }, 396 [RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID] = { 397 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 398 .proto_hdr_func = NULL 399 }, 400 [RTE_FLOW_ITEM_TYPE_NSH] = { 401 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 402 .proto_hdr_func = NULL 403 }, 404 [RTE_FLOW_ITEM_TYPE_IGMP] = { 405 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 406 .proto_hdr_func = NULL 407 }, 408 [RTE_FLOW_ITEM_TYPE_AH] = { 409 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 410 .proto_hdr_func = NULL 411 }, 412 [RTE_FLOW_ITEM_TYPE_HIGIG2] = { 413 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, 414 .proto_hdr_func = NULL 415 } 416 }; 417