1
2
3
4
5#ifndef _ICE_GENERIC_FLOW_H_
6#define _ICE_GENERIC_FLOW_H_
7
8#include <rte_flow_driver.h>
9
10
11
12#define ICE_PROT_MAC_INNER (1ULL << 1)
13#define ICE_PROT_MAC_OUTER (1ULL << 2)
14#define ICE_PROT_VLAN_INNER (1ULL << 3)
15#define ICE_PROT_VLAN_OUTER (1ULL << 4)
16#define ICE_PROT_IPV4_INNER (1ULL << 5)
17#define ICE_PROT_IPV4_OUTER (1ULL << 6)
18#define ICE_PROT_IPV6_INNER (1ULL << 7)
19#define ICE_PROT_IPV6_OUTER (1ULL << 8)
20#define ICE_PROT_TCP_INNER (1ULL << 9)
21#define ICE_PROT_TCP_OUTER (1ULL << 10)
22#define ICE_PROT_UDP_INNER (1ULL << 11)
23#define ICE_PROT_UDP_OUTER (1ULL << 12)
24#define ICE_PROT_SCTP_INNER (1ULL << 13)
25#define ICE_PROT_SCTP_OUTER (1ULL << 14)
26#define ICE_PROT_ICMP4_INNER (1ULL << 15)
27#define ICE_PROT_ICMP4_OUTER (1ULL << 16)
28#define ICE_PROT_ICMP6_INNER (1ULL << 17)
29#define ICE_PROT_ICMP6_OUTER (1ULL << 18)
30#define ICE_PROT_VXLAN (1ULL << 19)
31#define ICE_PROT_NVGRE (1ULL << 20)
32#define ICE_PROT_GTPU (1ULL << 21)
33#define ICE_PROT_PPPOE_S (1ULL << 22)
34#define ICE_PROT_ESP (1ULL << 23)
35#define ICE_PROT_AH (1ULL << 24)
36#define ICE_PROT_L2TPV3OIP (1ULL << 25)
37#define ICE_PROT_PFCP (1ULL << 26)
38
39
40
41#define ICE_SMAC (1ULL << 63)
42#define ICE_DMAC (1ULL << 62)
43#define ICE_ETHERTYPE (1ULL << 61)
44#define ICE_IP_SRC (1ULL << 60)
45#define ICE_IP_DST (1ULL << 59)
46#define ICE_IP_PROTO (1ULL << 58)
47#define ICE_IP_TTL (1ULL << 57)
48#define ICE_IP_TOS (1ULL << 56)
49#define ICE_SPORT (1ULL << 55)
50#define ICE_DPORT (1ULL << 54)
51#define ICE_ICMP_TYPE (1ULL << 53)
52#define ICE_ICMP_CODE (1ULL << 52)
53#define ICE_VXLAN_VNI (1ULL << 51)
54#define ICE_NVGRE_TNI (1ULL << 50)
55#define ICE_GTPU_TEID (1ULL << 49)
56#define ICE_GTPU_QFI (1ULL << 48)
57#define ICE_PPPOE_SESSION (1ULL << 47)
58#define ICE_PPPOE_PROTO (1ULL << 46)
59#define ICE_ESP_SPI (1ULL << 45)
60#define ICE_AH_SPI (1ULL << 44)
61#define ICE_L2TPV3OIP_SESSION_ID (1ULL << 43)
62#define ICE_PFCP_SEID (1ULL << 42)
63#define ICE_PFCP_S_FIELD (1ULL << 41)
64
65
66
67#define ICE_INSET_NONE 0ULL
68
69
70
71#define ICE_INSET_SMAC (ICE_PROT_MAC_OUTER | ICE_SMAC)
72#define ICE_INSET_DMAC (ICE_PROT_MAC_OUTER | ICE_DMAC)
73#define ICE_INSET_VLAN_INNER (ICE_PROT_VLAN_INNER)
74#define ICE_INSET_VLAN_OUTER (ICE_PROT_VLAN_OUTER)
75#define ICE_INSET_ETHERTYPE (ICE_ETHERTYPE)
76
77#define ICE_INSET_IPV4_SRC \
78 (ICE_PROT_IPV4_OUTER | ICE_IP_SRC)
79#define ICE_INSET_IPV4_DST \
80 (ICE_PROT_IPV4_OUTER | ICE_IP_DST)
81#define ICE_INSET_IPV4_TOS \
82 (ICE_PROT_IPV4_OUTER | ICE_IP_TOS)
83#define ICE_INSET_IPV4_PROTO \
84 (ICE_PROT_IPV4_OUTER | ICE_IP_PROTO)
85#define ICE_INSET_IPV4_TTL \
86 (ICE_PROT_IPV4_OUTER | ICE_IP_TTL)
87#define ICE_INSET_IPV6_SRC \
88 (ICE_PROT_IPV6_OUTER | ICE_IP_SRC)
89#define ICE_INSET_IPV6_DST \
90 (ICE_PROT_IPV6_OUTER | ICE_IP_DST)
91#define ICE_INSET_IPV6_NEXT_HDR \
92 (ICE_PROT_IPV6_OUTER | ICE_IP_PROTO)
93#define ICE_INSET_IPV6_HOP_LIMIT \
94 (ICE_PROT_IPV6_OUTER | ICE_IP_TTL)
95#define ICE_INSET_IPV6_TC \
96 (ICE_PROT_IPV6_OUTER | ICE_IP_TOS)
97
98#define ICE_INSET_TCP_SRC_PORT \
99 (ICE_PROT_TCP_OUTER | ICE_SPORT)
100#define ICE_INSET_TCP_DST_PORT \
101 (ICE_PROT_TCP_OUTER | ICE_DPORT)
102#define ICE_INSET_UDP_SRC_PORT \
103 (ICE_PROT_UDP_OUTER | ICE_SPORT)
104#define ICE_INSET_UDP_DST_PORT \
105 (ICE_PROT_UDP_OUTER | ICE_DPORT)
106#define ICE_INSET_SCTP_SRC_PORT \
107 (ICE_PROT_SCTP_OUTER | ICE_SPORT)
108#define ICE_INSET_SCTP_DST_PORT \
109 (ICE_PROT_SCTP_OUTER | ICE_DPORT)
110#define ICE_INSET_ICMP4_SRC_PORT \
111 (ICE_PROT_ICMP4_OUTER | ICE_SPORT)
112#define ICE_INSET_ICMP4_DST_PORT \
113 (ICE_PROT_ICMP4_OUTER | ICE_DPORT)
114#define ICE_INSET_ICMP6_SRC_PORT \
115 (ICE_PROT_ICMP6_OUTER | ICE_SPORT)
116#define ICE_INSET_ICMP6_DST_PORT \
117 (ICE_PROT_ICMP6_OUTER | ICE_DPORT)
118#define ICE_INSET_ICMP4_TYPE \
119 (ICE_PROT_ICMP4_OUTER | ICE_ICMP_TYPE)
120#define ICE_INSET_ICMP4_CODE \
121 (ICE_PROT_ICMP4_OUTER | ICE_ICMP_CODE)
122#define ICE_INSET_ICMP6_TYPE \
123 (ICE_PROT_ICMP6_OUTER | ICE_ICMP_TYPE)
124#define ICE_INSET_ICMP6_CODE \
125 (ICE_PROT_ICMP6_OUTER | ICE_ICMP_CODE)
126
127
128
129#define ICE_INSET_TUN_SMAC \
130 (ICE_PROT_MAC_INNER | ICE_SMAC)
131#define ICE_INSET_TUN_DMAC \
132 (ICE_PROT_MAC_INNER | ICE_DMAC)
133
134#define ICE_INSET_TUN_IPV4_SRC \
135 (ICE_PROT_IPV4_INNER | ICE_IP_SRC)
136#define ICE_INSET_TUN_IPV4_DST \
137 (ICE_PROT_IPV4_INNER | ICE_IP_DST)
138#define ICE_INSET_TUN_IPV4_TTL \
139 (ICE_PROT_IPV4_INNER | ICE_IP_TTL)
140#define ICE_INSET_TUN_IPV4_PROTO \
141 (ICE_PROT_IPV4_INNER | ICE_IP_PROTO)
142#define ICE_INSET_TUN_IPV4_TOS \
143 (ICE_PROT_IPV4_INNER | ICE_IP_TOS)
144#define ICE_INSET_TUN_IPV6_SRC \
145 (ICE_PROT_IPV6_INNER | ICE_IP_SRC)
146#define ICE_INSET_TUN_IPV6_DST \
147 (ICE_PROT_IPV6_INNER | ICE_IP_DST)
148#define ICE_INSET_TUN_IPV6_HOP_LIMIT \
149 (ICE_PROT_IPV6_INNER | ICE_IP_TTL)
150#define ICE_INSET_TUN_IPV6_NEXT_HDR \
151 (ICE_PROT_IPV6_INNER | ICE_IP_PROTO)
152#define ICE_INSET_TUN_IPV6_TC \
153 (ICE_PROT_IPV6_INNER | ICE_IP_TOS)
154
155#define ICE_INSET_TUN_TCP_SRC_PORT \
156 (ICE_PROT_TCP_INNER | ICE_SPORT)
157#define ICE_INSET_TUN_TCP_DST_PORT \
158 (ICE_PROT_TCP_INNER | ICE_DPORT)
159#define ICE_INSET_TUN_UDP_SRC_PORT \
160 (ICE_PROT_UDP_INNER | ICE_SPORT)
161#define ICE_INSET_TUN_UDP_DST_PORT \
162 (ICE_PROT_UDP_INNER | ICE_DPORT)
163#define ICE_INSET_TUN_SCTP_SRC_PORT \
164 (ICE_PROT_SCTP_INNER | ICE_SPORT)
165#define ICE_INSET_TUN_SCTP_DST_PORT \
166 (ICE_PROT_SCTP_INNER | ICE_DPORT)
167#define ICE_INSET_TUN_ICMP4_SRC_PORT \
168 (ICE_PROT_ICMP4_INNER | ICE_SPORT)
169#define ICE_INSET_TUN_ICMP4_DST_PORT \
170 (ICE_PROT_ICMP4_INNER | ICE_DPORT)
171#define ICE_INSET_TUN_ICMP6_SRC_PORT \
172 (ICE_PROT_ICMP6_INNER | ICE_SPORT)
173#define ICE_INSET_TUN_ICMP6_DST_PORT \
174 (ICE_PROT_ICMP6_INNER | ICE_DPORT)
175#define ICE_INSET_TUN_ICMP4_TYPE \
176 (ICE_PROT_ICMP4_INNER | ICE_ICMP_TYPE)
177#define ICE_INSET_TUN_ICMP4_CODE \
178 (ICE_PROT_ICMP4_INNER | ICE_ICMP_CODE)
179#define ICE_INSET_TUN_ICMP6_TYPE \
180 (ICE_PROT_ICMP6_INNER | ICE_ICMP_TYPE)
181#define ICE_INSET_TUN_ICMP6_CODE \
182 (ICE_PROT_ICMP6_INNER | ICE_ICMP_CODE)
183
184#define ICE_INSET_TUN_VXLAN_VNI \
185 (ICE_PROT_VXLAN | ICE_VXLAN_VNI)
186#define ICE_INSET_TUN_NVGRE_TNI \
187 (ICE_PROT_NVGRE | ICE_NVGRE_TNI)
188#define ICE_INSET_GTPU_TEID \
189 (ICE_PROT_GTPU | ICE_GTPU_TEID)
190#define ICE_INSET_GTPU_QFI \
191 (ICE_PROT_GTPU | ICE_GTPU_QFI)
192#define ICE_INSET_PPPOE_SESSION \
193 (ICE_PROT_PPPOE_S | ICE_PPPOE_SESSION)
194#define ICE_INSET_PPPOE_PROTO \
195 (ICE_PROT_PPPOE_S | ICE_PPPOE_PROTO)
196#define ICE_INSET_ESP_SPI \
197 (ICE_PROT_ESP | ICE_ESP_SPI)
198#define ICE_INSET_AH_SPI \
199 (ICE_PROT_AH | ICE_AH_SPI)
200#define ICE_INSET_L2TPV3OIP_SESSION_ID \
201 (ICE_PROT_L2TPV3OIP | ICE_L2TPV3OIP_SESSION_ID)
202#define ICE_INSET_PFCP_S_FIELD \
203 (ICE_PROT_PFCP | ICE_PFCP_S_FIELD)
204#define ICE_INSET_PFCP_SEID \
205 (ICE_PROT_PFCP | ICE_PFCP_S_FIELD | ICE_PFCP_SEID)
206
207
208extern enum rte_flow_item_type pattern_empty[];
209
210
211extern enum rte_flow_item_type pattern_ethertype[];
212extern enum rte_flow_item_type pattern_ethertype_vlan[];
213extern enum rte_flow_item_type pattern_ethertype_qinq[];
214
215
216extern enum rte_flow_item_type pattern_eth_arp[];
217
218
219extern enum rte_flow_item_type pattern_eth_ipv4[];
220extern enum rte_flow_item_type pattern_eth_vlan_ipv4[];
221extern enum rte_flow_item_type pattern_eth_qinq_ipv4[];
222extern enum rte_flow_item_type pattern_eth_ipv4_udp[];
223extern enum rte_flow_item_type pattern_eth_vlan_ipv4_udp[];
224extern enum rte_flow_item_type pattern_eth_qinq_ipv4_udp[];
225extern enum rte_flow_item_type pattern_eth_ipv4_tcp[];
226extern enum rte_flow_item_type pattern_eth_vlan_ipv4_tcp[];
227extern enum rte_flow_item_type pattern_eth_qinq_ipv4_tcp[];
228extern enum rte_flow_item_type pattern_eth_ipv4_sctp[];
229extern enum rte_flow_item_type pattern_eth_vlan_ipv4_sctp[];
230extern enum rte_flow_item_type pattern_eth_qinq_ipv4_sctp[];
231extern enum rte_flow_item_type pattern_eth_ipv4_icmp[];
232extern enum rte_flow_item_type pattern_eth_vlan_ipv4_icmp[];
233extern enum rte_flow_item_type pattern_eth_qinq_ipv4_icmp[];
234
235
236extern enum rte_flow_item_type pattern_eth_ipv6[];
237extern enum rte_flow_item_type pattern_eth_vlan_ipv6[];
238extern enum rte_flow_item_type pattern_eth_qinq_ipv6[];
239extern enum rte_flow_item_type pattern_eth_ipv6_udp[];
240extern enum rte_flow_item_type pattern_eth_vlan_ipv6_udp[];
241extern enum rte_flow_item_type pattern_eth_qinq_ipv6_udp[];
242extern enum rte_flow_item_type pattern_eth_ipv6_tcp[];
243extern enum rte_flow_item_type pattern_eth_vlan_ipv6_tcp[];
244extern enum rte_flow_item_type pattern_eth_qinq_ipv6_tcp[];
245extern enum rte_flow_item_type pattern_eth_ipv6_sctp[];
246extern enum rte_flow_item_type pattern_eth_vlan_ipv6_sctp[];
247extern enum rte_flow_item_type pattern_eth_qinq_ipv6_sctp[];
248extern enum rte_flow_item_type pattern_eth_ipv6_icmp6[];
249extern enum rte_flow_item_type pattern_eth_vlan_ipv6_icmp6[];
250extern enum rte_flow_item_type pattern_eth_qinq_ipv6_icmp6[];
251
252
253extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4[];
254extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_udp[];
255extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[];
256extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[];
257extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[];
258
259
260extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[];
261extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[];
262extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp[];
263extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp[];
264extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_icmp[];
265
266
267extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4[];
268extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_tcp[];
269extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_udp[];
270extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_sctp[];
271extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_icmp[];
272
273
274extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4[];
275extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_tcp[];
276extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_udp[];
277extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_sctp[];
278extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_icmp[];
279
280
281extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6[];
282extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_udp[];
283extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_tcp[];
284extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_sctp[];
285extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_icmp6[];
286
287
288extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6[];
289extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_udp[];
290extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_tcp[];
291extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_sctp[];
292extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_icmp6[];
293
294
295extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6[];
296extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_tcp[];
297extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_udp[];
298extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_sctp[];
299extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_icmp6[];
300
301
302extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6[];
303extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_tcp[];
304extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_udp[];
305extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_sctp[];
306extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_icmp6[];
307
308
309extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4[];
310extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_udp[];
311extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_tcp[];
312extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_sctp[];
313extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_icmp[];
314
315
316extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4[];
317extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_udp[];
318extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_tcp[];
319extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_sctp[];
320extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_icmp[];
321
322
323extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4[];
324extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_tcp[];
325extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_udp[];
326extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_sctp[];
327extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_icmp[];
328
329
330extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4[];
331extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_tcp[];
332extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_udp[];
333extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_sctp[];
334extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_icmp[];
335
336
337extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6[];
338extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_udp[];
339extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_tcp[];
340extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_sctp[];
341extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_icmp6[];
342
343
344extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6[];
345extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_udp[];
346extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_tcp[];
347extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_sctp[];
348extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_icmp6[];
349
350
351extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6[];
352extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_tcp[];
353extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_udp[];
354extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_sctp[];
355extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_icmp6[];
356
357
358extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6[];
359extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_tcp[];
360extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[];
361extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[];
362extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[];
363
364
365extern enum rte_flow_item_type pattern_eth_ipv4_gtpu[];
366extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[];
367
368
369extern enum rte_flow_item_type pattern_eth_ipv6_gtpu[];
370extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[];
371
372
373extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[];
374extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[];
375extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[];
376extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[];
377
378
379extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[];
380extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[];
381extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[];
382extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[];
383
384
385extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[];
386extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[];
387extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[];
388extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[];
389
390
391extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[];
392extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[];
393extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[];
394extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[];
395
396
397extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[];
398extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[];
399extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[];
400extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[];
401
402
403extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[];
404extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[];
405extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[];
406extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[];
407
408
409extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[];
410extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[];
411extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[];
412extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[];
413
414
415extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[];
416extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[];
417extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[];
418extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[];
419
420
421extern enum rte_flow_item_type pattern_eth_pppoed[];
422extern enum rte_flow_item_type pattern_eth_vlan_pppoed[];
423extern enum rte_flow_item_type pattern_eth_qinq_pppoed[];
424extern enum rte_flow_item_type pattern_eth_pppoes[];
425extern enum rte_flow_item_type pattern_eth_pppoes_proto[];
426extern enum rte_flow_item_type pattern_eth_vlan_pppoes[];
427extern enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[];
428extern enum rte_flow_item_type pattern_eth_qinq_pppoes[];
429extern enum rte_flow_item_type pattern_eth_pppoes_ipv4[];
430extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[];
431extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4[];
432extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_udp[];
433extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_udp[];
434extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_udp[];
435extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_tcp[];
436extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_tcp[];
437extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_tcp[];
438extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_sctp[];
439extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_sctp[];
440extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_sctp[];
441extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_icmp[];
442extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_icmp[];
443extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_icmp[];
444extern enum rte_flow_item_type pattern_eth_pppoes_ipv6[];
445extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6[];
446extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6[];
447extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_udp[];
448extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_udp[];
449extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_udp[];
450extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_tcp[];
451extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_tcp[];
452extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_tcp[];
453extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_sctp[];
454extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_sctp[];
455extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_sctp[];
456extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[];
457extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[];
458extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[];
459
460
461extern enum rte_flow_item_type pattern_eth_ipv4_esp[];
462extern enum rte_flow_item_type pattern_eth_ipv4_udp_esp[];
463extern enum rte_flow_item_type pattern_eth_ipv6_esp[];
464extern enum rte_flow_item_type pattern_eth_ipv6_udp_esp[];
465
466
467extern enum rte_flow_item_type pattern_eth_ipv4_ah[];
468extern enum rte_flow_item_type pattern_eth_ipv6_ah[];
469extern enum rte_flow_item_type pattern_eth_ipv6_udp_ah[];
470
471
472extern enum rte_flow_item_type pattern_eth_ipv4_l2tp[];
473extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[];
474
475
476extern enum rte_flow_item_type pattern_eth_ipv4_pfcp[];
477extern enum rte_flow_item_type pattern_eth_ipv6_pfcp[];
478
479struct ice_adapter;
480
481extern const struct rte_flow_ops ice_flow_ops;
482
483
484enum ice_flow_engine_type {
485 ICE_FLOW_ENGINE_NONE = 0,
486 ICE_FLOW_ENGINE_FDIR,
487 ICE_FLOW_ENGINE_SWITCH,
488 ICE_FLOW_ENGINE_HASH,
489 ICE_FLOW_ENGINE_ACL,
490 ICE_FLOW_ENGINE_MAX,
491};
492
493
494
495
496
497
498
499enum ice_flow_classification_stage {
500 ICE_FLOW_STAGE_NONE = 0,
501 ICE_FLOW_STAGE_RSS,
502 ICE_FLOW_STAGE_PERMISSION,
503 ICE_FLOW_STAGE_DISTRIBUTOR,
504 ICE_FLOW_STAGE_MAX,
505};
506
507struct ice_pattern_match_item {
508 enum rte_flow_item_type *pattern_list;
509
510 uint64_t input_set_mask;
511 void *meta;
512};
513
514enum ice_flow_redirect_type {
515 ICE_FLOW_REDIRECT_VSI,
516};
517
518struct ice_flow_redirect {
519 enum ice_flow_redirect_type type;
520 union {
521 struct {
522 uint16_t vsi_handle;
523 uint16_t new_vsi_num;
524 };
525 };
526};
527
528typedef int (*engine_init_t)(struct ice_adapter *ad);
529typedef void (*engine_uninit_t)(struct ice_adapter *ad);
530typedef int (*engine_create_t)(struct ice_adapter *ad,
531 struct rte_flow *flow,
532 void *meta,
533 struct rte_flow_error *error);
534typedef int (*engine_destroy_t)(struct ice_adapter *ad,
535 struct rte_flow *flow,
536 struct rte_flow_error *error);
537typedef int (*engine_query_t)(struct ice_adapter *ad,
538 struct rte_flow *flow,
539 struct rte_flow_query_count *count,
540 struct rte_flow_error *error);
541typedef int(*engine_redirect_t)(struct ice_adapter *ad,
542 struct rte_flow *flow,
543 struct ice_flow_redirect *redirect);
544typedef void (*engine_free_t) (struct rte_flow *flow);
545typedef int (*parse_pattern_action_t)(struct ice_adapter *ad,
546 struct ice_pattern_match_item *array,
547 uint32_t array_len,
548 const struct rte_flow_item pattern[],
549 const struct rte_flow_action actions[],
550 void **meta,
551 struct rte_flow_error *error);
552
553
554struct ice_flow_engine {
555 TAILQ_ENTRY(ice_flow_engine) node;
556 engine_init_t init;
557 engine_uninit_t uninit;
558 engine_create_t create;
559 engine_destroy_t destroy;
560 engine_query_t query_count;
561 engine_redirect_t redirect;
562 engine_free_t free;
563 enum ice_flow_engine_type type;
564};
565TAILQ_HEAD(ice_engine_list, ice_flow_engine);
566
567
568struct rte_flow {
569 TAILQ_ENTRY(rte_flow) node;
570 struct ice_flow_engine *engine;
571 void *rule;
572};
573
574struct ice_flow_parser {
575 struct ice_flow_engine *engine;
576 struct ice_pattern_match_item *array;
577 uint32_t array_len;
578 parse_pattern_action_t parse_pattern_action;
579 enum ice_flow_classification_stage stage;
580};
581
582
583struct ice_flow_parser_node {
584 TAILQ_ENTRY(ice_flow_parser_node) node;
585 struct ice_flow_parser *parser;
586};
587
588void ice_register_flow_engine(struct ice_flow_engine *engine);
589int ice_flow_init(struct ice_adapter *ad);
590void ice_flow_uninit(struct ice_adapter *ad);
591int ice_register_parser(struct ice_flow_parser *parser,
592 struct ice_adapter *ad);
593void ice_unregister_parser(struct ice_flow_parser *parser,
594 struct ice_adapter *ad);
595struct ice_pattern_match_item *
596ice_search_pattern_match_item(const struct rte_flow_item pattern[],
597 struct ice_pattern_match_item *array,
598 uint32_t array_len,
599 struct rte_flow_error *error);
600int
601ice_flow_redirect(struct ice_adapter *ad,
602 struct ice_flow_redirect *rd);
603#endif
604