xref: /dpdk/app/test-flow-perf/items_gen.c (revision 89b5642d0d45c22c0ceab57efe3fab3b49ff4324)
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 = &eth_spec;
31bf3688f1SWisam Jaddo 	items[items_counter].mask = &eth_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 = &gtp_spec;
226bf3688f1SWisam Jaddo 	items[items_counter].mask = &gtp_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