1953905f71c4a4bdec4466cf3263115b9eff6133
[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         ICE_INSET_TUN_ID)
88 #define INSET_TUNNEL_IPV4_TYPE2 ( \
89         ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
90         ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO | \
91         ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT | \
92         ICE_INSET_TUN_ID)
93 #define INSET_TUNNEL_IPV4_TYPE3 ( \
94         ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \
95         ICE_INSET_TUN_IPV4_TTL | ICE_INSET_ICMP | \
96         ICE_INSET_TUN_ID)
97 #define INSET_TUNNEL_IPV6_TYPE1 ( \
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_ID)
101 #define INSET_TUNNEL_IPV6_TYPE2 ( \
102         ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
103         ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO | \
104         ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT | \
105         ICE_INSET_TUN_ID)
106 #define INSET_TUNNEL_IPV6_TYPE3 ( \
107         ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \
108         ICE_INSET_TUN_IPV6_TTL | ICE_INSET_ICMP6 | \
109         ICE_INSET_TUN_ID)
110
111 /* L2 */
112 static enum rte_flow_item_type pattern_ethertype[] = {
113         RTE_FLOW_ITEM_TYPE_ETH,
114         RTE_FLOW_ITEM_TYPE_END,
115 };
116
117 /* non-tunnel IPv4 */
118 static enum rte_flow_item_type pattern_ipv4[] = {
119         RTE_FLOW_ITEM_TYPE_ETH,
120         RTE_FLOW_ITEM_TYPE_IPV4,
121         RTE_FLOW_ITEM_TYPE_END,
122 };
123
124 static enum rte_flow_item_type pattern_ipv4_udp[] = {
125         RTE_FLOW_ITEM_TYPE_ETH,
126         RTE_FLOW_ITEM_TYPE_IPV4,
127         RTE_FLOW_ITEM_TYPE_UDP,
128         RTE_FLOW_ITEM_TYPE_END,
129 };
130
131 static enum rte_flow_item_type pattern_ipv4_tcp[] = {
132         RTE_FLOW_ITEM_TYPE_ETH,
133         RTE_FLOW_ITEM_TYPE_IPV4,
134         RTE_FLOW_ITEM_TYPE_TCP,
135         RTE_FLOW_ITEM_TYPE_END,
136 };
137
138 static enum rte_flow_item_type pattern_ipv4_sctp[] = {
139         RTE_FLOW_ITEM_TYPE_ETH,
140         RTE_FLOW_ITEM_TYPE_IPV4,
141         RTE_FLOW_ITEM_TYPE_SCTP,
142         RTE_FLOW_ITEM_TYPE_END,
143 };
144
145 static enum rte_flow_item_type pattern_ipv4_icmp[] = {
146         RTE_FLOW_ITEM_TYPE_ETH,
147         RTE_FLOW_ITEM_TYPE_IPV4,
148         RTE_FLOW_ITEM_TYPE_ICMP,
149         RTE_FLOW_ITEM_TYPE_END,
150 };
151
152 /* non-tunnel IPv6 */
153 static enum rte_flow_item_type pattern_ipv6[] = {
154         RTE_FLOW_ITEM_TYPE_ETH,
155         RTE_FLOW_ITEM_TYPE_IPV6,
156         RTE_FLOW_ITEM_TYPE_END,
157 };
158
159 static enum rte_flow_item_type pattern_ipv6_udp[] = {
160         RTE_FLOW_ITEM_TYPE_ETH,
161         RTE_FLOW_ITEM_TYPE_IPV6,
162         RTE_FLOW_ITEM_TYPE_UDP,
163         RTE_FLOW_ITEM_TYPE_END,
164 };
165
166 static enum rte_flow_item_type pattern_ipv6_tcp[] = {
167         RTE_FLOW_ITEM_TYPE_ETH,
168         RTE_FLOW_ITEM_TYPE_IPV6,
169         RTE_FLOW_ITEM_TYPE_TCP,
170         RTE_FLOW_ITEM_TYPE_END,
171 };
172
173 static enum rte_flow_item_type pattern_ipv6_sctp[] = {
174         RTE_FLOW_ITEM_TYPE_ETH,
175         RTE_FLOW_ITEM_TYPE_IPV6,
176         RTE_FLOW_ITEM_TYPE_SCTP,
177         RTE_FLOW_ITEM_TYPE_END,
178 };
179
180 static enum rte_flow_item_type pattern_ipv6_icmp6[] = {
181         RTE_FLOW_ITEM_TYPE_ETH,
182         RTE_FLOW_ITEM_TYPE_IPV6,
183         RTE_FLOW_ITEM_TYPE_ICMP6,
184         RTE_FLOW_ITEM_TYPE_END,
185 };
186
187 /* IPv4 VXLAN IPv4 */
188 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4[] = {
189         RTE_FLOW_ITEM_TYPE_ETH,
190         RTE_FLOW_ITEM_TYPE_IPV4,
191         RTE_FLOW_ITEM_TYPE_UDP,
192         RTE_FLOW_ITEM_TYPE_VXLAN,
193         RTE_FLOW_ITEM_TYPE_IPV4,
194         RTE_FLOW_ITEM_TYPE_END,
195 };
196
197 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_udp[] = {
198         RTE_FLOW_ITEM_TYPE_ETH,
199         RTE_FLOW_ITEM_TYPE_IPV4,
200         RTE_FLOW_ITEM_TYPE_UDP,
201         RTE_FLOW_ITEM_TYPE_VXLAN,
202         RTE_FLOW_ITEM_TYPE_IPV4,
203         RTE_FLOW_ITEM_TYPE_UDP,
204         RTE_FLOW_ITEM_TYPE_END,
205 };
206
207 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_tcp[] = {
208         RTE_FLOW_ITEM_TYPE_ETH,
209         RTE_FLOW_ITEM_TYPE_IPV4,
210         RTE_FLOW_ITEM_TYPE_UDP,
211         RTE_FLOW_ITEM_TYPE_VXLAN,
212         RTE_FLOW_ITEM_TYPE_IPV4,
213         RTE_FLOW_ITEM_TYPE_TCP,
214         RTE_FLOW_ITEM_TYPE_END,
215 };
216
217 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_sctp[] = {
218         RTE_FLOW_ITEM_TYPE_ETH,
219         RTE_FLOW_ITEM_TYPE_IPV4,
220         RTE_FLOW_ITEM_TYPE_UDP,
221         RTE_FLOW_ITEM_TYPE_VXLAN,
222         RTE_FLOW_ITEM_TYPE_IPV4,
223         RTE_FLOW_ITEM_TYPE_SCTP,
224         RTE_FLOW_ITEM_TYPE_END,
225 };
226
227 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_icmp[] = {
228         RTE_FLOW_ITEM_TYPE_ETH,
229         RTE_FLOW_ITEM_TYPE_IPV4,
230         RTE_FLOW_ITEM_TYPE_UDP,
231         RTE_FLOW_ITEM_TYPE_VXLAN,
232         RTE_FLOW_ITEM_TYPE_IPV4,
233         RTE_FLOW_ITEM_TYPE_ICMP,
234         RTE_FLOW_ITEM_TYPE_END,
235 };
236
237 /* IPv4 VXLAN MAC IPv4 */
238 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4[] = {
239         RTE_FLOW_ITEM_TYPE_ETH,
240         RTE_FLOW_ITEM_TYPE_IPV4,
241         RTE_FLOW_ITEM_TYPE_UDP,
242         RTE_FLOW_ITEM_TYPE_VXLAN,
243         RTE_FLOW_ITEM_TYPE_ETH,
244         RTE_FLOW_ITEM_TYPE_IPV4,
245         RTE_FLOW_ITEM_TYPE_END,
246 };
247
248 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_udp[] = {
249         RTE_FLOW_ITEM_TYPE_ETH,
250         RTE_FLOW_ITEM_TYPE_IPV4,
251         RTE_FLOW_ITEM_TYPE_UDP,
252         RTE_FLOW_ITEM_TYPE_VXLAN,
253         RTE_FLOW_ITEM_TYPE_ETH,
254         RTE_FLOW_ITEM_TYPE_IPV4,
255         RTE_FLOW_ITEM_TYPE_UDP,
256         RTE_FLOW_ITEM_TYPE_END,
257 };
258
259 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_tcp[] = {
260         RTE_FLOW_ITEM_TYPE_ETH,
261         RTE_FLOW_ITEM_TYPE_IPV4,
262         RTE_FLOW_ITEM_TYPE_UDP,
263         RTE_FLOW_ITEM_TYPE_VXLAN,
264         RTE_FLOW_ITEM_TYPE_ETH,
265         RTE_FLOW_ITEM_TYPE_IPV4,
266         RTE_FLOW_ITEM_TYPE_TCP,
267         RTE_FLOW_ITEM_TYPE_END,
268 };
269
270 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_sctp[] = {
271         RTE_FLOW_ITEM_TYPE_ETH,
272         RTE_FLOW_ITEM_TYPE_IPV4,
273         RTE_FLOW_ITEM_TYPE_UDP,
274         RTE_FLOW_ITEM_TYPE_VXLAN,
275         RTE_FLOW_ITEM_TYPE_ETH,
276         RTE_FLOW_ITEM_TYPE_IPV4,
277         RTE_FLOW_ITEM_TYPE_SCTP,
278         RTE_FLOW_ITEM_TYPE_END,
279 };
280
281 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_icmp[] = {
282         RTE_FLOW_ITEM_TYPE_ETH,
283         RTE_FLOW_ITEM_TYPE_IPV4,
284         RTE_FLOW_ITEM_TYPE_UDP,
285         RTE_FLOW_ITEM_TYPE_VXLAN,
286         RTE_FLOW_ITEM_TYPE_ETH,
287         RTE_FLOW_ITEM_TYPE_IPV4,
288         RTE_FLOW_ITEM_TYPE_ICMP,
289         RTE_FLOW_ITEM_TYPE_END,
290 };
291
292 /* IPv4 VXLAN IPv6 */
293 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6[] = {
294         RTE_FLOW_ITEM_TYPE_ETH,
295         RTE_FLOW_ITEM_TYPE_IPV4,
296         RTE_FLOW_ITEM_TYPE_UDP,
297         RTE_FLOW_ITEM_TYPE_VXLAN,
298         RTE_FLOW_ITEM_TYPE_IPV6,
299         RTE_FLOW_ITEM_TYPE_END,
300 };
301
302 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_udp[] = {
303         RTE_FLOW_ITEM_TYPE_ETH,
304         RTE_FLOW_ITEM_TYPE_IPV4,
305         RTE_FLOW_ITEM_TYPE_UDP,
306         RTE_FLOW_ITEM_TYPE_VXLAN,
307         RTE_FLOW_ITEM_TYPE_IPV6,
308         RTE_FLOW_ITEM_TYPE_UDP,
309         RTE_FLOW_ITEM_TYPE_END,
310 };
311
312 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_tcp[] = {
313         RTE_FLOW_ITEM_TYPE_ETH,
314         RTE_FLOW_ITEM_TYPE_IPV4,
315         RTE_FLOW_ITEM_TYPE_UDP,
316         RTE_FLOW_ITEM_TYPE_VXLAN,
317         RTE_FLOW_ITEM_TYPE_IPV6,
318         RTE_FLOW_ITEM_TYPE_TCP,
319         RTE_FLOW_ITEM_TYPE_END,
320 };
321
322 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_sctp[] = {
323         RTE_FLOW_ITEM_TYPE_ETH,
324         RTE_FLOW_ITEM_TYPE_IPV4,
325         RTE_FLOW_ITEM_TYPE_UDP,
326         RTE_FLOW_ITEM_TYPE_VXLAN,
327         RTE_FLOW_ITEM_TYPE_IPV6,
328         RTE_FLOW_ITEM_TYPE_SCTP,
329         RTE_FLOW_ITEM_TYPE_END,
330 };
331
332 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_icmp[] = {
333         RTE_FLOW_ITEM_TYPE_ETH,
334         RTE_FLOW_ITEM_TYPE_IPV4,
335         RTE_FLOW_ITEM_TYPE_UDP,
336         RTE_FLOW_ITEM_TYPE_VXLAN,
337         RTE_FLOW_ITEM_TYPE_IPV6,
338         RTE_FLOW_ITEM_TYPE_ICMP,
339         RTE_FLOW_ITEM_TYPE_END,
340 };
341
342 /* IPv4 VXLAN MAC IPv6 */
343 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6[] = {
344         RTE_FLOW_ITEM_TYPE_ETH,
345         RTE_FLOW_ITEM_TYPE_IPV4,
346         RTE_FLOW_ITEM_TYPE_UDP,
347         RTE_FLOW_ITEM_TYPE_VXLAN,
348         RTE_FLOW_ITEM_TYPE_ETH,
349         RTE_FLOW_ITEM_TYPE_IPV6,
350         RTE_FLOW_ITEM_TYPE_END,
351 };
352
353 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_udp[] = {
354         RTE_FLOW_ITEM_TYPE_ETH,
355         RTE_FLOW_ITEM_TYPE_IPV4,
356         RTE_FLOW_ITEM_TYPE_UDP,
357         RTE_FLOW_ITEM_TYPE_VXLAN,
358         RTE_FLOW_ITEM_TYPE_ETH,
359         RTE_FLOW_ITEM_TYPE_IPV6,
360         RTE_FLOW_ITEM_TYPE_UDP,
361         RTE_FLOW_ITEM_TYPE_END,
362 };
363
364 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_tcp[] = {
365         RTE_FLOW_ITEM_TYPE_ETH,
366         RTE_FLOW_ITEM_TYPE_IPV4,
367         RTE_FLOW_ITEM_TYPE_UDP,
368         RTE_FLOW_ITEM_TYPE_VXLAN,
369         RTE_FLOW_ITEM_TYPE_ETH,
370         RTE_FLOW_ITEM_TYPE_IPV6,
371         RTE_FLOW_ITEM_TYPE_TCP,
372         RTE_FLOW_ITEM_TYPE_END,
373 };
374
375 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_sctp[] = {
376         RTE_FLOW_ITEM_TYPE_ETH,
377         RTE_FLOW_ITEM_TYPE_IPV4,
378         RTE_FLOW_ITEM_TYPE_UDP,
379         RTE_FLOW_ITEM_TYPE_VXLAN,
380         RTE_FLOW_ITEM_TYPE_ETH,
381         RTE_FLOW_ITEM_TYPE_IPV6,
382         RTE_FLOW_ITEM_TYPE_SCTP,
383         RTE_FLOW_ITEM_TYPE_END,
384 };
385
386 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_icmp[] = {
387         RTE_FLOW_ITEM_TYPE_ETH,
388         RTE_FLOW_ITEM_TYPE_IPV4,
389         RTE_FLOW_ITEM_TYPE_UDP,
390         RTE_FLOW_ITEM_TYPE_VXLAN,
391         RTE_FLOW_ITEM_TYPE_ETH,
392         RTE_FLOW_ITEM_TYPE_IPV6,
393         RTE_FLOW_ITEM_TYPE_ICMP,
394         RTE_FLOW_ITEM_TYPE_END,
395 };
396
397 /* IPv4 NVGRE IPv4 */
398 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4[] = {
399         RTE_FLOW_ITEM_TYPE_ETH,
400         RTE_FLOW_ITEM_TYPE_IPV4,
401         RTE_FLOW_ITEM_TYPE_NVGRE,
402         RTE_FLOW_ITEM_TYPE_IPV4,
403         RTE_FLOW_ITEM_TYPE_END,
404 };
405
406 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_udp[] = {
407         RTE_FLOW_ITEM_TYPE_ETH,
408         RTE_FLOW_ITEM_TYPE_IPV4,
409         RTE_FLOW_ITEM_TYPE_NVGRE,
410         RTE_FLOW_ITEM_TYPE_IPV4,
411         RTE_FLOW_ITEM_TYPE_UDP,
412         RTE_FLOW_ITEM_TYPE_END,
413 };
414
415 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_tcp[] = {
416         RTE_FLOW_ITEM_TYPE_ETH,
417         RTE_FLOW_ITEM_TYPE_IPV4,
418         RTE_FLOW_ITEM_TYPE_NVGRE,
419         RTE_FLOW_ITEM_TYPE_IPV4,
420         RTE_FLOW_ITEM_TYPE_TCP,
421         RTE_FLOW_ITEM_TYPE_END,
422 };
423
424 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_sctp[] = {
425         RTE_FLOW_ITEM_TYPE_ETH,
426         RTE_FLOW_ITEM_TYPE_IPV4,
427         RTE_FLOW_ITEM_TYPE_NVGRE,
428         RTE_FLOW_ITEM_TYPE_IPV4,
429         RTE_FLOW_ITEM_TYPE_SCTP,
430         RTE_FLOW_ITEM_TYPE_END,
431 };
432
433 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_icmp[] = {
434         RTE_FLOW_ITEM_TYPE_ETH,
435         RTE_FLOW_ITEM_TYPE_IPV4,
436         RTE_FLOW_ITEM_TYPE_NVGRE,
437         RTE_FLOW_ITEM_TYPE_IPV4,
438         RTE_FLOW_ITEM_TYPE_ICMP,
439         RTE_FLOW_ITEM_TYPE_END,
440 };
441
442 /* IPv4 NVGRE MAC IPv4 */
443 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4[] = {
444         RTE_FLOW_ITEM_TYPE_ETH,
445         RTE_FLOW_ITEM_TYPE_IPV4,
446         RTE_FLOW_ITEM_TYPE_NVGRE,
447         RTE_FLOW_ITEM_TYPE_ETH,
448         RTE_FLOW_ITEM_TYPE_IPV4,
449         RTE_FLOW_ITEM_TYPE_END,
450 };
451
452 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_udp[] = {
453         RTE_FLOW_ITEM_TYPE_ETH,
454         RTE_FLOW_ITEM_TYPE_IPV4,
455         RTE_FLOW_ITEM_TYPE_NVGRE,
456         RTE_FLOW_ITEM_TYPE_ETH,
457         RTE_FLOW_ITEM_TYPE_IPV4,
458         RTE_FLOW_ITEM_TYPE_UDP,
459         RTE_FLOW_ITEM_TYPE_END,
460 };
461
462 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_tcp[] = {
463         RTE_FLOW_ITEM_TYPE_ETH,
464         RTE_FLOW_ITEM_TYPE_IPV4,
465         RTE_FLOW_ITEM_TYPE_NVGRE,
466         RTE_FLOW_ITEM_TYPE_ETH,
467         RTE_FLOW_ITEM_TYPE_IPV4,
468         RTE_FLOW_ITEM_TYPE_TCP,
469         RTE_FLOW_ITEM_TYPE_END,
470 };
471
472 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_sctp[] = {
473         RTE_FLOW_ITEM_TYPE_ETH,
474         RTE_FLOW_ITEM_TYPE_IPV4,
475         RTE_FLOW_ITEM_TYPE_NVGRE,
476         RTE_FLOW_ITEM_TYPE_ETH,
477         RTE_FLOW_ITEM_TYPE_IPV4,
478         RTE_FLOW_ITEM_TYPE_SCTP,
479         RTE_FLOW_ITEM_TYPE_END,
480 };
481
482 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_icmp[] = {
483         RTE_FLOW_ITEM_TYPE_ETH,
484         RTE_FLOW_ITEM_TYPE_IPV4,
485         RTE_FLOW_ITEM_TYPE_NVGRE,
486         RTE_FLOW_ITEM_TYPE_ETH,
487         RTE_FLOW_ITEM_TYPE_IPV4,
488         RTE_FLOW_ITEM_TYPE_ICMP,
489         RTE_FLOW_ITEM_TYPE_END,
490 };
491
492 /* IPv4 NVGRE IPv6 */
493 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6[] = {
494         RTE_FLOW_ITEM_TYPE_ETH,
495         RTE_FLOW_ITEM_TYPE_IPV4,
496         RTE_FLOW_ITEM_TYPE_NVGRE,
497         RTE_FLOW_ITEM_TYPE_IPV6,
498         RTE_FLOW_ITEM_TYPE_END,
499 };
500
501 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_udp[] = {
502         RTE_FLOW_ITEM_TYPE_ETH,
503         RTE_FLOW_ITEM_TYPE_IPV4,
504         RTE_FLOW_ITEM_TYPE_NVGRE,
505         RTE_FLOW_ITEM_TYPE_IPV6,
506         RTE_FLOW_ITEM_TYPE_UDP,
507         RTE_FLOW_ITEM_TYPE_END,
508 };
509
510 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_tcp[] = {
511         RTE_FLOW_ITEM_TYPE_ETH,
512         RTE_FLOW_ITEM_TYPE_IPV4,
513         RTE_FLOW_ITEM_TYPE_NVGRE,
514         RTE_FLOW_ITEM_TYPE_IPV6,
515         RTE_FLOW_ITEM_TYPE_TCP,
516         RTE_FLOW_ITEM_TYPE_END,
517 };
518
519 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_sctp[] = {
520         RTE_FLOW_ITEM_TYPE_ETH,
521         RTE_FLOW_ITEM_TYPE_IPV4,
522         RTE_FLOW_ITEM_TYPE_NVGRE,
523         RTE_FLOW_ITEM_TYPE_IPV6,
524         RTE_FLOW_ITEM_TYPE_SCTP,
525         RTE_FLOW_ITEM_TYPE_END,
526 };
527
528
529 /* IPv4 NVGRE MAC IPv6 */
530 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6[] = {
531         RTE_FLOW_ITEM_TYPE_ETH,
532         RTE_FLOW_ITEM_TYPE_IPV4,
533         RTE_FLOW_ITEM_TYPE_NVGRE,
534         RTE_FLOW_ITEM_TYPE_ETH,
535         RTE_FLOW_ITEM_TYPE_IPV6,
536         RTE_FLOW_ITEM_TYPE_END,
537 };
538
539 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_udp[] = {
540         RTE_FLOW_ITEM_TYPE_ETH,
541         RTE_FLOW_ITEM_TYPE_IPV4,
542         RTE_FLOW_ITEM_TYPE_NVGRE,
543         RTE_FLOW_ITEM_TYPE_ETH,
544         RTE_FLOW_ITEM_TYPE_IPV6,
545         RTE_FLOW_ITEM_TYPE_UDP,
546         RTE_FLOW_ITEM_TYPE_END,
547 };
548
549 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_tcp[] = {
550         RTE_FLOW_ITEM_TYPE_ETH,
551         RTE_FLOW_ITEM_TYPE_IPV4,
552         RTE_FLOW_ITEM_TYPE_NVGRE,
553         RTE_FLOW_ITEM_TYPE_ETH,
554         RTE_FLOW_ITEM_TYPE_IPV6,
555         RTE_FLOW_ITEM_TYPE_TCP,
556         RTE_FLOW_ITEM_TYPE_END,
557 };
558
559 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_sctp[] = {
560         RTE_FLOW_ITEM_TYPE_ETH,
561         RTE_FLOW_ITEM_TYPE_IPV4,
562         RTE_FLOW_ITEM_TYPE_NVGRE,
563         RTE_FLOW_ITEM_TYPE_ETH,
564         RTE_FLOW_ITEM_TYPE_IPV6,
565         RTE_FLOW_ITEM_TYPE_SCTP,
566         RTE_FLOW_ITEM_TYPE_END,
567 };
568
569 static struct ice_flow_pattern ice_supported_patterns[] = {
570         {pattern_ethertype, INSET_ETHER},
571         {pattern_ipv4, INSET_MAC_IPV4},
572         {pattern_ipv4_udp, INSET_MAC_IPV4_L4},
573         {pattern_ipv4_sctp, INSET_MAC_IPV4_L4},
574         {pattern_ipv4_tcp, INSET_MAC_IPV4_L4},
575         {pattern_ipv4_icmp, INSET_MAC_IPV4_ICMP},
576         {pattern_ipv6, INSET_MAC_IPV6},
577         {pattern_ipv6_udp, INSET_MAC_IPV6_L4},
578         {pattern_ipv6_sctp, INSET_MAC_IPV6_L4},
579         {pattern_ipv6_tcp, INSET_MAC_IPV6_L4},
580         {pattern_ipv6_icmp6, INSET_MAC_IPV6_ICMP},
581         {pattern_ipv4_vxlan_ipv4, INSET_TUNNEL_IPV4_TYPE1},
582         {pattern_ipv4_vxlan_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
583         {pattern_ipv4_vxlan_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
584         {pattern_ipv4_vxlan_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
585         {pattern_ipv4_vxlan_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
586         {pattern_ipv4_vxlan_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
587         {pattern_ipv4_vxlan_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
588         {pattern_ipv4_vxlan_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
589         {pattern_ipv4_vxlan_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
590         {pattern_ipv4_vxlan_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
591         {pattern_ipv4_vxlan_ipv6, INSET_TUNNEL_IPV6_TYPE1},
592         {pattern_ipv4_vxlan_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
593         {pattern_ipv4_vxlan_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
594         {pattern_ipv4_vxlan_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
595         {pattern_ipv4_vxlan_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
596         {pattern_ipv4_vxlan_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
597         {pattern_ipv4_vxlan_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
598         {pattern_ipv4_vxlan_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
599         {pattern_ipv4_vxlan_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
600         {pattern_ipv4_vxlan_eth_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3},
601         {pattern_ipv4_nvgre_ipv4, INSET_TUNNEL_IPV4_TYPE1},
602         {pattern_ipv4_nvgre_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
603         {pattern_ipv4_nvgre_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
604         {pattern_ipv4_nvgre_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
605         {pattern_ipv4_nvgre_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
606         {pattern_ipv4_nvgre_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1},
607         {pattern_ipv4_nvgre_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2},
608         {pattern_ipv4_nvgre_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2},
609         {pattern_ipv4_nvgre_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2},
610         {pattern_ipv4_nvgre_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3},
611         {pattern_ipv4_nvgre_ipv6, INSET_TUNNEL_IPV6_TYPE1},
612         {pattern_ipv4_nvgre_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
613         {pattern_ipv4_nvgre_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
614         {pattern_ipv4_nvgre_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
615         {pattern_ipv4_nvgre_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1},
616         {pattern_ipv4_nvgre_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2},
617         {pattern_ipv4_nvgre_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2},
618         {pattern_ipv4_nvgre_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2},
619 };
620
621 #endif