net/ice: remove type cast in Rx/Tx ring setup
[dpdk.git] / drivers / net / ice / ice_generic_flow.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019 Intel Corporation
3  */
4
5 #ifndef _ICE_GENERIC_FLOW_H_
6 #define _ICE_GENERIC_FLOW_H_
7
8 #include <rte_flow_driver.h>
9
10 struct ice_flow_pattern {
11         enum rte_flow_item_type *items;
12         uint64_t sw_fields;
13 };
14
15 #define ICE_INSET_NONE            0x00000000000000000ULL
16
17 /* bit0 ~ bit 7 */
18 #define ICE_INSET_SMAC            0x0000000000000001ULL
19 #define ICE_INSET_DMAC            0x0000000000000002ULL
20 #define ICE_INSET_ETHERTYPE       0x0000000000000020ULL
21
22 /* bit 8 ~ bit 15 */
23 #define ICE_INSET_IPV4_SRC        0x0000000000000100ULL
24 #define ICE_INSET_IPV4_DST        0x0000000000000200ULL
25 #define ICE_INSET_IPV6_SRC        0x0000000000000400ULL
26 #define ICE_INSET_IPV6_DST        0x0000000000000800ULL
27 #define ICE_INSET_SRC_PORT        0x0000000000001000ULL
28 #define ICE_INSET_DST_PORT        0x0000000000002000ULL
29 #define ICE_INSET_ARP             0x0000000000004000ULL
30
31 /* bit 16 ~ bit 31 */
32 #define ICE_INSET_IPV4_TOS        0x0000000000010000ULL
33 #define ICE_INSET_IPV4_PROTO      0x0000000000020000ULL
34 #define ICE_INSET_IPV4_TTL        0x0000000000040000ULL
35 #define ICE_INSET_IPV6_TOS        0x0000000000100000ULL
36 #define ICE_INSET_IPV6_PROTO      0x0000000000200000ULL
37 #define ICE_INSET_IPV6_HOP_LIMIT  0x0000000000400000ULL
38 #define ICE_INSET_ICMP            0x0000000001000000ULL
39 #define ICE_INSET_ICMP6           0x0000000002000000ULL
40
41 /* bit 32 ~ bit 47, tunnel fields */
42 #define ICE_INSET_TUN_SMAC           0x0000000100000000ULL
43 #define ICE_INSET_TUN_DMAC           0x0000000200000000ULL
44 #define ICE_INSET_TUN_IPV4_SRC       0x0000000400000000ULL
45 #define ICE_INSET_TUN_IPV4_DST       0x0000000800000000ULL
46 #define ICE_INSET_TUN_IPV4_TTL       0x0000001000000000ULL
47 #define ICE_INSET_TUN_IPV4_PROTO     0x0000002000000000ULL
48 #define ICE_INSET_TUN_IPV6_SRC       0x0000004000000000ULL
49 #define ICE_INSET_TUN_IPV6_DST       0x0000008000000000ULL
50 #define ICE_INSET_TUN_IPV6_TTL       0x0000010000000000ULL
51 #define ICE_INSET_TUN_IPV6_PROTO     0x0000020000000000ULL
52 #define ICE_INSET_TUN_SRC_PORT       0x0000040000000000ULL
53 #define ICE_INSET_TUN_DST_PORT       0x0000080000000000ULL
54 #define ICE_INSET_TUN_ID             0x0000100000000000ULL
55
56 /* bit 48 ~ bit 55 */
57 #define ICE_INSET_LAST_ETHER_TYPE 0x0001000000000000ULL
58
59 #define ICE_FLAG_VLAN_INNER  0x00000001ULL
60 #define ICE_FLAG_VLAN_OUTER  0x00000002ULL
61
62 #define INSET_ETHER ( \
63         ICE_INSET_DMAC | ICE_INSET_SMAC | ICE_INSET_ETHERTYPE)
64 #define INSET_MAC_IPV4 ( \
65         ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \
66         ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS)
67 #define INSET_MAC_IPV4_L4 ( \
68         ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \
69         ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS | ICE_INSET_DST_PORT | \
70         ICE_INSET_SRC_PORT)
71 #define INSET_MAC_IPV4_ICMP ( \
72         ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \
73         ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS | ICE_INSET_ICMP)
74 #define INSET_MAC_IPV6 ( \
75         ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \
76         ICE_INSET_IPV6_TOS | ICE_INSET_IPV6_HOP_LIMIT)
77 #define INSET_MAC_IPV6_L4 ( \
78         ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \
79         ICE_INSET_IPV6_HOP_LIMIT | ICE_INSET_IPV6_TOS | \
80         ICE_INSET_DST_PORT | ICE_INSET_SRC_PORT)
81 #define INSET_MAC_IPV6_ICMP ( \
82         ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \
83         ICE_INSET_IPV6_HOP_LIMIT | ICE_INSET_IPV6_TOS | ICE_INSET_ICMP6)
84 #define INSET_TUNNEL_IPV4_TYPE1 ( \
85         ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
86         ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO)
87 #define INSET_TUNNEL_IPV4_TYPE2 ( \
88         ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
89         ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO | \
90         ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT)
91 #define INSET_TUNNEL_IPV4_TYPE3 ( \
92         ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
93         ICE_INSET_TUN_IPV4_TTL | ICE_INSET_ICMP)
94 #define INSET_TUNNEL_IPV6_TYPE1 ( \
95         ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
96         ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO)
97 #define INSET_TUNNEL_IPV6_TYPE2 ( \
98         ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
99         ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO | \
100         ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT)
101 #define INSET_TUNNEL_IPV6_TYPE3 ( \
102         ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
103         ICE_INSET_TUN_IPV6_TTL | ICE_INSET_ICMP6)
104
105 /* L2 */
106 static enum rte_flow_item_type pattern_ethertype[] = {
107         RTE_FLOW_ITEM_TYPE_ETH,
108         RTE_FLOW_ITEM_TYPE_END,
109 };
110
111 /* non-tunnel IPv4 */
112 static enum rte_flow_item_type pattern_ipv4[] = {
113         RTE_FLOW_ITEM_TYPE_ETH,
114         RTE_FLOW_ITEM_TYPE_IPV4,
115         RTE_FLOW_ITEM_TYPE_END,
116 };
117
118 static enum rte_flow_item_type pattern_ipv4_udp[] = {
119         RTE_FLOW_ITEM_TYPE_ETH,
120         RTE_FLOW_ITEM_TYPE_IPV4,
121         RTE_FLOW_ITEM_TYPE_UDP,
122         RTE_FLOW_ITEM_TYPE_END,
123 };
124
125 static enum rte_flow_item_type pattern_ipv4_tcp[] = {
126         RTE_FLOW_ITEM_TYPE_ETH,
127         RTE_FLOW_ITEM_TYPE_IPV4,
128         RTE_FLOW_ITEM_TYPE_TCP,
129         RTE_FLOW_ITEM_TYPE_END,
130 };
131
132 static enum rte_flow_item_type pattern_ipv4_sctp[] = {
133         RTE_FLOW_ITEM_TYPE_ETH,
134         RTE_FLOW_ITEM_TYPE_IPV4,
135         RTE_FLOW_ITEM_TYPE_SCTP,
136         RTE_FLOW_ITEM_TYPE_END,
137 };
138
139 static enum rte_flow_item_type pattern_ipv4_icmp[] = {
140         RTE_FLOW_ITEM_TYPE_ETH,
141         RTE_FLOW_ITEM_TYPE_IPV4,
142         RTE_FLOW_ITEM_TYPE_ICMP,
143         RTE_FLOW_ITEM_TYPE_END,
144 };
145
146 /* non-tunnel IPv6 */
147 static enum rte_flow_item_type pattern_ipv6[] = {
148         RTE_FLOW_ITEM_TYPE_ETH,
149         RTE_FLOW_ITEM_TYPE_IPV6,
150         RTE_FLOW_ITEM_TYPE_END,
151 };
152
153 static enum rte_flow_item_type pattern_ipv6_udp[] = {
154         RTE_FLOW_ITEM_TYPE_ETH,
155         RTE_FLOW_ITEM_TYPE_IPV6,
156         RTE_FLOW_ITEM_TYPE_UDP,
157         RTE_FLOW_ITEM_TYPE_END,
158 };
159
160 static enum rte_flow_item_type pattern_ipv6_tcp[] = {
161         RTE_FLOW_ITEM_TYPE_ETH,
162         RTE_FLOW_ITEM_TYPE_IPV6,
163         RTE_FLOW_ITEM_TYPE_TCP,
164         RTE_FLOW_ITEM_TYPE_END,
165 };
166
167 static enum rte_flow_item_type pattern_ipv6_sctp[] = {
168         RTE_FLOW_ITEM_TYPE_ETH,
169         RTE_FLOW_ITEM_TYPE_IPV6,
170         RTE_FLOW_ITEM_TYPE_SCTP,
171         RTE_FLOW_ITEM_TYPE_END,
172 };
173
174 static enum rte_flow_item_type pattern_ipv6_icmp6[] = {
175         RTE_FLOW_ITEM_TYPE_ETH,
176         RTE_FLOW_ITEM_TYPE_IPV6,
177         RTE_FLOW_ITEM_TYPE_ICMP6,
178         RTE_FLOW_ITEM_TYPE_END,
179 };
180
181 /* IPv4 VXLAN IPv4 */
182 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4[] = {
183         RTE_FLOW_ITEM_TYPE_ETH,
184         RTE_FLOW_ITEM_TYPE_IPV4,
185         RTE_FLOW_ITEM_TYPE_UDP,
186         RTE_FLOW_ITEM_TYPE_VXLAN,
187         RTE_FLOW_ITEM_TYPE_IPV4,
188         RTE_FLOW_ITEM_TYPE_END,
189 };
190
191 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_udp[] = {
192         RTE_FLOW_ITEM_TYPE_ETH,
193         RTE_FLOW_ITEM_TYPE_IPV4,
194         RTE_FLOW_ITEM_TYPE_UDP,
195         RTE_FLOW_ITEM_TYPE_VXLAN,
196         RTE_FLOW_ITEM_TYPE_IPV4,
197         RTE_FLOW_ITEM_TYPE_UDP,
198         RTE_FLOW_ITEM_TYPE_END,
199 };
200
201 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_tcp[] = {
202         RTE_FLOW_ITEM_TYPE_ETH,
203         RTE_FLOW_ITEM_TYPE_IPV4,
204         RTE_FLOW_ITEM_TYPE_UDP,
205         RTE_FLOW_ITEM_TYPE_VXLAN,
206         RTE_FLOW_ITEM_TYPE_IPV4,
207         RTE_FLOW_ITEM_TYPE_TCP,
208         RTE_FLOW_ITEM_TYPE_END,
209 };
210
211 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_sctp[] = {
212         RTE_FLOW_ITEM_TYPE_ETH,
213         RTE_FLOW_ITEM_TYPE_IPV4,
214         RTE_FLOW_ITEM_TYPE_UDP,
215         RTE_FLOW_ITEM_TYPE_VXLAN,
216         RTE_FLOW_ITEM_TYPE_IPV4,
217         RTE_FLOW_ITEM_TYPE_SCTP,
218         RTE_FLOW_ITEM_TYPE_END,
219 };
220
221 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_icmp[] = {
222         RTE_FLOW_ITEM_TYPE_ETH,
223         RTE_FLOW_ITEM_TYPE_IPV4,
224         RTE_FLOW_ITEM_TYPE_UDP,
225         RTE_FLOW_ITEM_TYPE_VXLAN,
226         RTE_FLOW_ITEM_TYPE_IPV4,
227         RTE_FLOW_ITEM_TYPE_ICMP,
228         RTE_FLOW_ITEM_TYPE_END,
229 };
230
231 /* IPv4 VXLAN MAC IPv4 */
232 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4[] = {
233         RTE_FLOW_ITEM_TYPE_ETH,
234         RTE_FLOW_ITEM_TYPE_IPV4,
235         RTE_FLOW_ITEM_TYPE_UDP,
236         RTE_FLOW_ITEM_TYPE_VXLAN,
237         RTE_FLOW_ITEM_TYPE_ETH,
238         RTE_FLOW_ITEM_TYPE_IPV4,
239         RTE_FLOW_ITEM_TYPE_END,
240 };
241
242 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_udp[] = {
243         RTE_FLOW_ITEM_TYPE_ETH,
244         RTE_FLOW_ITEM_TYPE_IPV4,
245         RTE_FLOW_ITEM_TYPE_UDP,
246         RTE_FLOW_ITEM_TYPE_VXLAN,
247         RTE_FLOW_ITEM_TYPE_ETH,
248         RTE_FLOW_ITEM_TYPE_IPV4,
249         RTE_FLOW_ITEM_TYPE_UDP,
250         RTE_FLOW_ITEM_TYPE_END,
251 };
252
253 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_tcp[] = {
254         RTE_FLOW_ITEM_TYPE_ETH,
255         RTE_FLOW_ITEM_TYPE_IPV4,
256         RTE_FLOW_ITEM_TYPE_UDP,
257         RTE_FLOW_ITEM_TYPE_VXLAN,
258         RTE_FLOW_ITEM_TYPE_ETH,
259         RTE_FLOW_ITEM_TYPE_IPV4,
260         RTE_FLOW_ITEM_TYPE_TCP,
261         RTE_FLOW_ITEM_TYPE_END,
262 };
263
264 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_sctp[] = {
265         RTE_FLOW_ITEM_TYPE_ETH,
266         RTE_FLOW_ITEM_TYPE_IPV4,
267         RTE_FLOW_ITEM_TYPE_UDP,
268         RTE_FLOW_ITEM_TYPE_VXLAN,
269         RTE_FLOW_ITEM_TYPE_ETH,
270         RTE_FLOW_ITEM_TYPE_IPV4,
271         RTE_FLOW_ITEM_TYPE_SCTP,
272         RTE_FLOW_ITEM_TYPE_END,
273 };
274
275 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_icmp[] = {
276         RTE_FLOW_ITEM_TYPE_ETH,
277         RTE_FLOW_ITEM_TYPE_IPV4,
278         RTE_FLOW_ITEM_TYPE_UDP,
279         RTE_FLOW_ITEM_TYPE_VXLAN,
280         RTE_FLOW_ITEM_TYPE_ETH,
281         RTE_FLOW_ITEM_TYPE_IPV4,
282         RTE_FLOW_ITEM_TYPE_ICMP,
283         RTE_FLOW_ITEM_TYPE_END,
284 };
285
286 /* IPv4 VXLAN IPv6 */
287 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6[] = {
288         RTE_FLOW_ITEM_TYPE_ETH,
289         RTE_FLOW_ITEM_TYPE_IPV4,
290         RTE_FLOW_ITEM_TYPE_UDP,
291         RTE_FLOW_ITEM_TYPE_VXLAN,
292         RTE_FLOW_ITEM_TYPE_IPV6,
293         RTE_FLOW_ITEM_TYPE_END,
294 };
295
296 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_udp[] = {
297         RTE_FLOW_ITEM_TYPE_ETH,
298         RTE_FLOW_ITEM_TYPE_IPV4,
299         RTE_FLOW_ITEM_TYPE_UDP,
300         RTE_FLOW_ITEM_TYPE_VXLAN,
301         RTE_FLOW_ITEM_TYPE_IPV6,
302         RTE_FLOW_ITEM_TYPE_UDP,
303         RTE_FLOW_ITEM_TYPE_END,
304 };
305
306 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_tcp[] = {
307         RTE_FLOW_ITEM_TYPE_ETH,
308         RTE_FLOW_ITEM_TYPE_IPV4,
309         RTE_FLOW_ITEM_TYPE_UDP,
310         RTE_FLOW_ITEM_TYPE_VXLAN,
311         RTE_FLOW_ITEM_TYPE_IPV6,
312         RTE_FLOW_ITEM_TYPE_TCP,
313         RTE_FLOW_ITEM_TYPE_END,
314 };
315
316 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_sctp[] = {
317         RTE_FLOW_ITEM_TYPE_ETH,
318         RTE_FLOW_ITEM_TYPE_IPV4,
319         RTE_FLOW_ITEM_TYPE_UDP,
320         RTE_FLOW_ITEM_TYPE_VXLAN,
321         RTE_FLOW_ITEM_TYPE_IPV6,
322         RTE_FLOW_ITEM_TYPE_SCTP,
323         RTE_FLOW_ITEM_TYPE_END,
324 };
325
326 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_icmp[] = {
327         RTE_FLOW_ITEM_TYPE_ETH,
328         RTE_FLOW_ITEM_TYPE_IPV4,
329         RTE_FLOW_ITEM_TYPE_UDP,
330         RTE_FLOW_ITEM_TYPE_VXLAN,
331         RTE_FLOW_ITEM_TYPE_IPV6,
332         RTE_FLOW_ITEM_TYPE_ICMP,
333         RTE_FLOW_ITEM_TYPE_END,
334 };
335
336 /* IPv4 VXLAN MAC IPv6 */
337 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6[] = {
338         RTE_FLOW_ITEM_TYPE_ETH,
339         RTE_FLOW_ITEM_TYPE_IPV4,
340         RTE_FLOW_ITEM_TYPE_UDP,
341         RTE_FLOW_ITEM_TYPE_VXLAN,
342         RTE_FLOW_ITEM_TYPE_ETH,
343         RTE_FLOW_ITEM_TYPE_IPV6,
344         RTE_FLOW_ITEM_TYPE_END,
345 };
346
347 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_udp[] = {
348         RTE_FLOW_ITEM_TYPE_ETH,
349         RTE_FLOW_ITEM_TYPE_IPV4,
350         RTE_FLOW_ITEM_TYPE_UDP,
351         RTE_FLOW_ITEM_TYPE_VXLAN,
352         RTE_FLOW_ITEM_TYPE_ETH,
353         RTE_FLOW_ITEM_TYPE_IPV6,
354         RTE_FLOW_ITEM_TYPE_UDP,
355         RTE_FLOW_ITEM_TYPE_END,
356 };
357
358 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_tcp[] = {
359         RTE_FLOW_ITEM_TYPE_ETH,
360         RTE_FLOW_ITEM_TYPE_IPV4,
361         RTE_FLOW_ITEM_TYPE_UDP,
362         RTE_FLOW_ITEM_TYPE_VXLAN,
363         RTE_FLOW_ITEM_TYPE_ETH,
364         RTE_FLOW_ITEM_TYPE_IPV6,
365         RTE_FLOW_ITEM_TYPE_TCP,
366         RTE_FLOW_ITEM_TYPE_END,
367 };
368
369 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_sctp[] = {
370         RTE_FLOW_ITEM_TYPE_ETH,
371         RTE_FLOW_ITEM_TYPE_IPV4,
372         RTE_FLOW_ITEM_TYPE_UDP,
373         RTE_FLOW_ITEM_TYPE_VXLAN,
374         RTE_FLOW_ITEM_TYPE_ETH,
375         RTE_FLOW_ITEM_TYPE_IPV6,
376         RTE_FLOW_ITEM_TYPE_SCTP,
377         RTE_FLOW_ITEM_TYPE_END,
378 };
379
380 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_icmp[] = {
381         RTE_FLOW_ITEM_TYPE_ETH,
382         RTE_FLOW_ITEM_TYPE_IPV4,
383         RTE_FLOW_ITEM_TYPE_UDP,
384         RTE_FLOW_ITEM_TYPE_VXLAN,
385         RTE_FLOW_ITEM_TYPE_ETH,
386         RTE_FLOW_ITEM_TYPE_IPV6,
387         RTE_FLOW_ITEM_TYPE_ICMP,
388         RTE_FLOW_ITEM_TYPE_END,
389 };
390
391 /* IPv4 NVGRE IPv4 */
392 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4[] = {
393         RTE_FLOW_ITEM_TYPE_ETH,
394         RTE_FLOW_ITEM_TYPE_IPV4,
395         RTE_FLOW_ITEM_TYPE_NVGRE,
396         RTE_FLOW_ITEM_TYPE_IPV4,
397         RTE_FLOW_ITEM_TYPE_END,
398 };
399
400 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_udp[] = {
401         RTE_FLOW_ITEM_TYPE_ETH,
402         RTE_FLOW_ITEM_TYPE_IPV4,
403         RTE_FLOW_ITEM_TYPE_NVGRE,
404         RTE_FLOW_ITEM_TYPE_IPV4,
405         RTE_FLOW_ITEM_TYPE_UDP,
406         RTE_FLOW_ITEM_TYPE_END,
407 };
408
409 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_tcp[] = {
410         RTE_FLOW_ITEM_TYPE_ETH,
411         RTE_FLOW_ITEM_TYPE_IPV4,
412         RTE_FLOW_ITEM_TYPE_NVGRE,
413         RTE_FLOW_ITEM_TYPE_IPV4,
414         RTE_FLOW_ITEM_TYPE_TCP,
415         RTE_FLOW_ITEM_TYPE_END,
416 };
417
418 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_sctp[] = {
419         RTE_FLOW_ITEM_TYPE_ETH,
420         RTE_FLOW_ITEM_TYPE_IPV4,
421         RTE_FLOW_ITEM_TYPE_NVGRE,
422         RTE_FLOW_ITEM_TYPE_IPV4,
423         RTE_FLOW_ITEM_TYPE_SCTP,
424         RTE_FLOW_ITEM_TYPE_END,
425 };
426
427 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_icmp[] = {
428         RTE_FLOW_ITEM_TYPE_ETH,
429         RTE_FLOW_ITEM_TYPE_IPV4,
430         RTE_FLOW_ITEM_TYPE_NVGRE,
431         RTE_FLOW_ITEM_TYPE_IPV4,
432         RTE_FLOW_ITEM_TYPE_ICMP,
433         RTE_FLOW_ITEM_TYPE_END,
434 };
435
436 /* IPv4 NVGRE MAC IPv4 */
437 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4[] = {
438         RTE_FLOW_ITEM_TYPE_ETH,
439         RTE_FLOW_ITEM_TYPE_IPV4,
440         RTE_FLOW_ITEM_TYPE_NVGRE,
441         RTE_FLOW_ITEM_TYPE_ETH,
442         RTE_FLOW_ITEM_TYPE_IPV4,
443         RTE_FLOW_ITEM_TYPE_END,
444 };
445
446 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_udp[] = {
447         RTE_FLOW_ITEM_TYPE_ETH,
448         RTE_FLOW_ITEM_TYPE_IPV4,
449         RTE_FLOW_ITEM_TYPE_NVGRE,
450         RTE_FLOW_ITEM_TYPE_ETH,
451         RTE_FLOW_ITEM_TYPE_IPV4,
452         RTE_FLOW_ITEM_TYPE_UDP,
453         RTE_FLOW_ITEM_TYPE_END,
454 };
455
456 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_tcp[] = {
457         RTE_FLOW_ITEM_TYPE_ETH,
458         RTE_FLOW_ITEM_TYPE_IPV4,
459         RTE_FLOW_ITEM_TYPE_NVGRE,
460         RTE_FLOW_ITEM_TYPE_ETH,
461         RTE_FLOW_ITEM_TYPE_IPV4,
462         RTE_FLOW_ITEM_TYPE_TCP,
463         RTE_FLOW_ITEM_TYPE_END,
464 };
465
466 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_sctp[] = {
467         RTE_FLOW_ITEM_TYPE_ETH,
468         RTE_FLOW_ITEM_TYPE_IPV4,
469         RTE_FLOW_ITEM_TYPE_NVGRE,
470         RTE_FLOW_ITEM_TYPE_ETH,
471         RTE_FLOW_ITEM_TYPE_IPV4,
472         RTE_FLOW_ITEM_TYPE_SCTP,
473         RTE_FLOW_ITEM_TYPE_END,
474 };
475
476 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_icmp[] = {
477         RTE_FLOW_ITEM_TYPE_ETH,
478         RTE_FLOW_ITEM_TYPE_IPV4,
479         RTE_FLOW_ITEM_TYPE_NVGRE,
480         RTE_FLOW_ITEM_TYPE_ETH,
481         RTE_FLOW_ITEM_TYPE_IPV4,
482         RTE_FLOW_ITEM_TYPE_ICMP,
483         RTE_FLOW_ITEM_TYPE_END,
484 };
485
486 /* IPv4 NVGRE IPv6 */
487 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6[] = {
488         RTE_FLOW_ITEM_TYPE_ETH,
489         RTE_FLOW_ITEM_TYPE_IPV4,
490         RTE_FLOW_ITEM_TYPE_NVGRE,
491         RTE_FLOW_ITEM_TYPE_IPV6,
492         RTE_FLOW_ITEM_TYPE_END,
493 };
494
495 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_udp[] = {
496         RTE_FLOW_ITEM_TYPE_ETH,
497         RTE_FLOW_ITEM_TYPE_IPV4,
498         RTE_FLOW_ITEM_TYPE_NVGRE,
499         RTE_FLOW_ITEM_TYPE_IPV6,
500         RTE_FLOW_ITEM_TYPE_UDP,
501         RTE_FLOW_ITEM_TYPE_END,
502 };
503
504 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_tcp[] = {
505         RTE_FLOW_ITEM_TYPE_ETH,
506         RTE_FLOW_ITEM_TYPE_IPV4,
507         RTE_FLOW_ITEM_TYPE_NVGRE,
508         RTE_FLOW_ITEM_TYPE_IPV6,
509         RTE_FLOW_ITEM_TYPE_TCP,
510         RTE_FLOW_ITEM_TYPE_END,
511 };
512
513 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_sctp[] = {
514         RTE_FLOW_ITEM_TYPE_ETH,
515         RTE_FLOW_ITEM_TYPE_IPV4,
516         RTE_FLOW_ITEM_TYPE_NVGRE,
517         RTE_FLOW_ITEM_TYPE_IPV6,
518         RTE_FLOW_ITEM_TYPE_SCTP,
519         RTE_FLOW_ITEM_TYPE_END,
520 };
521
522
523 /* IPv4 NVGRE MAC IPv6 */
524 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6[] = {
525         RTE_FLOW_ITEM_TYPE_ETH,
526         RTE_FLOW_ITEM_TYPE_IPV4,
527         RTE_FLOW_ITEM_TYPE_NVGRE,
528         RTE_FLOW_ITEM_TYPE_ETH,
529         RTE_FLOW_ITEM_TYPE_IPV6,
530         RTE_FLOW_ITEM_TYPE_END,
531 };
532
533 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_udp[] = {
534         RTE_FLOW_ITEM_TYPE_ETH,
535         RTE_FLOW_ITEM_TYPE_IPV4,
536         RTE_FLOW_ITEM_TYPE_NVGRE,
537         RTE_FLOW_ITEM_TYPE_ETH,
538         RTE_FLOW_ITEM_TYPE_IPV6,
539         RTE_FLOW_ITEM_TYPE_UDP,
540         RTE_FLOW_ITEM_TYPE_END,
541 };
542
543 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_tcp[] = {
544         RTE_FLOW_ITEM_TYPE_ETH,
545         RTE_FLOW_ITEM_TYPE_IPV4,
546         RTE_FLOW_ITEM_TYPE_NVGRE,
547         RTE_FLOW_ITEM_TYPE_ETH,
548         RTE_FLOW_ITEM_TYPE_IPV6,
549         RTE_FLOW_ITEM_TYPE_TCP,
550         RTE_FLOW_ITEM_TYPE_END,
551 };
552
553 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_sctp[] = {
554         RTE_FLOW_ITEM_TYPE_ETH,
555         RTE_FLOW_ITEM_TYPE_IPV4,
556         RTE_FLOW_ITEM_TYPE_NVGRE,
557         RTE_FLOW_ITEM_TYPE_ETH,
558         RTE_FLOW_ITEM_TYPE_IPV6,
559         RTE_FLOW_ITEM_TYPE_SCTP,
560         RTE_FLOW_ITEM_TYPE_END,
561 };
562
563 static struct ice_flow_pattern ice_supported_patterns[] = {
564         {pattern_ethertype, INSET_ETHER},
565         {pattern_ipv4, INSET_MAC_IPV4},
566         {pattern_ipv4_udp, INSET_MAC_IPV4_L4},
567         {pattern_ipv4_sctp, INSET_MAC_IPV4_L4},
568         {pattern_ipv4_tcp, INSET_MAC_IPV4_L4},
569         {pattern_ipv4_icmp, INSET_MAC_IPV4_ICMP},
570         {pattern_ipv6, INSET_MAC_IPV6},
571         {pattern_ipv6_udp, INSET_MAC_IPV6_L4},
572         {pattern_ipv6_sctp, INSET_MAC_IPV6_L4},
573         {pattern_ipv6_tcp, INSET_MAC_IPV6_L4},
574         {pattern_ipv6_icmp6, INSET_MAC_IPV6_ICMP},
575         {pattern_ipv4_vxlan_ipv4, INSET_TUNNEL_IPV4_TYPE1},
576         {pattern_ipv4_vxlan_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
577         {pattern_ipv4_vxlan_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
578         {pattern_ipv4_vxlan_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
579         {pattern_ipv4_vxlan_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
580         {pattern_ipv4_vxlan_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
581         {pattern_ipv4_vxlan_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
582         {pattern_ipv4_vxlan_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
583         {pattern_ipv4_vxlan_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
584         {pattern_ipv4_vxlan_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
585         {pattern_ipv4_vxlan_ipv6, INSET_TUNNEL_IPV6_TYPE1},
586         {pattern_ipv4_vxlan_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
587         {pattern_ipv4_vxlan_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
588         {pattern_ipv4_vxlan_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
589         {pattern_ipv4_vxlan_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
590         {pattern_ipv4_vxlan_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
591         {pattern_ipv4_vxlan_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
592         {pattern_ipv4_vxlan_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
593         {pattern_ipv4_vxlan_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
594         {pattern_ipv4_vxlan_eth_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
595         {pattern_ipv4_nvgre_ipv4, INSET_TUNNEL_IPV4_TYPE1},
596         {pattern_ipv4_nvgre_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
597         {pattern_ipv4_nvgre_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
598         {pattern_ipv4_nvgre_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
599         {pattern_ipv4_nvgre_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
600         {pattern_ipv4_nvgre_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
601         {pattern_ipv4_nvgre_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
602         {pattern_ipv4_nvgre_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
603         {pattern_ipv4_nvgre_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
604         {pattern_ipv4_nvgre_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
605         {pattern_ipv4_nvgre_ipv6, INSET_TUNNEL_IPV6_TYPE1},
606         {pattern_ipv4_nvgre_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
607         {pattern_ipv4_nvgre_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
608         {pattern_ipv4_nvgre_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
609         {pattern_ipv4_nvgre_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
610         {pattern_ipv4_nvgre_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
611         {pattern_ipv4_nvgre_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
612         {pattern_ipv4_nvgre_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
613 };
614
615 #endif