1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2001-2021 Intel Corporation
5 #include "ice_common.h"
8 /* These are training packet headers used to program flow director filters. */
9 static const u8 ice_fdir_tcpv4_pkt[] = {
10 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
12 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,
13 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
15 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00,
16 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
19 static const u8 ice_fdir_udpv4_pkt[] = {
20 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
22 0x00, 0x1C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
23 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28 static const u8 ice_fdir_sctpv4_pkt[] = {
29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
31 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84,
32 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
33 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37 static const u8 ice_fdir_ipv4_pkt[] = {
38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
40 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x10,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45 static const u8 ice_fdir_udp4_vxlan_pkt[] = {
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
48 0x00, 0x4e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
54 0x45, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00,
55 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00,
60 static const u8 ice_fdir_ipv4_gtpu4_pkt[] = {
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
63 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
64 0x7c, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x24,
66 0xbf, 0xc0, 0x30, 0xff, 0x00, 0x14, 0x00, 0x00,
67 0x00, 0x00, 0x45, 0x00, 0x00, 0x14, 0x00, 0x01,
68 0x00, 0x00, 0x40, 0x00, 0x3a, 0x3d, 0x00, 0x00,
69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 static const u8 ice_fdir_udp4_gtpu4_pkt[] = {
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
75 0x00, 0x40, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
76 0x7c, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x2c,
78 0x00, 0x6f, 0x30, 0xff, 0x00, 0x1c, 0x00, 0x00,
79 0x00, 0x00, 0x45, 0x00, 0x00, 0x1c, 0x00, 0x01,
80 0x00, 0x00, 0x40, 0x11, 0x3a, 0x24, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x08, 0xbe, 0xc7, 0x00, 0x00,
85 static const u8 ice_fdir_tcp4_gtpu4_pkt[] = {
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
88 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
89 0x7c, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x38,
91 0x00, 0x4c, 0x30, 0xff, 0x00, 0x28, 0x00, 0x00,
92 0x00, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x01,
93 0x00, 0x00, 0x40, 0x06, 0x3a, 0x23, 0x00, 0x00,
94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96 0x00, 0x00, 0x50, 0x02, 0x20, 0x00, 0x4e, 0xd2,
97 0x00, 0x00, 0x00, 0x00,
100 static const u8 ice_fdir_ipv4_gtpu4_eh_pkt[] = {
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
103 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
104 0x7c, 0xa8, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
105 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x2e,
106 0xba, 0x1d, 0x34, 0xff, 0x00, 0x1e, 0x00, 0x00,
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00,
108 0x00, 0x00, 0x45, 0x00, 0x00, 0x16, 0x00, 0x01,
109 0x00, 0x00, 0x40, 0x00, 0x7c, 0xe5, 0x7f, 0x00,
110 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
113 static const u8 ice_fdir_udp4_gtpu4_eh_pkt[] = {
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
116 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
117 0x7c, 0xa0, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
118 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x36,
119 0xb8, 0x23, 0x34, 0xff, 0x00, 0x26, 0x00, 0x00,
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00,
121 0x00, 0x00, 0x45, 0x00, 0x00, 0x1e, 0x00, 0x01,
122 0x00, 0x00, 0x40, 0x11, 0x7c, 0xcc, 0x7f, 0x00,
123 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
124 0x00, 0x00, 0x00, 0x0a, 0x01, 0xd8, 0x00, 0x00,
127 static const u8 ice_fdir_tcp4_gtpu4_eh_pkt[] = {
128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
130 0x00, 0x56, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
131 0x7c, 0x94, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
132 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x42,
133 0xb8, 0x00, 0x34, 0xff, 0x00, 0x32, 0x00, 0x00,
134 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00,
135 0x00, 0x00, 0x45, 0x00, 0x00, 0x2a, 0x00, 0x01,
136 0x00, 0x00, 0x40, 0x06, 0x7c, 0xcb, 0x7f, 0x00,
137 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139 0x00, 0x00, 0x50, 0x02, 0x20, 0x00, 0x91, 0xde,
140 0x00, 0x00, 0x00, 0x00,
143 static const u8 ice_fdir_ipv4_gtpu4_eh_dw_pkt[] = {
144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
146 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
147 0x7c, 0xa8, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
148 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x2e,
149 0xba, 0x1d, 0x34, 0xff, 0x00, 0x1e, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00,
151 0x00, 0x00, 0x45, 0x00, 0x00, 0x16, 0x00, 0x01,
152 0x00, 0x00, 0x40, 0x00, 0x7c, 0xe5, 0x7f, 0x00,
153 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
156 static const u8 ice_fdir_udp4_gtpu4_eh_dw_pkt[] = {
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
159 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
160 0x7c, 0xa0, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
161 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x36,
162 0xb8, 0x23, 0x34, 0xff, 0x00, 0x26, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00,
164 0x00, 0x00, 0x45, 0x00, 0x00, 0x1e, 0x00, 0x01,
165 0x00, 0x00, 0x40, 0x11, 0x7c, 0xcc, 0x7f, 0x00,
166 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
167 0x00, 0x00, 0x00, 0x0a, 0x01, 0xd8, 0x00, 0x00,
170 static const u8 ice_fdir_tcp4_gtpu4_eh_dw_pkt[] = {
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
173 0x00, 0x56, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
174 0x7c, 0x94, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
175 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x42,
176 0xb8, 0x00, 0x34, 0xff, 0x00, 0x32, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00,
178 0x00, 0x00, 0x45, 0x00, 0x00, 0x2a, 0x00, 0x01,
179 0x00, 0x00, 0x40, 0x06, 0x7c, 0xcb, 0x7f, 0x00,
180 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182 0x00, 0x00, 0x50, 0x02, 0x20, 0x00, 0x91, 0xde,
183 0x00, 0x00, 0x00, 0x00,
186 static const u8 ice_fdir_ipv4_gtpu4_eh_up_pkt[] = {
187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
188 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
189 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
190 0x7c, 0xa8, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
191 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x2e,
192 0xba, 0x0d, 0x34, 0xff, 0x00, 0x1e, 0x00, 0x00,
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x10,
194 0x00, 0x00, 0x45, 0x00, 0x00, 0x16, 0x00, 0x01,
195 0x00, 0x00, 0x40, 0x00, 0x7c, 0xe5, 0x7f, 0x00,
196 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
199 static const u8 ice_fdir_udp4_gtpu4_eh_up_pkt[] = {
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
202 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
203 0x7c, 0xa0, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
204 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x36,
205 0xb8, 0x13, 0x34, 0xff, 0x00, 0x26, 0x00, 0x00,
206 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x10,
207 0x00, 0x00, 0x45, 0x00, 0x00, 0x1e, 0x00, 0x01,
208 0x00, 0x00, 0x40, 0x11, 0x7c, 0xcc, 0x7f, 0x00,
209 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
210 0x00, 0x00, 0x00, 0x0a, 0x01, 0xd8, 0x00, 0x00,
213 static const u8 ice_fdir_tcp4_gtpu4_eh_up_pkt[] = {
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
215 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
216 0x00, 0x56, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
217 0x7c, 0x94, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
218 0x00, 0x01, 0x08, 0x68, 0x08, 0x68, 0x00, 0x42,
219 0xb7, 0xf0, 0x34, 0xff, 0x00, 0x32, 0x00, 0x00,
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x01, 0x10,
221 0x00, 0x00, 0x45, 0x00, 0x00, 0x2a, 0x00, 0x01,
222 0x00, 0x00, 0x40, 0x06, 0x7c, 0xcb, 0x7f, 0x00,
223 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x50, 0x02, 0x20, 0x00, 0x91, 0xde,
226 0x00, 0x00, 0x00, 0x00,
229 static const u8 ice_fdir_icmp4_gtpu4_pkt[] = {
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
232 0x00, 0x4c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
234 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x00,
235 0x00, 0x00, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00,
236 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
238 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01,
239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244 static const u8 ice_fdir_ipv6_gtpu4_pkt[] = {
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
247 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
248 0x7c, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x38,
250 0x24, 0x42, 0x30, 0xff, 0x00, 0x28, 0x00, 0x00,
251 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
252 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x00, 0x00, 0x00, 0x00,
259 static const u8 ice_fdir_udp6_gtpu4_pkt[] = {
260 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
262 0x00, 0x54, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
263 0x7c, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x40,
265 0x4e, 0x3d, 0x30, 0xff, 0x00, 0x30, 0x00, 0x00,
266 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08,
267 0x11, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
272 0xff, 0xdc, 0x00, 0x00,
275 static const u8 ice_fdir_tcp6_gtpu4_pkt[] = {
276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
277 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
278 0x00, 0x62, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
279 0x7c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x4e,
281 0x59, 0x08, 0x30, 0xff, 0x00, 0x3e, 0x00, 0x00,
282 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x16,
283 0x06, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287 0x00, 0x00, 0x00, 0x14, 0x00, 0x50, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
289 0x20, 0x00, 0x8f, 0x7b, 0x00, 0x00, 0x00, 0x00,
292 static const u8 ice_fdir_ipv6_gtpu6_pkt[] = {
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
295 0x00, 0x00, 0x00, 0x38, 0x11, 0x40, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
299 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68,
300 0x08, 0x68, 0x00, 0x38, 0x22, 0x43, 0x30, 0xff,
301 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
302 0x00, 0x00, 0x00, 0x00, 0x3b, 0x40, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
306 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
309 static const u8 ice_fdir_ipv6_gtpu6_eh_pkt[] = {
310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
312 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
314 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
315 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
316 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68,
317 0x08, 0x68, 0x00, 0x44, 0x1b, 0x9a, 0x34, 0xff,
318 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x85, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
320 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
322 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
325 0x00, 0x00, 0x00, 0x00,
328 static const u8 ice_fdir_ipv6_gtpu6_eh_dw_pkt[] = {
329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
330 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
331 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
333 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
334 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68,
336 0x08, 0x68, 0x00, 0x44, 0x1b, 0x9a, 0x34, 0xff,
337 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
338 0x00, 0x85, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
339 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
340 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
341 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
342 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
344 0x00, 0x00, 0x00, 0x00,
347 static const u8 ice_fdir_ipv6_gtpu6_eh_up_pkt[] = {
348 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
349 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
350 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
352 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68,
355 0x08, 0x68, 0x00, 0x44, 0x1b, 0x8a, 0x34, 0xff,
356 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
357 0x00, 0x85, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,
358 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
360 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
362 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
363 0x00, 0x00, 0x00, 0x00,
366 static const u8 ice_fdir_ipv4_l2tpv3_pkt[] = {
367 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
369 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x73,
370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 static const u8 ice_fdir_ipv6_l2tpv3_pkt[] = {
376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
378 0x00, 0x00, 0x00, 0x00, 0x73, 0x40, 0x00, 0x00,
379 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
387 static const u8 ice_fdir_ipv4_esp_pkt[] = {
388 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
389 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
390 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32,
391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
392 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
396 static const u8 ice_fdir_ipv6_esp_pkt[] = {
397 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
398 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
399 0x00, 0x00, 0x00, 0x00, 0x32, 0x40, 0x00, 0x00,
400 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
401 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
402 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
403 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
404 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
407 static const u8 ice_fdir_ipv4_ah_pkt[] = {
408 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
409 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
410 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33,
411 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
417 static const u8 ice_fdir_ipv6_ah_pkt[] = {
418 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
419 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
420 0x00, 0x00, 0x00, 0x00, 0x33, 0x40, 0x00, 0x00,
421 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
423 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
424 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
425 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
426 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
429 static const u8 ice_fdir_ipv4_nat_t_esp_pkt[] = {
430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
431 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
432 0x00, 0x1C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
434 0x00, 0x00, 0x00, 0x00, 0x11, 0x94, 0x00, 0x00,
435 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439 static const u8 ice_fdir_ipv6_nat_t_esp_pkt[] = {
440 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
441 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
442 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 0x00, 0x00,
443 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
444 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
445 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
446 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
447 0x11, 0x94, 0x00, 0x00, 0x00, 0x08,
450 static const u8 ice_fdir_ipv4_pfcp_node_pkt[] = {
451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
452 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
453 0x00, 0x2C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
455 0x00, 0x00, 0x22, 0x65, 0x22, 0x65, 0x00, 0x00,
456 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
461 static const u8 ice_fdir_ipv4_pfcp_session_pkt[] = {
462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
463 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
464 0x00, 0x2C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
465 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
466 0x00, 0x00, 0x22, 0x65, 0x22, 0x65, 0x00, 0x00,
467 0x00, 0x00, 0x21, 0x00, 0x00, 0x10, 0x00, 0x00,
468 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
472 static const u8 ice_fdir_ipv6_pfcp_node_pkt[] = {
473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
474 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
475 0x00, 0x00, 0x00, 0x18, 0x11, 0x40, 0x00, 0x00,
476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
479 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x65,
480 0x22, 0x65, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
481 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
482 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
485 static const u8 ice_fdir_ipv6_pfcp_session_pkt[] = {
486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
487 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
488 0x00, 0x00, 0x00, 0x18, 0x11, 0x40, 0x00, 0x00,
489 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
490 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
491 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
492 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x65,
493 0x22, 0x65, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00,
494 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498 static const u8 ice_fdir_non_ip_l2_pkt[] = {
499 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
501 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
504 static const u8 ice_fdir_ecpri_tp0_pkt[] = {
505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
506 0x00, 0x00, 0x00, 0x00, 0xAE, 0xFE, 0x10, 0x00,
507 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
511 static const u8 ice_fdir_ipv4_udp_ecpri_tp0_pkt[] = {
512 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
513 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
514 0x00, 0x1C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
515 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
518 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521 static const u8 ice_fdir_ipv6_frag_pkt[] = {
522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
524 0x00, 0x00, 0x00, 0x00, 0x2C, 0x40, 0x00, 0x00,
525 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
527 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
528 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3B, 0x00,
529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
532 static const u8 ice_fdir_ipv4_frag_pkt[] = {
533 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
534 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
535 0x00, 0x14, 0x00, 0x00, 0x20, 0x00, 0x40, 0x10,
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540 /* IPV4 GRE INNER IPV4 */
541 static const u8 ice_fdir_ipv4_gre4_pkt[] = {
542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
543 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
544 0x00, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x40, 0x2f,
545 0x7c, 0x9e, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
546 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
547 0x00, 0x16, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00,
548 0x7c, 0xe5, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
549 0x00, 0x01, 0x00, 0x00,
552 static const u8 ice_fdir_udp4_gre4_pkt[] = {
553 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
554 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
555 0x00, 0x36, 0x00, 0x01, 0x00, 0x00, 0x40, 0x2f,
556 0x7c, 0x96, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
557 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
558 0x00, 0x1e, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
559 0x7c, 0xcc, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
560 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
561 0x01, 0xd8, 0x00, 0x00,
564 static const u8 ice_fdir_tcp4_gre4_pkt[] = {
565 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
567 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x40, 0x2f,
568 0x7c, 0x8a, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
569 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
570 0x00, 0x2a, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,
571 0x7c, 0xcb, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
572 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
573 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
574 0x20, 0x00, 0x91, 0xde, 0x00, 0x00, 0x00, 0x00,
577 /* IPV4 GRE INNER IPV6 */
578 static const u8 ice_fdir_ipv6_gre4_pkt[] = {
579 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
580 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
581 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x40, 0x2f,
582 0x7c, 0x8a, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
583 0x00, 0x01, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
584 0x00, 0x00, 0x00, 0x02, 0x3b, 0x40, 0x00, 0x00,
585 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
586 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
587 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
591 static const u8 ice_fdir_udp6_gre4_pkt[] = {
592 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
593 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
594 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x40, 0x2f,
595 0x7c, 0x82, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
596 0x00, 0x01, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
597 0x00, 0x00, 0x00, 0x0a, 0x11, 0x40, 0x00, 0x00,
598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
599 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
600 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
601 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
602 0x00, 0x00, 0x00, 0x0a, 0xff, 0xd8, 0x00, 0x00,
605 static const u8 ice_fdir_tcp6_gre4_pkt[] = {
606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
607 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
608 0x00, 0x56, 0x00, 0x01, 0x00, 0x00, 0x40, 0x2f,
609 0x7c, 0x76, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
610 0x00, 0x01, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
611 0x00, 0x00, 0x00, 0x16, 0x06, 0x40, 0x00, 0x00,
612 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
613 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
614 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
615 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
616 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
617 0x00, 0x00, 0x50, 0x02, 0x20, 0x00, 0x8f, 0xdf,
618 0x00, 0x00, 0x00, 0x00,
621 /* IPV6 GRE INNER IPV4 */
622 static const u8 ice_fdir_ipv4_gre6_pkt[] = {
623 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
624 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
625 0x00, 0x00, 0x00, 0x18, 0x2F, 0x40, 0x00, 0x00,
626 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
627 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
630 0x08, 0x00, 0x45, 0x00, 0x00, 0x14, 0x00, 0x01,
631 0x00, 0x00, 0x40, 0x00, 0x7A, 0xEA, 0x00, 0x00,
632 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
635 static const u8 ice_fdir_udp4_gre6_pkt[] = {
636 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
637 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
638 0x00, 0x00, 0x00, 0x20, 0x2F, 0x40, 0x00, 0x00,
639 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
640 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
643 0x08, 0x00, 0x45, 0x00, 0x00, 0x1C, 0x00, 0x01,
644 0x00, 0x00, 0x40, 0x11, 0x7A, 0xD1, 0x00, 0x00,
645 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
646 0x00, 0x00, 0x00, 0x08, 0xFF, 0xDE, 0x00, 0x00,
649 static const u8 ice_fdir_tcp4_gre6_pkt[] = {
650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
651 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
652 0x00, 0x00, 0x00, 0x2C, 0x2F, 0x40, 0x00, 0x00,
653 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
654 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
655 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
656 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
657 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x01,
658 0x00, 0x00, 0x40, 0x06, 0x7A, 0xD0, 0x00, 0x00,
659 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
660 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
661 0x00, 0x00, 0x50, 0x02, 0x20, 0x00, 0x8F, 0xE3,
662 0x00, 0x00, 0x00, 0x00,
665 /* IPV6 GRE INNER IPV6 */
666 static const u8 ice_fdir_ipv6_gre6_pkt[] = {
667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
669 0x00, 0x00, 0x00, 0x2C, 0x2F, 0x40, 0x00, 0x00,
670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
671 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
672 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
673 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
674 0x86, 0xDD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
675 0x3B, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
677 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
679 0x00, 0x01, 0x00, 0x00,
682 static const u8 ice_fdir_udp6_gre6_pkt[] = {
683 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
684 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
685 0x00, 0x00, 0x00, 0x34, 0x2F, 0x40, 0x00, 0x00,
686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
687 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
688 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
689 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
690 0x86, 0xDD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08,
691 0x11, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
693 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
694 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
695 0x00, 0x01, 0x00, 0x35, 0x00, 0x35, 0x00, 0x08,
696 0xFF, 0x72, 0x00, 0x00,
699 static const u8 ice_fdir_tcp6_gre6_pkt[] = {
700 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
701 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
702 0x00, 0x00, 0x00, 0x40, 0x2F, 0x40, 0x00, 0x00,
703 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
704 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
705 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
706 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
707 0x86, 0xDD, 0x60, 0x00, 0x00, 0x00, 0x00, 0x14,
708 0x06, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
709 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
710 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
711 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
712 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
714 0x20, 0x00, 0x8F, 0xE1, 0x00, 0x00, 0x00, 0x00,
717 static const u8 ice_fdir_tcpv6_pkt[] = {
718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
719 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
720 0x00, 0x00, 0x00, 0x14, 0x06, 0x40, 0x00, 0x00,
721 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
722 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
723 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
724 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
725 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
726 0x00, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00,
730 static const u8 ice_fdir_udpv6_pkt[] = {
731 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
732 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
733 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 0x00, 0x00,
734 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
735 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
736 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
738 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
741 static const u8 ice_fdir_sctpv6_pkt[] = {
742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
743 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
744 0x00, 0x00, 0x00, 0x0C, 0x84, 0x40, 0x00, 0x00,
745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753 static const u8 ice_fdir_ipv6_pkt[] = {
754 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
755 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
756 0x00, 0x00, 0x00, 0x00, 0x3B, 0x40, 0x00, 0x00,
757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
759 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
760 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
763 static const u8 ice_fdir_tcp4_tun_pkt[] = {
764 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
765 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
766 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
767 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
768 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
769 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
770 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
771 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
772 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00,
773 0x40, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
775 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
776 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
779 static const u8 ice_fdir_udp4_tun_pkt[] = {
780 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
782 0x00, 0x4e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
783 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
784 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
786 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
788 0x45, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00,
789 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
790 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
791 0x00, 0x00, 0x00, 0x00,
794 static const u8 ice_fdir_sctp4_tun_pkt[] = {
795 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
796 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
797 0x00, 0x52, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
799 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
800 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
801 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
802 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
803 0x45, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00,
804 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
805 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
806 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809 static const u8 ice_fdir_ip4_tun_pkt[] = {
810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
811 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
812 0x00, 0x46, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
814 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
816 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
818 0x45, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
819 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 0x00, 0x00, 0x00, 0x00,
823 static const u8 ice_fdir_tcp6_tun_pkt[] = {
824 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
825 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
826 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
827 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
828 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
832 0x60, 0x00, 0x00, 0x00, 0x00, 0x14, 0x06, 0x40,
833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
834 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
836 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
838 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x00,
839 0x00, 0x00, 0x00, 0x00,
842 static const u8 ice_fdir_udp6_tun_pkt[] = {
843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
844 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
845 0x00, 0x62, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
847 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
851 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x40,
852 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
855 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
856 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
859 static const u8 ice_fdir_sctp6_tun_pkt[] = {
860 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
861 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
862 0x00, 0x66, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
863 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
865 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
866 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
867 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
868 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x84, 0x40,
869 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
872 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
874 0x00, 0x00, 0x00, 0x00,
877 static const u8 ice_fdir_ip6_tun_pkt[] = {
878 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
879 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
880 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
883 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
884 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
885 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
886 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x40,
887 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
888 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
889 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
893 /* Flow Director no-op training packet table */
894 static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
896 ICE_FLTR_PTYPE_NONF_IPV4_TCP,
897 sizeof(ice_fdir_tcpv4_pkt), ice_fdir_tcpv4_pkt,
898 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
901 ICE_FLTR_PTYPE_NONF_IPV4_UDP,
902 sizeof(ice_fdir_udpv4_pkt), ice_fdir_udpv4_pkt,
903 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
906 ICE_FLTR_PTYPE_NONF_IPV4_SCTP,
907 sizeof(ice_fdir_sctpv4_pkt), ice_fdir_sctpv4_pkt,
908 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
911 ICE_FLTR_PTYPE_NONF_IPV4_OTHER,
912 sizeof(ice_fdir_ipv4_pkt), ice_fdir_ipv4_pkt,
913 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
916 ICE_FLTR_PTYPE_FRAG_IPV4,
917 sizeof(ice_fdir_ipv4_frag_pkt), ice_fdir_ipv4_frag_pkt,
918 sizeof(ice_fdir_ipv4_frag_pkt), ice_fdir_ipv4_frag_pkt,
921 ICE_FLTR_PTYPE_FRAG_IPV6,
922 sizeof(ice_fdir_ipv6_frag_pkt), ice_fdir_ipv6_frag_pkt,
923 sizeof(ice_fdir_ipv6_frag_pkt), ice_fdir_ipv6_frag_pkt,
926 ICE_FLTR_PTYPE_NONF_IPV4_GTPU,
927 sizeof(ice_fdir_ipv4_gtpu4_pkt),
928 ice_fdir_ipv4_gtpu4_pkt,
929 sizeof(ice_fdir_ipv4_gtpu4_pkt),
930 ice_fdir_ipv4_gtpu4_pkt,
933 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH,
934 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
935 ice_fdir_ipv4_gtpu4_eh_pkt,
936 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
937 ice_fdir_ipv4_gtpu4_eh_pkt,
940 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW,
941 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
942 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
943 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
944 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
947 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP,
948 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
949 ice_fdir_ipv4_gtpu4_eh_up_pkt,
950 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
951 ice_fdir_ipv4_gtpu4_eh_up_pkt,
954 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4,
955 sizeof(ice_fdir_ipv4_gtpu4_pkt),
956 ice_fdir_ipv4_gtpu4_pkt,
957 sizeof(ice_fdir_ipv4_gtpu4_pkt),
958 ice_fdir_ipv4_gtpu4_pkt,
961 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP,
962 sizeof(ice_fdir_udp4_gtpu4_pkt),
963 ice_fdir_udp4_gtpu4_pkt,
964 sizeof(ice_fdir_udp4_gtpu4_pkt),
965 ice_fdir_udp4_gtpu4_pkt,
968 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP,
969 sizeof(ice_fdir_tcp4_gtpu4_pkt),
970 ice_fdir_tcp4_gtpu4_pkt,
971 sizeof(ice_fdir_tcp4_gtpu4_pkt),
972 ice_fdir_tcp4_gtpu4_pkt,
975 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4,
976 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
977 ice_fdir_ipv4_gtpu4_eh_pkt,
978 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
979 ice_fdir_ipv4_gtpu4_eh_pkt,
982 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP,
983 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
984 ice_fdir_udp4_gtpu4_eh_pkt,
985 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
986 ice_fdir_udp4_gtpu4_eh_pkt,
989 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP,
990 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
991 ice_fdir_tcp4_gtpu4_eh_pkt,
992 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
993 ice_fdir_tcp4_gtpu4_eh_pkt,
996 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4,
997 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
998 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
999 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
1000 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
1003 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP,
1004 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
1005 ice_fdir_udp4_gtpu4_eh_dw_pkt,
1006 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
1007 ice_fdir_udp4_gtpu4_eh_dw_pkt,
1010 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP,
1011 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
1012 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
1013 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
1014 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
1017 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4,
1018 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
1019 ice_fdir_ipv4_gtpu4_eh_up_pkt,
1020 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
1021 ice_fdir_ipv4_gtpu4_eh_up_pkt,
1024 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP,
1025 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
1026 ice_fdir_udp4_gtpu4_eh_up_pkt,
1027 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
1028 ice_fdir_udp4_gtpu4_eh_up_pkt,
1031 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP,
1032 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
1033 ice_fdir_tcp4_gtpu4_eh_up_pkt,
1034 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
1035 ice_fdir_tcp4_gtpu4_eh_up_pkt,
1038 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP,
1039 sizeof(ice_fdir_icmp4_gtpu4_pkt),
1040 ice_fdir_icmp4_gtpu4_pkt,
1041 sizeof(ice_fdir_icmp4_gtpu4_pkt),
1042 ice_fdir_icmp4_gtpu4_pkt,
1045 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER,
1046 sizeof(ice_fdir_ipv4_gtpu4_pkt),
1047 ice_fdir_ipv4_gtpu4_pkt,
1048 sizeof(ice_fdir_ipv4_gtpu4_pkt),
1049 ice_fdir_ipv4_gtpu4_pkt,
1052 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6,
1053 sizeof(ice_fdir_ipv6_gtpu4_pkt),
1054 ice_fdir_ipv6_gtpu4_pkt,
1055 sizeof(ice_fdir_ipv6_gtpu4_pkt),
1056 ice_fdir_ipv6_gtpu4_pkt,
1059 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP,
1060 sizeof(ice_fdir_udp6_gtpu4_pkt),
1061 ice_fdir_udp6_gtpu4_pkt,
1062 sizeof(ice_fdir_udp6_gtpu4_pkt),
1063 ice_fdir_udp6_gtpu4_pkt,
1066 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP,
1067 sizeof(ice_fdir_tcp6_gtpu4_pkt),
1068 ice_fdir_tcp6_gtpu4_pkt,
1069 sizeof(ice_fdir_tcp6_gtpu4_pkt),
1070 ice_fdir_tcp6_gtpu4_pkt,
1073 ICE_FLTR_PTYPE_NONF_IPV6_GTPU,
1074 sizeof(ice_fdir_ipv6_gtpu6_pkt),
1075 ice_fdir_ipv6_gtpu6_pkt,
1076 sizeof(ice_fdir_ipv6_gtpu6_pkt),
1077 ice_fdir_ipv6_gtpu6_pkt,
1080 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH,
1081 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
1082 ice_fdir_ipv6_gtpu6_eh_pkt,
1083 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
1084 ice_fdir_ipv6_gtpu6_eh_pkt,
1087 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW,
1088 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
1089 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
1090 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
1091 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
1094 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP,
1095 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
1096 ice_fdir_ipv6_gtpu6_eh_up_pkt,
1097 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
1098 ice_fdir_ipv6_gtpu6_eh_up_pkt,
1101 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER,
1102 sizeof(ice_fdir_ipv6_gtpu6_pkt),
1103 ice_fdir_ipv6_gtpu6_pkt,
1104 sizeof(ice_fdir_ipv6_gtpu6_pkt),
1105 ice_fdir_ipv6_gtpu6_pkt,
1108 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER,
1109 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
1110 ice_fdir_ipv4_gtpu4_eh_pkt,
1111 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
1112 ice_fdir_ipv4_gtpu4_eh_pkt,
1115 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER,
1116 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
1117 ice_fdir_ipv6_gtpu6_eh_pkt,
1118 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
1119 ice_fdir_ipv6_gtpu6_eh_pkt,
1122 ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3,
1123 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
1124 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
1127 ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3,
1128 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
1129 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
1132 ICE_FLTR_PTYPE_NONF_IPV4_ESP,
1133 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
1134 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
1137 ICE_FLTR_PTYPE_NONF_IPV6_ESP,
1138 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
1139 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
1142 ICE_FLTR_PTYPE_NONF_IPV4_AH,
1143 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
1144 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
1147 ICE_FLTR_PTYPE_NONF_IPV6_AH,
1148 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
1149 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
1152 ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP,
1153 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
1154 ice_fdir_ipv4_nat_t_esp_pkt,
1155 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
1156 ice_fdir_ipv4_nat_t_esp_pkt,
1159 ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP,
1160 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
1161 ice_fdir_ipv6_nat_t_esp_pkt,
1162 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
1163 ice_fdir_ipv6_nat_t_esp_pkt,
1166 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE,
1167 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
1168 ice_fdir_ipv4_pfcp_node_pkt,
1169 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
1170 ice_fdir_ipv4_pfcp_node_pkt,
1173 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION,
1174 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
1175 ice_fdir_ipv4_pfcp_session_pkt,
1176 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
1177 ice_fdir_ipv4_pfcp_session_pkt,
1180 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE,
1181 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
1182 ice_fdir_ipv6_pfcp_node_pkt,
1183 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
1184 ice_fdir_ipv6_pfcp_node_pkt,
1187 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION,
1188 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
1189 ice_fdir_ipv6_pfcp_session_pkt,
1190 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
1191 ice_fdir_ipv6_pfcp_session_pkt,
1194 ICE_FLTR_PTYPE_NON_IP_L2,
1195 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
1196 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
1199 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN,
1200 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
1201 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
1204 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_UDP,
1205 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
1206 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
1209 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_TCP,
1210 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
1211 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
1214 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_SCTP,
1215 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
1216 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
1219 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_OTHER,
1220 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
1221 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
1224 ICE_FLTR_PTYPE_NONF_ECPRI_TP0,
1225 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1226 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1229 ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0,
1230 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1231 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1232 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1233 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1235 /* IPV4 GRE INNER IPV4 */
1237 ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4,
1238 sizeof(ice_fdir_ipv4_gre4_pkt),
1239 ice_fdir_ipv4_gre4_pkt,
1240 sizeof(ice_fdir_ipv4_gre4_pkt),
1241 ice_fdir_ipv4_gre4_pkt,
1244 ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4_UDP,
1245 sizeof(ice_fdir_udp4_gre4_pkt),
1246 ice_fdir_udp4_gre4_pkt,
1247 sizeof(ice_fdir_udp4_gre4_pkt),
1248 ice_fdir_udp4_gre4_pkt,
1251 ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4_TCP,
1252 sizeof(ice_fdir_tcp4_gre4_pkt),
1253 ice_fdir_tcp4_gre4_pkt,
1254 sizeof(ice_fdir_tcp4_gre4_pkt),
1255 ice_fdir_tcp4_gre4_pkt,
1257 /* IPV4 GRE INNER IPV6 */
1259 ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6,
1260 sizeof(ice_fdir_ipv6_gre4_pkt),
1261 ice_fdir_ipv6_gre4_pkt,
1262 sizeof(ice_fdir_ipv6_gre4_pkt),
1263 ice_fdir_ipv6_gre4_pkt,
1266 ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6_UDP,
1267 sizeof(ice_fdir_udp6_gre4_pkt),
1268 ice_fdir_udp6_gre4_pkt,
1269 sizeof(ice_fdir_udp6_gre4_pkt),
1270 ice_fdir_udp6_gre4_pkt,
1273 ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6_TCP,
1274 sizeof(ice_fdir_tcp6_gre4_pkt),
1275 ice_fdir_tcp6_gre4_pkt,
1276 sizeof(ice_fdir_tcp6_gre4_pkt),
1277 ice_fdir_tcp6_gre4_pkt,
1279 /* IPV6 GRE INNER IPV4 */
1281 ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4,
1282 sizeof(ice_fdir_ipv4_gre6_pkt),
1283 ice_fdir_ipv4_gre6_pkt,
1284 sizeof(ice_fdir_ipv4_gre6_pkt),
1285 ice_fdir_ipv4_gre6_pkt,
1288 ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4_UDP,
1289 sizeof(ice_fdir_udp4_gre6_pkt),
1290 ice_fdir_udp4_gre6_pkt,
1291 sizeof(ice_fdir_udp4_gre6_pkt),
1292 ice_fdir_udp4_gre6_pkt,
1295 ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4_TCP,
1296 sizeof(ice_fdir_tcp4_gre6_pkt),
1297 ice_fdir_tcp4_gre6_pkt,
1298 sizeof(ice_fdir_tcp4_gre6_pkt),
1299 ice_fdir_tcp4_gre6_pkt,
1301 /* IPV4 GRE INNER IPV6 */
1303 ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6,
1304 sizeof(ice_fdir_ipv6_gre6_pkt),
1305 ice_fdir_ipv6_gre6_pkt,
1306 sizeof(ice_fdir_ipv6_gre6_pkt),
1307 ice_fdir_ipv6_gre6_pkt,
1310 ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6_UDP,
1311 sizeof(ice_fdir_udp6_gre6_pkt),
1312 ice_fdir_udp6_gre6_pkt,
1313 sizeof(ice_fdir_udp6_gre6_pkt),
1314 ice_fdir_udp6_gre6_pkt,
1317 ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6_TCP,
1318 sizeof(ice_fdir_tcp6_gre6_pkt),
1319 ice_fdir_tcp6_gre6_pkt,
1320 sizeof(ice_fdir_tcp6_gre6_pkt),
1321 ice_fdir_tcp6_gre6_pkt,
1324 ICE_FLTR_PTYPE_NONF_IPV6_TCP,
1325 sizeof(ice_fdir_tcpv6_pkt), ice_fdir_tcpv6_pkt,
1326 sizeof(ice_fdir_tcp6_tun_pkt), ice_fdir_tcp6_tun_pkt,
1329 ICE_FLTR_PTYPE_NONF_IPV6_UDP,
1330 sizeof(ice_fdir_udpv6_pkt), ice_fdir_udpv6_pkt,
1331 sizeof(ice_fdir_udp6_tun_pkt), ice_fdir_udp6_tun_pkt,
1334 ICE_FLTR_PTYPE_NONF_IPV6_SCTP,
1335 sizeof(ice_fdir_sctpv6_pkt), ice_fdir_sctpv6_pkt,
1336 sizeof(ice_fdir_sctp6_tun_pkt), ice_fdir_sctp6_tun_pkt,
1339 ICE_FLTR_PTYPE_NONF_IPV6_OTHER,
1340 sizeof(ice_fdir_ipv6_pkt), ice_fdir_ipv6_pkt,
1341 sizeof(ice_fdir_ip6_tun_pkt), ice_fdir_ip6_tun_pkt,
1345 #define ICE_FDIR_NUM_PKT ARRAY_SIZE(ice_fdir_pkt)
1348 * ice_set_dflt_val_fd_desc
1349 * @fd_fltr_ctx: pointer to fd filter descriptor
1351 static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
1353 fd_fltr_ctx->comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1354 fd_fltr_ctx->comp_report = ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL;
1355 fd_fltr_ctx->fd_space = ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST;
1356 fd_fltr_ctx->cnt_ena = ICE_FXD_FLTR_QW0_STAT_ENA_PKTS;
1357 fd_fltr_ctx->evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE;
1358 fd_fltr_ctx->toq = ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX;
1359 fd_fltr_ctx->toq_prio = ICE_FXD_FLTR_QW0_TO_Q_PRIO1;
1360 fd_fltr_ctx->dpu_recipe = ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT;
1361 fd_fltr_ctx->drop = ICE_FXD_FLTR_QW0_DROP_NO;
1362 fd_fltr_ctx->flex_prio = ICE_FXD_FLTR_QW0_FLEX_PRI_NONE;
1363 fd_fltr_ctx->flex_mdid = ICE_FXD_FLTR_QW0_FLEX_MDID0;
1364 fd_fltr_ctx->flex_val = ICE_FXD_FLTR_QW0_FLEX_VAL0;
1365 fd_fltr_ctx->dtype = ICE_TX_DESC_DTYPE_FLTR_PROG;
1366 fd_fltr_ctx->desc_prof_prio = ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO;
1367 fd_fltr_ctx->desc_prof = ICE_FXD_FLTR_QW1_PROF_ZERO;
1368 fd_fltr_ctx->swap = ICE_FXD_FLTR_QW1_SWAP_SET;
1369 fd_fltr_ctx->fdid_prio = ICE_FXD_FLTR_QW1_FDID_PRI_ONE;
1370 fd_fltr_ctx->fdid_mdid = ICE_FXD_FLTR_QW1_FDID_MDID_FD;
1371 fd_fltr_ctx->fdid = ICE_FXD_FLTR_QW1_FDID_ZERO;
1375 * ice_set_fd_desc_val
1376 * @ctx: pointer to fd filter descriptor context
1377 * @fdir_desc: populated with fd filter descriptor values
1380 ice_set_fd_desc_val(struct ice_fd_fltr_desc_ctx *ctx,
1381 struct ice_fltr_desc *fdir_desc)
1385 /* prep QW0 of FD filter programming desc */
1386 qword = ((u64)ctx->qindex << ICE_FXD_FLTR_QW0_QINDEX_S) &
1387 ICE_FXD_FLTR_QW0_QINDEX_M;
1388 qword |= ((u64)ctx->comp_q << ICE_FXD_FLTR_QW0_COMP_Q_S) &
1389 ICE_FXD_FLTR_QW0_COMP_Q_M;
1390 qword |= ((u64)ctx->comp_report << ICE_FXD_FLTR_QW0_COMP_REPORT_S) &
1391 ICE_FXD_FLTR_QW0_COMP_REPORT_M;
1392 qword |= ((u64)ctx->fd_space << ICE_FXD_FLTR_QW0_FD_SPACE_S) &
1393 ICE_FXD_FLTR_QW0_FD_SPACE_M;
1394 qword |= ((u64)ctx->cnt_index << ICE_FXD_FLTR_QW0_STAT_CNT_S) &
1395 ICE_FXD_FLTR_QW0_STAT_CNT_M;
1396 qword |= ((u64)ctx->cnt_ena << ICE_FXD_FLTR_QW0_STAT_ENA_S) &
1397 ICE_FXD_FLTR_QW0_STAT_ENA_M;
1398 qword |= ((u64)ctx->evict_ena << ICE_FXD_FLTR_QW0_EVICT_ENA_S) &
1399 ICE_FXD_FLTR_QW0_EVICT_ENA_M;
1400 qword |= ((u64)ctx->toq << ICE_FXD_FLTR_QW0_TO_Q_S) &
1401 ICE_FXD_FLTR_QW0_TO_Q_M;
1402 qword |= ((u64)ctx->toq_prio << ICE_FXD_FLTR_QW0_TO_Q_PRI_S) &
1403 ICE_FXD_FLTR_QW0_TO_Q_PRI_M;
1404 qword |= ((u64)ctx->dpu_recipe << ICE_FXD_FLTR_QW0_DPU_RECIPE_S) &
1405 ICE_FXD_FLTR_QW0_DPU_RECIPE_M;
1406 qword |= ((u64)ctx->drop << ICE_FXD_FLTR_QW0_DROP_S) &
1407 ICE_FXD_FLTR_QW0_DROP_M;
1408 qword |= ((u64)ctx->flex_prio << ICE_FXD_FLTR_QW0_FLEX_PRI_S) &
1409 ICE_FXD_FLTR_QW0_FLEX_PRI_M;
1410 qword |= ((u64)ctx->flex_mdid << ICE_FXD_FLTR_QW0_FLEX_MDID_S) &
1411 ICE_FXD_FLTR_QW0_FLEX_MDID_M;
1412 qword |= ((u64)ctx->flex_val << ICE_FXD_FLTR_QW0_FLEX_VAL_S) &
1413 ICE_FXD_FLTR_QW0_FLEX_VAL_M;
1414 fdir_desc->qidx_compq_space_stat = CPU_TO_LE64(qword);
1416 /* prep QW1 of FD filter programming desc */
1417 qword = ((u64)ctx->dtype << ICE_FXD_FLTR_QW1_DTYPE_S) &
1418 ICE_FXD_FLTR_QW1_DTYPE_M;
1419 qword |= ((u64)ctx->pcmd << ICE_FXD_FLTR_QW1_PCMD_S) &
1420 ICE_FXD_FLTR_QW1_PCMD_M;
1421 qword |= ((u64)ctx->desc_prof_prio << ICE_FXD_FLTR_QW1_PROF_PRI_S) &
1422 ICE_FXD_FLTR_QW1_PROF_PRI_M;
1423 qword |= ((u64)ctx->desc_prof << ICE_FXD_FLTR_QW1_PROF_S) &
1424 ICE_FXD_FLTR_QW1_PROF_M;
1425 qword |= ((u64)ctx->fd_vsi << ICE_FXD_FLTR_QW1_FD_VSI_S) &
1426 ICE_FXD_FLTR_QW1_FD_VSI_M;
1427 qword |= ((u64)ctx->swap << ICE_FXD_FLTR_QW1_SWAP_S) &
1428 ICE_FXD_FLTR_QW1_SWAP_M;
1429 qword |= ((u64)ctx->fdid_prio << ICE_FXD_FLTR_QW1_FDID_PRI_S) &
1430 ICE_FXD_FLTR_QW1_FDID_PRI_M;
1431 qword |= ((u64)ctx->fdid_mdid << ICE_FXD_FLTR_QW1_FDID_MDID_S) &
1432 ICE_FXD_FLTR_QW1_FDID_MDID_M;
1433 qword |= ((u64)ctx->fdid << ICE_FXD_FLTR_QW1_FDID_S) &
1434 ICE_FXD_FLTR_QW1_FDID_M;
1435 fdir_desc->dtype_cmd_vsi_fdid = CPU_TO_LE64(qword);
1439 * ice_fdir_get_prgm_desc - set a fdir descriptor from a fdir filter struct
1440 * @hw: pointer to the hardware structure
1442 * @fdesc: filter descriptor
1443 * @add: if add is true, this is an add operation, false implies delete
1446 ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
1447 struct ice_fltr_desc *fdesc, bool add)
1449 struct ice_fd_fltr_desc_ctx fdir_fltr_ctx = { 0 };
1451 /* set default context info */
1452 ice_set_dflt_val_fd_desc(&fdir_fltr_ctx);
1454 /* change sideband filtering values */
1455 fdir_fltr_ctx.fdid = input->fltr_id;
1456 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DROP_PKT) {
1457 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
1458 fdir_fltr_ctx.qindex = 0;
1459 } else if (input->dest_ctl ==
1460 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
1461 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1462 fdir_fltr_ctx.qindex = 0;
1464 if (input->dest_ctl ==
1465 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP)
1466 fdir_fltr_ctx.toq = input->q_region;
1467 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1468 fdir_fltr_ctx.qindex = input->q_index;
1470 fdir_fltr_ctx.cnt_ena = input->cnt_ena;
1471 fdir_fltr_ctx.cnt_index = input->cnt_index;
1472 fdir_fltr_ctx.fd_vsi = ice_get_hw_vsi_num(hw, input->dest_vsi);
1473 fdir_fltr_ctx.evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE;
1474 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER)
1475 fdir_fltr_ctx.toq_prio = 0;
1477 fdir_fltr_ctx.toq_prio = 3;
1478 fdir_fltr_ctx.pcmd = add ? ICE_FXD_FLTR_QW1_PCMD_ADD :
1479 ICE_FXD_FLTR_QW1_PCMD_REMOVE;
1480 fdir_fltr_ctx.swap = ICE_FXD_FLTR_QW1_SWAP_NOT_SET;
1481 fdir_fltr_ctx.comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1482 fdir_fltr_ctx.comp_report = input->comp_report;
1483 fdir_fltr_ctx.fdid_prio = input->fdid_prio;
1484 fdir_fltr_ctx.desc_prof = 1;
1485 fdir_fltr_ctx.desc_prof_prio = 3;
1486 ice_set_fd_desc_val(&fdir_fltr_ctx, fdesc);
1490 * ice_alloc_fd_res_cntr - obtain counter resource for FD type
1491 * @hw: pointer to the hardware structure
1492 * @cntr_id: returns counter index
1494 enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id)
1496 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1497 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1501 * ice_free_fd_res_cntr - Free counter resource for FD type
1502 * @hw: pointer to the hardware structure
1503 * @cntr_id: counter index to be freed
1505 enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id)
1507 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1508 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1512 * ice_alloc_fd_guar_item - allocate resource for FD guaranteed entries
1513 * @hw: pointer to the hardware structure
1514 * @cntr_id: returns counter index
1515 * @num_fltr: number of filter entries to be allocated
1518 ice_alloc_fd_guar_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1520 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1521 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1526 * ice_free_fd_guar_item - Free flow director guaranteed entries
1527 * @hw: pointer to the hardware structure
1528 * @cntr_id: counter index that needs to be freed
1529 * @num_fltr: number of filters to be freed
1532 ice_free_fd_guar_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1534 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1535 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1540 * ice_alloc_fd_shrd_item - allocate resource for flow director shared entries
1541 * @hw: pointer to the hardware structure
1542 * @cntr_id: returns counter index
1543 * @num_fltr: number of filter entries to be allocated
1546 ice_alloc_fd_shrd_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1548 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1549 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1554 * ice_free_fd_shrd_item - Free flow director shared entries
1555 * @hw: pointer to the hardware structure
1556 * @cntr_id: counter index that needs to be freed
1557 * @num_fltr: number of filters to be freed
1560 ice_free_fd_shrd_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1562 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1563 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1568 * ice_get_fdir_cnt_all - get the number of Flow Director filters
1569 * @hw: hardware data structure
1571 * Returns the number of filters available on device
1573 int ice_get_fdir_cnt_all(struct ice_hw *hw)
1575 return hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
1579 * ice_pkt_insert_ipv6_addr - insert a be32 IPv6 address into a memory buffer.
1580 * @pkt: packet buffer
1581 * @offset: offset into buffer
1582 * @addr: IPv6 address to convert and insert into pkt at offset
1584 static void ice_pkt_insert_ipv6_addr(u8 *pkt, int offset, __be32 *addr)
1588 for (idx = 0; idx < ICE_IPV6_ADDR_LEN_AS_U32; idx++)
1589 ice_memcpy(pkt + offset + idx * sizeof(*addr), &addr[idx],
1590 sizeof(*addr), ICE_NONDMA_TO_NONDMA);
1594 * ice_pkt_insert_u6_qfi - insert a u6 value qfi into a memory buffer for gtpu
1595 * @pkt: packet buffer
1596 * @offset: offset into buffer
1597 * @data: 8 bit value to convert and insert into pkt at offset
1599 * This function is designed for inserting qfi (6 bits) for gtpu.
1601 static void ice_pkt_insert_u6_qfi(u8 *pkt, int offset, u8 data)
1605 ret = (data & 0x3F) + (*(pkt + offset) & 0xC0);
1606 ice_memcpy(pkt + offset, &ret, sizeof(ret), ICE_NONDMA_TO_NONDMA);
1610 * ice_pkt_insert_u8 - insert a u8 value into a memory buffer.
1611 * @pkt: packet buffer
1612 * @offset: offset into buffer
1613 * @data: 8 bit value to convert and insert into pkt at offset
1615 static void ice_pkt_insert_u8(u8 *pkt, int offset, u8 data)
1617 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1621 * ice_pkt_insert_u8_tc - insert a u8 value into a memory buffer for TC ipv6.
1622 * @pkt: packet buffer
1623 * @offset: offset into buffer
1624 * @data: 8 bit value to convert and insert into pkt at offset
1626 * This function is designed for inserting Traffic Class (TC) for IPv6,
1627 * since that TC is not aligned in number of bytes. Here we split it out
1628 * into two part and fill each byte with data copy from pkt, then insert
1629 * the two bytes data one by one.
1631 static void ice_pkt_insert_u8_tc(u8 *pkt, int offset, u8 data)
1635 high = (data >> 4) + (*(pkt + offset) & 0xF0);
1636 ice_memcpy(pkt + offset, &high, sizeof(high), ICE_NONDMA_TO_NONDMA);
1638 low = (*(pkt + offset + 1) & 0x0F) + ((data & 0x0F) << 4);
1639 ice_memcpy(pkt + offset + 1, &low, sizeof(low), ICE_NONDMA_TO_NONDMA);
1643 * ice_pkt_insert_u16 - insert a be16 value into a memory buffer.
1644 * @pkt: packet buffer
1645 * @offset: offset into buffer
1646 * @data: 16 bit value to convert and insert into pkt at offset
1648 static void ice_pkt_insert_u16(u8 *pkt, int offset, __be16 data)
1650 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1654 * ice_pkt_insert_u32 - insert a be32 value into a memory buffer.
1655 * @pkt: packet buffer
1656 * @offset: offset into buffer
1657 * @data: 32 bit value to convert and insert into pkt at offset
1659 static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
1661 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1665 * ice_pkt_insert_mac_addr - insert a MAC addr into a memory buffer.
1666 * @pkt: packet buffer
1667 * @addr: MAC address to convert and insert into pkt at offset
1669 static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
1671 ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
1675 * ice_fdir_get_open_tunnel_port
1676 * @hw: pointer to the hardware structure
1678 * @port: returns open port
1680 * returns an open tunnel port specified for this flow type
1682 static enum ice_status
1683 ice_fdir_get_open_tunnel_port(struct ice_hw *hw, enum ice_fltr_ptype flow,
1687 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1689 if (!ice_get_open_tunnel_port(hw, TNL_ECPRI, port))
1690 return ICE_ERR_DOES_NOT_EXIST;
1693 if (!ice_get_open_tunnel_port(hw, TNL_VXLAN, port) &&
1694 !ice_get_open_tunnel_port(hw, TNL_GENEVE, port))
1695 return ICE_ERR_DOES_NOT_EXIST;
1702 * ice_fdir_get_gen_prgm_pkt - generate a training packet
1703 * @hw: pointer to the hardware structure
1704 * @input: flow director filter data structure
1705 * @pkt: pointer to return filter packet
1706 * @frag: generate a fragment packet
1707 * @tun: true implies generate a tunnel packet
1710 ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
1711 u8 *pkt, bool frag, bool tun)
1713 enum ice_fltr_ptype flow;
1718 if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1719 switch (input->ip.v4.proto) {
1720 case ICE_IP_PROTO_TCP:
1721 flow = ICE_FLTR_PTYPE_NONF_IPV4_TCP;
1723 case ICE_IP_PROTO_UDP:
1724 flow = ICE_FLTR_PTYPE_NONF_IPV4_UDP;
1726 case ICE_IP_PROTO_SCTP:
1727 flow = ICE_FLTR_PTYPE_NONF_IPV4_SCTP;
1730 flow = ICE_FLTR_PTYPE_NONF_IPV4_OTHER;
1733 } else if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1734 switch (input->ip.v6.proto) {
1735 case ICE_IP_PROTO_TCP:
1736 flow = ICE_FLTR_PTYPE_NONF_IPV6_TCP;
1738 case ICE_IP_PROTO_UDP:
1739 flow = ICE_FLTR_PTYPE_NONF_IPV6_UDP;
1741 case ICE_IP_PROTO_SCTP:
1742 flow = ICE_FLTR_PTYPE_NONF_IPV6_SCTP;
1745 flow = ICE_FLTR_PTYPE_NONF_IPV6_OTHER;
1749 flow = input->flow_type;
1752 for (idx = 0; idx < ICE_FDIR_NUM_PKT; idx++)
1753 if (ice_fdir_pkt[idx].flow == flow)
1755 if (idx == ICE_FDIR_NUM_PKT)
1756 return ICE_ERR_PARAM;
1758 ice_memcpy(pkt, ice_fdir_pkt[idx].pkt,
1759 ice_fdir_pkt[idx].pkt_len, ICE_NONDMA_TO_NONDMA);
1762 if (!ice_fdir_pkt[idx].tun_pkt)
1763 return ICE_ERR_PARAM;
1766 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1767 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1768 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1769 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1770 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1771 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1772 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1773 ice_fdir_pkt[idx].tun_pkt_len,
1774 ICE_NONDMA_TO_NONDMA);
1775 loc = &pkt[ICE_FDIR_GTPU_IP_INNER_PKT_OFF];
1777 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1778 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1779 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1780 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1781 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1782 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1783 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1784 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1785 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1786 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1787 ice_fdir_pkt[idx].tun_pkt_len,
1788 ICE_NONDMA_TO_NONDMA);
1789 loc = &pkt[ICE_FDIR_GTPU_EH_INNER_PKT_OFF];
1791 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4:
1792 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4_UDP:
1793 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4_TCP:
1794 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6:
1795 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6_UDP:
1796 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6_TCP:
1797 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1798 ice_fdir_pkt[idx].tun_pkt_len,
1799 ICE_NONDMA_TO_NONDMA);
1800 loc = &pkt[ICE_FDIR_IPV4_GRE_INNER_PKT_OFF];
1802 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4:
1803 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4_UDP:
1804 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4_TCP:
1805 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6:
1806 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6_UDP:
1807 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6_TCP:
1808 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1809 ice_fdir_pkt[idx].tun_pkt_len,
1810 ICE_NONDMA_TO_NONDMA);
1811 loc = &pkt[ICE_FDIR_IPV6_GRE_INNER_PKT_OFF];
1814 if (ice_fdir_get_open_tunnel_port(hw, flow, &tnl_port))
1815 return ICE_ERR_DOES_NOT_EXIST;
1817 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1818 ice_fdir_pkt[idx].tun_pkt_len,
1819 ICE_NONDMA_TO_NONDMA);
1820 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_DST_PORT_OFFSET,
1822 loc = &pkt[ICE_FDIR_TUN_PKT_OFF];
1827 /* Reverse the src and dst, since the HW expects them to be from Tx
1828 * perspective. The input from user is from Rx filter perspective.
1831 case ICE_FLTR_PTYPE_NONF_IPV4_TCP:
1832 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1833 input->ip.v4.src_ip);
1834 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1835 input->ip.v4.src_port);
1836 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1837 input->ip.v4.dst_ip);
1838 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1839 input->ip.v4.dst_port);
1840 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1841 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1842 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1844 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_MF;
1846 case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
1847 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1848 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1849 input->ext_data_outer.src_mac);
1850 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1851 input->ip_outer.v4.dst_ip);
1852 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1853 input->ip_outer.v4.src_ip);
1854 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1855 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1856 input->ip.v4.src_ip);
1857 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1858 input->ip.v4.src_port);
1859 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1860 input->ip.v4.dst_ip);
1861 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1862 input->ip.v4.dst_port);
1863 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1864 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1865 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1866 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1868 case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
1869 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1870 input->ip.v4.src_ip);
1871 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1872 input->ip.v4.src_port);
1873 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1874 input->ip.v4.dst_ip);
1875 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1876 input->ip.v4.dst_port);
1877 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1878 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1879 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1881 case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
1882 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1883 input->ip.v4.src_ip);
1884 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1885 input->ip.v4.dst_ip);
1886 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1887 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1888 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1889 input->ip.v4.proto);
1890 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1892 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN:
1893 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_UDP:
1894 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1895 ice_pkt_insert_mac_addr(pkt + ETH_ALEN, input->ext_data_outer.src_mac);
1896 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1897 input->ip_outer.v4.dst_ip);
1898 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1899 input->ip_outer.v4.src_ip);
1900 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1901 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1902 input->vxlan_data.vni);
1903 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1904 input->ip.v4.src_ip);
1905 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1906 input->ip.v4.src_port);
1907 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1908 input->ip.v4.dst_ip);
1909 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1910 input->ip.v4.dst_port);
1911 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1912 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1913 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1914 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1916 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_TCP:
1917 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1918 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1919 input->ext_data_outer.src_mac);
1920 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1921 input->ip_outer.v4.dst_ip);
1922 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1923 input->ip_outer.v4.src_ip);
1924 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET,
1925 input->ip_outer.v4.tos);
1926 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1927 input->vxlan_data.vni);
1928 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1929 input->ip.v4.src_ip);
1930 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1931 input->ip.v4.src_port);
1932 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1933 input->ip.v4.dst_ip);
1934 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1935 input->ip.v4.dst_port);
1936 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1937 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1938 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1939 ice_pkt_insert_mac_addr(loc + ETH_ALEN,
1940 input->ext_data.src_mac);
1942 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_MF;
1944 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_SCTP:
1945 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1946 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1947 input->ext_data_outer.src_mac);
1948 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1949 input->ip_outer.v4.dst_ip);
1950 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1951 input->ip_outer.v4.src_ip);
1952 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET,
1953 input->ip_outer.v4.tos);
1954 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1955 input->vxlan_data.vni);
1956 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1957 input->ip.v4.src_ip);
1958 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1959 input->ip.v4.src_port);
1960 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1961 input->ip.v4.dst_ip);
1962 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1963 input->ip.v4.dst_port);
1964 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1965 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1966 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1967 ice_pkt_insert_mac_addr(loc + ETH_ALEN,
1968 input->ext_data.src_mac);
1970 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_OTHER:
1971 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1972 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1973 input->ext_data_outer.src_mac);
1974 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1975 input->ip_outer.v4.dst_ip);
1976 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1977 input->ip_outer.v4.src_ip);
1978 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET,
1979 input->ip_outer.v4.tos);
1980 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1981 input->vxlan_data.vni);
1982 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1983 input->ip.v4.src_ip);
1984 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1985 input->ip.v4.dst_ip);
1986 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1987 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1988 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1989 input->ip.v4.proto);
1990 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1991 ice_pkt_insert_mac_addr(loc + ETH_ALEN,
1992 input->ext_data.src_mac);
1994 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU:
1995 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1996 input->ip.v4.src_ip);
1997 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1998 input->ip.v4.dst_ip);
1999 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
2000 input->gtpu_data.teid);
2002 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
2003 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
2004 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
2005 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
2006 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
2007 input->ip.v4.src_ip);
2008 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
2009 input->ip.v4.dst_ip);
2010 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
2011 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
2012 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_PROTO_OFFSET,
2013 input->ip.v4.proto);
2015 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH:
2016 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW:
2017 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP:
2018 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
2019 input->ip.v4.src_ip);
2020 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
2021 input->ip.v4.dst_ip);
2022 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
2023 input->gtpu_data.teid);
2024 ice_pkt_insert_u6_qfi(loc, ICE_IPV4_GTPU_QFI_OFFSET,
2025 input->gtpu_data.qfi);
2027 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
2028 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
2029 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
2030 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
2031 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
2032 input->ip.v4.src_ip);
2033 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_DST_PORT_OFFSET,
2034 input->ip.v4.src_port);
2035 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
2036 input->ip.v4.dst_ip);
2037 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_SRC_PORT_OFFSET,
2038 input->ip.v4.dst_port);
2039 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
2040 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
2042 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
2043 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
2044 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
2045 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
2046 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
2047 input->ip.v4.src_ip);
2048 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_DST_PORT_OFFSET,
2049 input->ip.v4.src_port);
2050 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
2051 input->ip.v4.dst_ip);
2052 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_SRC_PORT_OFFSET,
2053 input->ip.v4.dst_port);
2054 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
2055 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
2057 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
2058 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
2059 input->ip.v6.src_ip);
2060 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
2061 input->ip.v6.dst_ip);
2062 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
2063 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
2064 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_PROTO_OFFSET,
2065 input->ip.v6.proto);
2067 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
2068 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
2069 input->ip.v6.src_ip);
2070 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
2071 input->ip.v6.dst_ip);
2072 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_DST_PORT_OFFSET,
2073 input->ip.v6.src_port);
2074 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_SRC_PORT_OFFSET,
2075 input->ip.v6.dst_port);
2076 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
2077 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
2079 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
2080 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
2081 input->ip.v6.src_ip);
2082 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
2083 input->ip.v6.dst_ip);
2084 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_DST_PORT_OFFSET,
2085 input->ip.v6.src_port);
2086 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_SRC_PORT_OFFSET,
2087 input->ip.v6.dst_port);
2088 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
2089 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
2091 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU:
2092 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER:
2093 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2094 input->ip.v6.src_ip);
2095 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2096 input->ip.v6.dst_ip);
2097 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
2098 input->gtpu_data.teid);
2100 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH:
2101 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW:
2102 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP:
2103 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER:
2104 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2105 input->ip.v6.src_ip);
2106 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2107 input->ip.v6.dst_ip);
2108 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
2109 input->gtpu_data.teid);
2110 ice_pkt_insert_u6_qfi(loc, ICE_IPV6_GTPU_QFI_OFFSET,
2111 input->gtpu_data.qfi);
2113 case ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3:
2114 ice_pkt_insert_u32(loc, ICE_IPV4_L2TPV3_SESS_ID_OFFSET,
2115 input->l2tpv3_data.session_id);
2117 case ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3:
2118 ice_pkt_insert_u32(loc, ICE_IPV6_L2TPV3_SESS_ID_OFFSET,
2119 input->l2tpv3_data.session_id);
2121 case ICE_FLTR_PTYPE_NONF_IPV4_ESP:
2122 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
2123 input->ip.v4.src_ip);
2124 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
2125 input->ip.v4.dst_ip);
2126 ice_pkt_insert_u32(loc, ICE_IPV4_ESP_SPI_OFFSET,
2127 input->ip.v4.sec_parm_idx);
2129 case ICE_FLTR_PTYPE_NONF_IPV6_ESP:
2130 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2131 input->ip.v6.src_ip);
2132 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2133 input->ip.v6.dst_ip);
2134 ice_pkt_insert_u32(loc, ICE_IPV6_ESP_SPI_OFFSET,
2135 input->ip.v6.sec_parm_idx);
2137 case ICE_FLTR_PTYPE_NONF_IPV4_AH:
2138 ice_pkt_insert_u32(loc, ICE_IPV4_AH_SPI_OFFSET,
2139 input->ip.v4.sec_parm_idx);
2141 case ICE_FLTR_PTYPE_NONF_IPV6_AH:
2142 ice_pkt_insert_u32(loc, ICE_IPV6_AH_SPI_OFFSET,
2143 input->ip.v6.sec_parm_idx);
2145 case ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP:
2146 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
2147 input->ip.v4.src_ip);
2148 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
2149 input->ip.v4.dst_ip);
2150 ice_pkt_insert_u32(loc, ICE_IPV4_NAT_T_ESP_SPI_OFFSET,
2151 input->ip.v4.sec_parm_idx);
2153 case ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP:
2154 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2155 input->ip.v6.src_ip);
2156 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2157 input->ip.v6.dst_ip);
2158 ice_pkt_insert_u32(loc, ICE_IPV6_NAT_T_ESP_SPI_OFFSET,
2159 input->ip.v6.sec_parm_idx);
2161 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE:
2162 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION:
2163 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
2164 input->ip.v4.dst_port);
2166 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE:
2167 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION:
2168 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
2169 input->ip.v6.dst_port);
2171 case ICE_FLTR_PTYPE_NON_IP_L2:
2172 ice_pkt_insert_u16(loc, ICE_MAC_ETHTYPE_OFFSET,
2173 input->ext_data.ether_type);
2175 case ICE_FLTR_PTYPE_NONF_ECPRI_TP0:
2176 ice_pkt_insert_u16(loc, ICE_ECPRI_TP0_PC_ID_OFFSET,
2177 input->ecpri_data.pc_id);
2179 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
2180 /* Use pkt instead of loc, since PC_ID is in outer part */
2181 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_ECPRI_TP0_PC_ID_OFFSET,
2182 input->ecpri_data.pc_id);
2184 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4:
2185 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4:
2186 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
2187 input->ip.v4.src_ip);
2188 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
2189 input->ip.v4.dst_ip);
2190 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET,
2192 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_PROTO_OFFSET,
2193 input->ip.v4.proto);
2195 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4_TCP:
2196 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4_TCP:
2197 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
2198 input->ip.v4.src_ip);
2199 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_DST_PORT_OFFSET,
2200 input->ip.v4.src_port);
2201 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
2202 input->ip.v4.dst_ip);
2203 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_SRC_PORT_OFFSET,
2204 input->ip.v4.dst_port);
2205 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET,
2208 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV4_UDP:
2209 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV4_UDP:
2210 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
2211 input->ip.v4.src_ip);
2212 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_DST_PORT_OFFSET,
2213 input->ip.v4.src_port);
2214 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
2215 input->ip.v4.dst_ip);
2216 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_SRC_PORT_OFFSET,
2217 input->ip.v4.dst_port);
2218 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET,
2221 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6:
2222 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6:
2223 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
2224 input->ip.v6.src_ip);
2225 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
2226 input->ip.v6.dst_ip);
2227 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET,
2229 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_PROTO_OFFSET,
2230 input->ip.v6.proto);
2232 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6_TCP:
2233 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6_TCP:
2234 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
2235 input->ip.v6.src_ip);
2236 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
2237 input->ip.v6.dst_ip);
2238 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_DST_PORT_OFFSET,
2239 input->ip.v6.src_port);
2240 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_SRC_PORT_OFFSET,
2241 input->ip.v6.dst_port);
2242 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET,
2245 case ICE_FLTR_PTYPE_NONF_IPV4_GRE_IPV6_UDP:
2246 case ICE_FLTR_PTYPE_NONF_IPV6_GRE_IPV6_UDP:
2247 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
2248 input->ip.v6.src_ip);
2249 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
2250 input->ip.v6.dst_ip);
2251 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_DST_PORT_OFFSET,
2252 input->ip.v6.src_port);
2253 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_SRC_PORT_OFFSET,
2254 input->ip.v6.dst_port);
2255 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET,
2258 case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
2259 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2260 input->ip.v6.src_ip);
2261 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2262 input->ip.v6.dst_ip);
2263 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_DST_PORT_OFFSET,
2264 input->ip.v6.src_port);
2265 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_SRC_PORT_OFFSET,
2266 input->ip.v6.dst_port);
2267 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
2268 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
2269 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
2271 case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
2272 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2273 input->ip.v6.src_ip);
2274 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2275 input->ip.v6.dst_ip);
2276 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_DST_PORT_OFFSET,
2277 input->ip.v6.src_port);
2278 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
2279 input->ip.v6.dst_port);
2280 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
2281 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
2282 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
2284 case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
2285 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2286 input->ip.v6.src_ip);
2287 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2288 input->ip.v6.dst_ip);
2289 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_DST_PORT_OFFSET,
2290 input->ip.v6.src_port);
2291 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_SRC_PORT_OFFSET,
2292 input->ip.v6.dst_port);
2293 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
2294 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
2295 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
2297 case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
2298 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
2299 input->ip.v6.src_ip);
2300 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
2301 input->ip.v6.dst_ip);
2302 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
2303 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
2304 ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
2305 input->ip.v6.proto);
2306 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
2308 case ICE_FLTR_PTYPE_FRAG_IPV4:
2309 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
2310 input->ip.v4.src_ip);
2311 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
2312 input->ip.v4.dst_ip);
2313 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
2314 ice_pkt_insert_u16(loc, ICE_IPV4_ID_OFFSET,
2315 input->ip.v4.packet_id);
2316 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
2317 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
2318 input->ip.v4.proto);
2319 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
2321 case ICE_FLTR_PTYPE_FRAG_IPV6:
2322 ice_pkt_insert_u32(loc, ICE_IPV6_ID_OFFSET,
2323 input->ip.v6.packet_id);
2326 return ICE_ERR_PARAM;
2329 if (input->flex_fltr)
2330 ice_pkt_insert_u16(loc, input->flex_offset, input->flex_word);
2336 * ice_fdir_get_prgm_pkt - generate a training packet
2337 * @input: flow director filter data structure
2338 * @pkt: pointer to return filter packet
2339 * @frag: generate a fragment packet
2342 ice_fdir_get_prgm_pkt(struct ice_fdir_fltr *input, u8 *pkt, bool frag)
2344 return ice_fdir_get_gen_prgm_pkt(NULL, input, pkt, frag, false);
2348 * ice_fdir_has_frag - does flow type have 2 ptypes
2351 * returns true is there is a fragment packet for this ptype
2353 bool ice_fdir_has_frag(enum ice_fltr_ptype flow)
2355 if (flow == ICE_FLTR_PTYPE_FRAG_IPV4 ||
2356 flow == ICE_FLTR_PTYPE_FRAG_IPV6)
2363 * ice_fdir_find_fltr_by_idx - find filter with idx
2364 * @hw: pointer to hardware structure
2365 * @fltr_idx: index to find.
2367 * Returns pointer to filter if found or null
2369 struct ice_fdir_fltr *
2370 ice_fdir_find_fltr_by_idx(struct ice_hw *hw, u32 fltr_idx)
2372 struct ice_fdir_fltr *rule;
2374 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2376 /* rule ID found in the list */
2377 if (fltr_idx == rule->fltr_id)
2379 if (fltr_idx < rule->fltr_id)
2386 * ice_fdir_list_add_fltr - add a new node to the flow director filter list
2387 * @hw: hardware structure
2388 * @fltr: filter node to add to structure
2390 void ice_fdir_list_add_fltr(struct ice_hw *hw, struct ice_fdir_fltr *fltr)
2392 struct ice_fdir_fltr *rule, *parent = NULL;
2394 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2396 /* rule ID found or pass its spot in the list */
2397 if (rule->fltr_id >= fltr->fltr_id)
2403 LIST_ADD_AFTER(&fltr->fltr_node, &parent->fltr_node);
2405 LIST_ADD(&fltr->fltr_node, &hw->fdir_list_head);
2409 * ice_fdir_update_cntrs - increment / decrement filter counter
2410 * @hw: pointer to hardware structure
2411 * @flow: filter flow type
2412 * @acl_fltr: true indicates an ACL filter
2413 * @add: true implies filters added
2416 ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,
2417 bool acl_fltr, bool add)
2421 incr = add ? 1 : -1;
2422 hw->fdir_active_fltr += incr;
2423 if (flow == ICE_FLTR_PTYPE_NONF_NONE || flow >= ICE_FLTR_PTYPE_MAX) {
2424 ice_debug(hw, ICE_DBG_SW, "Unknown filter type %d\n", flow);
2427 hw->acl_fltr_cnt[flow] += incr;
2429 hw->fdir_fltr_cnt[flow] += incr;
2434 * ice_cmp_ipv6_addr - compare 2 IP v6 addresses
2438 * Returns 0 on equal, returns non-0 if different
2440 static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)
2442 return memcmp(a, b, 4 * sizeof(__be32));
2446 * ice_fdir_comp_rules - compare 2 filters
2447 * @a: a Flow Director filter data structure
2448 * @b: a Flow Director filter data structure
2449 * @v6: bool true if v6 filter
2451 * Returns true if the filters match
2454 ice_fdir_comp_rules(struct ice_fdir_fltr *a, struct ice_fdir_fltr *b, bool v6)
2456 enum ice_fltr_ptype flow_type = a->flow_type;
2458 /* The calling function already checks that the two filters have the
2462 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2463 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2464 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP) {
2465 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
2466 a->ip.v4.src_ip == b->ip.v4.src_ip &&
2467 a->ip.v4.dst_port == b->ip.v4.dst_port &&
2468 a->ip.v4.src_port == b->ip.v4.src_port)
2470 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
2471 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
2472 a->ip.v4.src_ip == b->ip.v4.src_ip &&
2473 a->ip.v4.l4_header == b->ip.v4.l4_header &&
2474 a->ip.v4.proto == b->ip.v4.proto &&
2475 a->ip.v4.ip_ver == b->ip.v4.ip_ver &&
2476 a->ip.v4.tos == b->ip.v4.tos)
2480 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_UDP ||
2481 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_TCP ||
2482 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_SCTP) {
2483 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
2484 a->ip.v6.src_port == b->ip.v6.src_port &&
2485 !ice_cmp_ipv6_addr(a->ip.v6.dst_ip,
2487 !ice_cmp_ipv6_addr(a->ip.v6.src_ip,
2490 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
2491 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
2492 a->ip.v6.src_port == b->ip.v6.src_port)
2501 * ice_fdir_is_dup_fltr - test if filter is already in list for PF
2502 * @hw: hardware data structure
2503 * @input: Flow Director filter data structure
2505 * Returns true if the filter is found in the list
2507 bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
2509 struct ice_fdir_fltr *rule;
2512 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2514 enum ice_fltr_ptype flow_type;
2516 if (rule->flow_type != input->flow_type)
2519 flow_type = input->flow_type;
2520 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2521 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2522 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP ||
2523 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
2524 ret = ice_fdir_comp_rules(rule, input, false);
2526 ret = ice_fdir_comp_rules(rule, input, true);
2528 if (rule->fltr_id == input->fltr_id &&
2529 rule->q_index != input->q_index)
2540 * ice_clear_pf_fd_table - admin command to clear FD table for PF
2541 * @hw: hardware data structure
2543 * Clears FD table entries for a PF by issuing admin command (direct, 0x0B06)
2545 enum ice_status ice_clear_pf_fd_table(struct ice_hw *hw)
2547 struct ice_aqc_clear_fd_table *cmd;
2548 struct ice_aq_desc desc;
2550 cmd = &desc.params.clear_fd_table;
2551 ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_clear_fd_table);
2552 cmd->clear_type = CL_FD_VM_VF_TYPE_PF_IDX;
2553 /* vsi_index must be 0 to clear FD table for a PF */
2554 cmd->vsi_index = CPU_TO_LE16(0);
2556 return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);