1bf3688f1SWisam Jaddo /* SPDX-License-Identifier: BSD-3-Clause 2bf3688f1SWisam Jaddo * Copyright 2020 Mellanox Technologies, Ltd 3bf3688f1SWisam Jaddo * 4bf3688f1SWisam Jaddo * This file contain the implementations of the items 5bf3688f1SWisam Jaddo * related methods. Each Item have a method to prepare 6bf3688f1SWisam Jaddo * the item and add it into items array in given index. 7bf3688f1SWisam Jaddo */ 8bf3688f1SWisam Jaddo 9bf3688f1SWisam Jaddo #include <stdint.h> 10bf3688f1SWisam Jaddo #include <rte_flow.h> 11bf3688f1SWisam Jaddo 12bf3688f1SWisam Jaddo #include "items_gen.h" 13bf3688f1SWisam Jaddo #include "config.h" 14bf3688f1SWisam Jaddo 15bf3688f1SWisam Jaddo /* Storage for additional parameters for items */ 16bf3688f1SWisam Jaddo struct additional_para { 17bf3688f1SWisam Jaddo rte_be32_t src_ip; 18070316d0SWisam Jaddo uint8_t core_idx; 19bf3688f1SWisam Jaddo }; 20bf3688f1SWisam Jaddo 21bf3688f1SWisam Jaddo static void 22bf3688f1SWisam Jaddo add_ether(struct rte_flow_item *items, 23bf3688f1SWisam Jaddo uint8_t items_counter, 24bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 25bf3688f1SWisam Jaddo { 26bf3688f1SWisam Jaddo static struct rte_flow_item_eth eth_spec; 27bf3688f1SWisam Jaddo static struct rte_flow_item_eth eth_mask; 28bf3688f1SWisam Jaddo 29bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_ETH; 30bf3688f1SWisam Jaddo items[items_counter].spec = ð_spec; 31bf3688f1SWisam Jaddo items[items_counter].mask = ð_mask; 32bf3688f1SWisam Jaddo } 33bf3688f1SWisam Jaddo 34bf3688f1SWisam Jaddo static void 35bf3688f1SWisam Jaddo add_vlan(struct rte_flow_item *items, 36bf3688f1SWisam Jaddo uint8_t items_counter, 37bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 38bf3688f1SWisam Jaddo { 3997544f85SWisam Jaddo static struct rte_flow_item_vlan vlan_spec = { 408275d5fcSThomas Monjalon .hdr.vlan_tci = RTE_BE16(VLAN_VALUE), 4197544f85SWisam Jaddo }; 4297544f85SWisam Jaddo static struct rte_flow_item_vlan vlan_mask = { 438275d5fcSThomas Monjalon .hdr.vlan_tci = RTE_BE16(0xffff), 4497544f85SWisam Jaddo }; 45bf3688f1SWisam Jaddo 46bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_VLAN; 47bf3688f1SWisam Jaddo items[items_counter].spec = &vlan_spec; 48bf3688f1SWisam Jaddo items[items_counter].mask = &vlan_mask; 49bf3688f1SWisam Jaddo } 50bf3688f1SWisam Jaddo 51bf3688f1SWisam Jaddo static void 52bf3688f1SWisam Jaddo add_ipv4(struct rte_flow_item *items, 53bf3688f1SWisam Jaddo uint8_t items_counter, struct additional_para para) 54bf3688f1SWisam Jaddo { 550efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_ipv4 ipv4_specs[RTE_MAX_LCORE]; 560efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_ipv4 ipv4_masks[RTE_MAX_LCORE]; 57070316d0SWisam Jaddo uint8_t ti = para.core_idx; 58bf3688f1SWisam Jaddo 59070316d0SWisam Jaddo ipv4_specs[ti].hdr.src_addr = RTE_BE32(para.src_ip); 60070316d0SWisam Jaddo ipv4_masks[ti].hdr.src_addr = RTE_BE32(0xffffffff); 61bf3688f1SWisam Jaddo 62bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_IPV4; 63070316d0SWisam Jaddo items[items_counter].spec = &ipv4_specs[ti]; 64070316d0SWisam Jaddo items[items_counter].mask = &ipv4_masks[ti]; 65bf3688f1SWisam Jaddo } 66bf3688f1SWisam Jaddo 67bf3688f1SWisam Jaddo 68bf3688f1SWisam Jaddo static void 69bf3688f1SWisam Jaddo add_ipv6(struct rte_flow_item *items, 70bf3688f1SWisam Jaddo uint8_t items_counter, struct additional_para para) 71bf3688f1SWisam Jaddo { 720efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_ipv6 ipv6_specs[RTE_MAX_LCORE]; 730efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_ipv6 ipv6_masks[RTE_MAX_LCORE]; 74070316d0SWisam Jaddo uint8_t ti = para.core_idx; 75f2cb9393SWisam Jaddo uint8_t i; 76bf3688f1SWisam Jaddo 77bf3688f1SWisam Jaddo /** Set ipv6 src **/ 78f2cb9393SWisam Jaddo for (i = 0; i < 16; i++) { 79f2cb9393SWisam Jaddo /* Currently src_ip is limited to 32 bit */ 80f2cb9393SWisam Jaddo if (i < 4) 81*89b5642dSRobin Jarry ipv6_specs[ti].hdr.src_addr.a[15 - i] = para.src_ip >> (i * 8); 82*89b5642dSRobin Jarry ipv6_masks[ti].hdr.src_addr.a[15 - i] = 0xff; 83f2cb9393SWisam Jaddo } 84bf3688f1SWisam Jaddo 85bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_IPV6; 86070316d0SWisam Jaddo items[items_counter].spec = &ipv6_specs[ti]; 87070316d0SWisam Jaddo items[items_counter].mask = &ipv6_masks[ti]; 88bf3688f1SWisam Jaddo } 89bf3688f1SWisam Jaddo 90bf3688f1SWisam Jaddo static void 91bf3688f1SWisam Jaddo add_tcp(struct rte_flow_item *items, 92bf3688f1SWisam Jaddo uint8_t items_counter, 93bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 94bf3688f1SWisam Jaddo { 95bf3688f1SWisam Jaddo static struct rte_flow_item_tcp tcp_spec; 96bf3688f1SWisam Jaddo static struct rte_flow_item_tcp tcp_mask; 97bf3688f1SWisam Jaddo 98bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_TCP; 99bf3688f1SWisam Jaddo items[items_counter].spec = &tcp_spec; 100bf3688f1SWisam Jaddo items[items_counter].mask = &tcp_mask; 101bf3688f1SWisam Jaddo } 102bf3688f1SWisam Jaddo 103bf3688f1SWisam Jaddo static void 104bf3688f1SWisam Jaddo add_udp(struct rte_flow_item *items, 105bf3688f1SWisam Jaddo uint8_t items_counter, 106bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 107bf3688f1SWisam Jaddo { 108bf3688f1SWisam Jaddo static struct rte_flow_item_udp udp_spec; 109bf3688f1SWisam Jaddo static struct rte_flow_item_udp udp_mask; 110bf3688f1SWisam Jaddo 111bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_UDP; 112bf3688f1SWisam Jaddo items[items_counter].spec = &udp_spec; 113bf3688f1SWisam Jaddo items[items_counter].mask = &udp_mask; 114bf3688f1SWisam Jaddo } 115bf3688f1SWisam Jaddo 116bf3688f1SWisam Jaddo static void 117bf3688f1SWisam Jaddo add_vxlan(struct rte_flow_item *items, 118bf3688f1SWisam Jaddo uint8_t items_counter, 119070316d0SWisam Jaddo struct additional_para para) 120bf3688f1SWisam Jaddo { 1210efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_vxlan vxlan_specs[RTE_MAX_LCORE]; 1220efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_vxlan vxlan_masks[RTE_MAX_LCORE]; 123070316d0SWisam Jaddo uint8_t ti = para.core_idx; 124bf3688f1SWisam Jaddo uint32_t vni_value; 125bf3688f1SWisam Jaddo uint8_t i; 126bf3688f1SWisam Jaddo 127bf3688f1SWisam Jaddo vni_value = VNI_VALUE; 128bf3688f1SWisam Jaddo 129bf3688f1SWisam Jaddo /* Set standard vxlan vni */ 130bf3688f1SWisam Jaddo for (i = 0; i < 3; i++) { 1315ec2a97eSThomas Monjalon vxlan_specs[ti].hdr.vni[2 - i] = vni_value >> (i * 8); 1325ec2a97eSThomas Monjalon vxlan_masks[ti].hdr.vni[2 - i] = 0xff; 133bf3688f1SWisam Jaddo } 134bf3688f1SWisam Jaddo 135bf3688f1SWisam Jaddo /* Standard vxlan flags */ 1365ec2a97eSThomas Monjalon vxlan_specs[ti].hdr.flags = 0x8; 137bf3688f1SWisam Jaddo 138bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_VXLAN; 139070316d0SWisam Jaddo items[items_counter].spec = &vxlan_specs[ti]; 140070316d0SWisam Jaddo items[items_counter].mask = &vxlan_masks[ti]; 141bf3688f1SWisam Jaddo } 142bf3688f1SWisam Jaddo 143bf3688f1SWisam Jaddo static void 144bf3688f1SWisam Jaddo add_vxlan_gpe(struct rte_flow_item *items, 145bf3688f1SWisam Jaddo uint8_t items_counter, 146bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 147bf3688f1SWisam Jaddo { 1480efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) 1490efea35aSTyler Retzlaff struct rte_flow_item_vxlan_gpe vxlan_gpe_specs[RTE_MAX_LCORE]; 1500efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) 1510efea35aSTyler Retzlaff struct rte_flow_item_vxlan_gpe vxlan_gpe_masks[RTE_MAX_LCORE]; 152070316d0SWisam Jaddo uint8_t ti = para.core_idx; 153bf3688f1SWisam Jaddo uint32_t vni_value; 154bf3688f1SWisam Jaddo uint8_t i; 155bf3688f1SWisam Jaddo 156bf3688f1SWisam Jaddo vni_value = VNI_VALUE; 157bf3688f1SWisam Jaddo 158bf3688f1SWisam Jaddo /* Set vxlan-gpe vni */ 159bf3688f1SWisam Jaddo for (i = 0; i < 3; i++) { 1605ec2a97eSThomas Monjalon vxlan_gpe_specs[ti].hdr.vni[2 - i] = vni_value >> (i * 8); 1615ec2a97eSThomas Monjalon vxlan_gpe_masks[ti].hdr.vni[2 - i] = 0xff; 162bf3688f1SWisam Jaddo } 163bf3688f1SWisam Jaddo 164bf3688f1SWisam Jaddo /* vxlan-gpe flags */ 1655ec2a97eSThomas Monjalon vxlan_gpe_specs[ti].hdr.flags = 0x0c; 166bf3688f1SWisam Jaddo 167bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_VXLAN_GPE; 168070316d0SWisam Jaddo items[items_counter].spec = &vxlan_gpe_specs[ti]; 169070316d0SWisam Jaddo items[items_counter].mask = &vxlan_gpe_masks[ti]; 170bf3688f1SWisam Jaddo } 171bf3688f1SWisam Jaddo 172bf3688f1SWisam Jaddo static void 173bf3688f1SWisam Jaddo add_gre(struct rte_flow_item *items, 174bf3688f1SWisam Jaddo uint8_t items_counter, 175bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 176bf3688f1SWisam Jaddo { 17797544f85SWisam Jaddo static struct rte_flow_item_gre gre_spec = { 17897544f85SWisam Jaddo .protocol = RTE_BE16(RTE_ETHER_TYPE_TEB), 17997544f85SWisam Jaddo }; 18097544f85SWisam Jaddo static struct rte_flow_item_gre gre_mask = { 18197544f85SWisam Jaddo .protocol = RTE_BE16(0xffff), 18297544f85SWisam Jaddo }; 183bf3688f1SWisam Jaddo 184bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_GRE; 185bf3688f1SWisam Jaddo items[items_counter].spec = &gre_spec; 186bf3688f1SWisam Jaddo items[items_counter].mask = &gre_mask; 187bf3688f1SWisam Jaddo } 188bf3688f1SWisam Jaddo 189bf3688f1SWisam Jaddo static void 190bf3688f1SWisam Jaddo add_geneve(struct rte_flow_item *items, 191bf3688f1SWisam Jaddo uint8_t items_counter, 192bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 193bf3688f1SWisam Jaddo { 1940efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_geneve geneve_specs[RTE_MAX_LCORE]; 1950efea35aSTyler Retzlaff static alignas(RTE_CACHE_LINE_SIZE) struct rte_flow_item_geneve geneve_masks[RTE_MAX_LCORE]; 196070316d0SWisam Jaddo uint8_t ti = para.core_idx; 197bf3688f1SWisam Jaddo uint32_t vni_value; 198bf3688f1SWisam Jaddo uint8_t i; 199bf3688f1SWisam Jaddo 200bf3688f1SWisam Jaddo vni_value = VNI_VALUE; 201bf3688f1SWisam Jaddo 202bf3688f1SWisam Jaddo for (i = 0; i < 3; i++) { 203070316d0SWisam Jaddo geneve_specs[ti].vni[2 - i] = vni_value >> (i * 8); 204070316d0SWisam Jaddo geneve_masks[ti].vni[2 - i] = 0xff; 205bf3688f1SWisam Jaddo } 206bf3688f1SWisam Jaddo 207bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_GENEVE; 208070316d0SWisam Jaddo items[items_counter].spec = &geneve_specs[ti]; 209070316d0SWisam Jaddo items[items_counter].mask = &geneve_masks[ti]; 210bf3688f1SWisam Jaddo } 211bf3688f1SWisam Jaddo 212bf3688f1SWisam Jaddo static void 213bf3688f1SWisam Jaddo add_gtp(struct rte_flow_item *items, 214bf3688f1SWisam Jaddo uint8_t items_counter, 215bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 216bf3688f1SWisam Jaddo { 21797544f85SWisam Jaddo static struct rte_flow_item_gtp gtp_spec = { 2182397616cSThomas Monjalon .hdr.teid = RTE_BE32(TEID_VALUE), 21997544f85SWisam Jaddo }; 22097544f85SWisam Jaddo static struct rte_flow_item_gtp gtp_mask = { 2212397616cSThomas Monjalon .hdr.teid = RTE_BE32(0xffffffff), 22297544f85SWisam Jaddo }; 223bf3688f1SWisam Jaddo 224bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_GTP; 225bf3688f1SWisam Jaddo items[items_counter].spec = >p_spec; 226bf3688f1SWisam Jaddo items[items_counter].mask = >p_mask; 227bf3688f1SWisam Jaddo } 228bf3688f1SWisam Jaddo 229bf3688f1SWisam Jaddo static void 230bf3688f1SWisam Jaddo add_meta_data(struct rte_flow_item *items, 231bf3688f1SWisam Jaddo uint8_t items_counter, 232bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 233bf3688f1SWisam Jaddo { 23497544f85SWisam Jaddo static struct rte_flow_item_meta meta_spec = { 23597544f85SWisam Jaddo .data = RTE_BE32(META_DATA), 23697544f85SWisam Jaddo }; 23797544f85SWisam Jaddo static struct rte_flow_item_meta meta_mask = { 23897544f85SWisam Jaddo .data = RTE_BE32(0xffffffff), 23997544f85SWisam Jaddo }; 240bf3688f1SWisam Jaddo 241bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_META; 242bf3688f1SWisam Jaddo items[items_counter].spec = &meta_spec; 243bf3688f1SWisam Jaddo items[items_counter].mask = &meta_mask; 244bf3688f1SWisam Jaddo } 245bf3688f1SWisam Jaddo 246bf3688f1SWisam Jaddo 247bf3688f1SWisam Jaddo static void 248bf3688f1SWisam Jaddo add_meta_tag(struct rte_flow_item *items, 249bf3688f1SWisam Jaddo uint8_t items_counter, 250bf3688f1SWisam Jaddo __rte_unused struct additional_para para) 251bf3688f1SWisam Jaddo { 25297544f85SWisam Jaddo static struct rte_flow_item_tag tag_spec = { 25397544f85SWisam Jaddo .data = RTE_BE32(META_DATA), 25497544f85SWisam Jaddo .index = TAG_INDEX, 25597544f85SWisam Jaddo }; 25697544f85SWisam Jaddo static struct rte_flow_item_tag tag_mask = { 25797544f85SWisam Jaddo .data = RTE_BE32(0xffffffff), 25897544f85SWisam Jaddo .index = 0xff, 25997544f85SWisam Jaddo }; 260bf3688f1SWisam Jaddo 261bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_TAG; 262bf3688f1SWisam Jaddo items[items_counter].spec = &tag_spec; 263bf3688f1SWisam Jaddo items[items_counter].mask = &tag_mask; 264bf3688f1SWisam Jaddo } 265bf3688f1SWisam Jaddo 2667bcd402dSWisam Jaddo static void 2677bcd402dSWisam Jaddo add_icmpv4(struct rte_flow_item *items, 2687bcd402dSWisam Jaddo uint8_t items_counter, 2697bcd402dSWisam Jaddo __rte_unused struct additional_para para) 2707bcd402dSWisam Jaddo { 2717bcd402dSWisam Jaddo static struct rte_flow_item_icmp icmpv4_spec; 2727bcd402dSWisam Jaddo static struct rte_flow_item_icmp icmpv4_mask; 2737bcd402dSWisam Jaddo 2747bcd402dSWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_ICMP; 2757bcd402dSWisam Jaddo items[items_counter].spec = &icmpv4_spec; 2767bcd402dSWisam Jaddo items[items_counter].mask = &icmpv4_mask; 2777bcd402dSWisam Jaddo } 2787bcd402dSWisam Jaddo 2797bcd402dSWisam Jaddo static void 2807bcd402dSWisam Jaddo add_icmpv6(struct rte_flow_item *items, 2817bcd402dSWisam Jaddo uint8_t items_counter, 2827bcd402dSWisam Jaddo __rte_unused struct additional_para para) 2837bcd402dSWisam Jaddo { 2847bcd402dSWisam Jaddo static struct rte_flow_item_icmp6 icmpv6_spec; 2857bcd402dSWisam Jaddo static struct rte_flow_item_icmp6 icmpv6_mask; 2867bcd402dSWisam Jaddo 2877bcd402dSWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_ICMP6; 2887bcd402dSWisam Jaddo items[items_counter].spec = &icmpv6_spec; 2897bcd402dSWisam Jaddo items[items_counter].mask = &icmpv6_mask; 2907bcd402dSWisam Jaddo } 2917bcd402dSWisam Jaddo 292bf3688f1SWisam Jaddo void 293bf3688f1SWisam Jaddo fill_items(struct rte_flow_item *items, 294070316d0SWisam Jaddo uint64_t *flow_items, uint32_t outer_ip_src, 295070316d0SWisam Jaddo uint8_t core_idx) 296bf3688f1SWisam Jaddo { 297bf3688f1SWisam Jaddo uint8_t items_counter = 0; 2989001a863SWisam Jaddo uint8_t i, j; 299bf3688f1SWisam Jaddo struct additional_para additional_para_data = { 300bf3688f1SWisam Jaddo .src_ip = outer_ip_src, 301070316d0SWisam Jaddo .core_idx = core_idx, 302bf3688f1SWisam Jaddo }; 303bf3688f1SWisam Jaddo 304bf3688f1SWisam Jaddo /* Support outer items up to tunnel layer only. */ 305bf3688f1SWisam Jaddo static const struct items_dict { 306bf3688f1SWisam Jaddo uint64_t mask; 307bf3688f1SWisam Jaddo void (*funct)( 308bf3688f1SWisam Jaddo struct rte_flow_item *items, 309bf3688f1SWisam Jaddo uint8_t items_counter, 310bf3688f1SWisam Jaddo struct additional_para para 311bf3688f1SWisam Jaddo ); 3129001a863SWisam Jaddo } items_list[] = { 313bf3688f1SWisam Jaddo { 314bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_META, 315bf3688f1SWisam Jaddo .funct = add_meta_data, 316bf3688f1SWisam Jaddo }, 317bf3688f1SWisam Jaddo { 318bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_TAG, 319bf3688f1SWisam Jaddo .funct = add_meta_tag, 320bf3688f1SWisam Jaddo }, 321bf3688f1SWisam Jaddo { 322bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_ETH, 323bf3688f1SWisam Jaddo .funct = add_ether, 324bf3688f1SWisam Jaddo }, 325bf3688f1SWisam Jaddo { 326bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_VLAN, 327bf3688f1SWisam Jaddo .funct = add_vlan, 328bf3688f1SWisam Jaddo }, 329bf3688f1SWisam Jaddo { 330bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_IPV4, 331bf3688f1SWisam Jaddo .funct = add_ipv4, 332bf3688f1SWisam Jaddo }, 333bf3688f1SWisam Jaddo { 334bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_IPV6, 335bf3688f1SWisam Jaddo .funct = add_ipv6, 336bf3688f1SWisam Jaddo }, 337bf3688f1SWisam Jaddo { 338bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_TCP, 339bf3688f1SWisam Jaddo .funct = add_tcp, 340bf3688f1SWisam Jaddo }, 341bf3688f1SWisam Jaddo { 342bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_UDP, 343bf3688f1SWisam Jaddo .funct = add_udp, 344bf3688f1SWisam Jaddo }, 345bf3688f1SWisam Jaddo { 346bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_VXLAN, 347bf3688f1SWisam Jaddo .funct = add_vxlan, 348bf3688f1SWisam Jaddo }, 349bf3688f1SWisam Jaddo { 350bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_VXLAN_GPE, 351bf3688f1SWisam Jaddo .funct = add_vxlan_gpe, 352bf3688f1SWisam Jaddo }, 353bf3688f1SWisam Jaddo { 354bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_GRE, 355bf3688f1SWisam Jaddo .funct = add_gre, 356bf3688f1SWisam Jaddo }, 357bf3688f1SWisam Jaddo { 358bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_GENEVE, 359bf3688f1SWisam Jaddo .funct = add_geneve, 360bf3688f1SWisam Jaddo }, 361bf3688f1SWisam Jaddo { 362bf3688f1SWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_GTP, 363bf3688f1SWisam Jaddo .funct = add_gtp, 364bf3688f1SWisam Jaddo }, 3657bcd402dSWisam Jaddo { 3667bcd402dSWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_ICMP, 3677bcd402dSWisam Jaddo .funct = add_icmpv4, 3687bcd402dSWisam Jaddo }, 3697bcd402dSWisam Jaddo { 3707bcd402dSWisam Jaddo .mask = RTE_FLOW_ITEM_TYPE_ICMP6, 3717bcd402dSWisam Jaddo .funct = add_icmpv6, 3727bcd402dSWisam Jaddo }, 373bf3688f1SWisam Jaddo }; 374bf3688f1SWisam Jaddo 3759001a863SWisam Jaddo for (j = 0; j < MAX_ITEMS_NUM; j++) { 3769001a863SWisam Jaddo if (flow_items[j] == 0) 3779001a863SWisam Jaddo break; 3789001a863SWisam Jaddo for (i = 0; i < RTE_DIM(items_list); i++) { 3799001a863SWisam Jaddo if ((flow_items[j] & 3809001a863SWisam Jaddo FLOW_ITEM_MASK(items_list[i].mask)) == 0) 381bf3688f1SWisam Jaddo continue; 3829001a863SWisam Jaddo items_list[i].funct( 383bf3688f1SWisam Jaddo items, items_counter++, 384bf3688f1SWisam Jaddo additional_para_data 385bf3688f1SWisam Jaddo ); 3869001a863SWisam Jaddo break; 3879001a863SWisam Jaddo } 388bf3688f1SWisam Jaddo } 389bf3688f1SWisam Jaddo 390bf3688f1SWisam Jaddo items[items_counter].type = RTE_FLOW_ITEM_TYPE_END; 391bf3688f1SWisam Jaddo } 392