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 static const u8 ice_fdir_tcpv6_pkt[] = {
541 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
542 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
543 0x00, 0x00, 0x00, 0x14, 0x06, 0x40, 0x00, 0x00,
544 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
545 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
546 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
547 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
548 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
549 0x00, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00,
553 static const u8 ice_fdir_udpv6_pkt[] = {
554 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
555 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
556 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 0x00, 0x00,
557 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
558 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
559 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
560 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
561 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
564 static const u8 ice_fdir_sctpv6_pkt[] = {
565 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
567 0x00, 0x00, 0x00, 0x0C, 0x84, 0x40, 0x00, 0x00,
568 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
569 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
570 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
571 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
572 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
576 static const u8 ice_fdir_ipv6_pkt[] = {
577 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
578 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
579 0x00, 0x00, 0x00, 0x00, 0x3B, 0x40, 0x00, 0x00,
580 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
581 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
582 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
583 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
586 static const u8 ice_fdir_tcp4_tun_pkt[] = {
587 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
589 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
590 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
591 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
592 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
593 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
594 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
595 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00,
596 0x40, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
597 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
599 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
602 static const u8 ice_fdir_udp4_tun_pkt[] = {
603 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
604 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
605 0x00, 0x4e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
607 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
608 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
609 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
610 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
611 0x45, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00,
612 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
613 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
614 0x00, 0x00, 0x00, 0x00,
617 static const u8 ice_fdir_sctp4_tun_pkt[] = {
618 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
619 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
620 0x00, 0x52, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
621 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
623 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
624 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
626 0x45, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00,
627 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
632 static const u8 ice_fdir_ip4_tun_pkt[] = {
633 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
634 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
635 0x00, 0x46, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
636 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
637 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
638 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
639 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
640 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
641 0x45, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
642 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
643 0x00, 0x00, 0x00, 0x00,
646 static const u8 ice_fdir_tcp6_tun_pkt[] = {
647 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
648 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
649 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
651 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
652 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
653 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
654 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
655 0x60, 0x00, 0x00, 0x00, 0x00, 0x14, 0x06, 0x40,
656 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
658 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
659 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
660 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
661 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x00,
662 0x00, 0x00, 0x00, 0x00,
665 static const u8 ice_fdir_udp6_tun_pkt[] = {
666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
667 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
668 0x00, 0x62, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
669 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
671 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
672 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
674 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x40,
675 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
677 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
679 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
682 static const u8 ice_fdir_sctp6_tun_pkt[] = {
683 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
684 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
685 0x00, 0x66, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
687 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
688 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
690 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
691 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x84, 0x40,
692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
693 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
694 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
695 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
696 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
697 0x00, 0x00, 0x00, 0x00,
700 static const u8 ice_fdir_ip6_tun_pkt[] = {
701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
702 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
703 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
704 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
705 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
706 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
707 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
708 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
709 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x40,
710 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
711 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
712 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
716 /* Flow Director no-op training packet table */
717 static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
719 ICE_FLTR_PTYPE_NONF_IPV4_TCP,
720 sizeof(ice_fdir_tcpv4_pkt), ice_fdir_tcpv4_pkt,
721 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
724 ICE_FLTR_PTYPE_NONF_IPV4_UDP,
725 sizeof(ice_fdir_udpv4_pkt), ice_fdir_udpv4_pkt,
726 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
729 ICE_FLTR_PTYPE_NONF_IPV4_SCTP,
730 sizeof(ice_fdir_sctpv4_pkt), ice_fdir_sctpv4_pkt,
731 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
734 ICE_FLTR_PTYPE_NONF_IPV4_OTHER,
735 sizeof(ice_fdir_ipv4_pkt), ice_fdir_ipv4_pkt,
736 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
739 ICE_FLTR_PTYPE_FRAG_IPV4,
740 sizeof(ice_fdir_ipv4_frag_pkt), ice_fdir_ipv4_frag_pkt,
741 sizeof(ice_fdir_ipv4_frag_pkt), ice_fdir_ipv4_frag_pkt,
744 ICE_FLTR_PTYPE_FRAG_IPV6,
745 sizeof(ice_fdir_ipv6_frag_pkt), ice_fdir_ipv6_frag_pkt,
746 sizeof(ice_fdir_ipv6_frag_pkt), ice_fdir_ipv6_frag_pkt,
749 ICE_FLTR_PTYPE_NONF_IPV4_GTPU,
750 sizeof(ice_fdir_ipv4_gtpu4_pkt),
751 ice_fdir_ipv4_gtpu4_pkt,
752 sizeof(ice_fdir_ipv4_gtpu4_pkt),
753 ice_fdir_ipv4_gtpu4_pkt,
756 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH,
757 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
758 ice_fdir_ipv4_gtpu4_eh_pkt,
759 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
760 ice_fdir_ipv4_gtpu4_eh_pkt,
763 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW,
764 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
765 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
766 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
767 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
770 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP,
771 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
772 ice_fdir_ipv4_gtpu4_eh_up_pkt,
773 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
774 ice_fdir_ipv4_gtpu4_eh_up_pkt,
777 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4,
778 sizeof(ice_fdir_ipv4_gtpu4_pkt),
779 ice_fdir_ipv4_gtpu4_pkt,
780 sizeof(ice_fdir_ipv4_gtpu4_pkt),
781 ice_fdir_ipv4_gtpu4_pkt,
784 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP,
785 sizeof(ice_fdir_udp4_gtpu4_pkt),
786 ice_fdir_udp4_gtpu4_pkt,
787 sizeof(ice_fdir_udp4_gtpu4_pkt),
788 ice_fdir_udp4_gtpu4_pkt,
791 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP,
792 sizeof(ice_fdir_tcp4_gtpu4_pkt),
793 ice_fdir_tcp4_gtpu4_pkt,
794 sizeof(ice_fdir_tcp4_gtpu4_pkt),
795 ice_fdir_tcp4_gtpu4_pkt,
798 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4,
799 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
800 ice_fdir_ipv4_gtpu4_eh_pkt,
801 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
802 ice_fdir_ipv4_gtpu4_eh_pkt,
805 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP,
806 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
807 ice_fdir_udp4_gtpu4_eh_pkt,
808 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
809 ice_fdir_udp4_gtpu4_eh_pkt,
812 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP,
813 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
814 ice_fdir_tcp4_gtpu4_eh_pkt,
815 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
816 ice_fdir_tcp4_gtpu4_eh_pkt,
819 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4,
820 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
821 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
822 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
823 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
826 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP,
827 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
828 ice_fdir_udp4_gtpu4_eh_dw_pkt,
829 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
830 ice_fdir_udp4_gtpu4_eh_dw_pkt,
833 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP,
834 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
835 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
836 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
837 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
840 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4,
841 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
842 ice_fdir_ipv4_gtpu4_eh_up_pkt,
843 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
844 ice_fdir_ipv4_gtpu4_eh_up_pkt,
847 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP,
848 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
849 ice_fdir_udp4_gtpu4_eh_up_pkt,
850 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
851 ice_fdir_udp4_gtpu4_eh_up_pkt,
854 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP,
855 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
856 ice_fdir_tcp4_gtpu4_eh_up_pkt,
857 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
858 ice_fdir_tcp4_gtpu4_eh_up_pkt,
861 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP,
862 sizeof(ice_fdir_icmp4_gtpu4_pkt),
863 ice_fdir_icmp4_gtpu4_pkt,
864 sizeof(ice_fdir_icmp4_gtpu4_pkt),
865 ice_fdir_icmp4_gtpu4_pkt,
868 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER,
869 sizeof(ice_fdir_ipv4_gtpu4_pkt),
870 ice_fdir_ipv4_gtpu4_pkt,
871 sizeof(ice_fdir_ipv4_gtpu4_pkt),
872 ice_fdir_ipv4_gtpu4_pkt,
875 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6,
876 sizeof(ice_fdir_ipv6_gtpu4_pkt),
877 ice_fdir_ipv6_gtpu4_pkt,
878 sizeof(ice_fdir_ipv6_gtpu4_pkt),
879 ice_fdir_ipv6_gtpu4_pkt,
882 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP,
883 sizeof(ice_fdir_udp6_gtpu4_pkt),
884 ice_fdir_udp6_gtpu4_pkt,
885 sizeof(ice_fdir_udp6_gtpu4_pkt),
886 ice_fdir_udp6_gtpu4_pkt,
889 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP,
890 sizeof(ice_fdir_tcp6_gtpu4_pkt),
891 ice_fdir_tcp6_gtpu4_pkt,
892 sizeof(ice_fdir_tcp6_gtpu4_pkt),
893 ice_fdir_tcp6_gtpu4_pkt,
896 ICE_FLTR_PTYPE_NONF_IPV6_GTPU,
897 sizeof(ice_fdir_ipv6_gtpu6_pkt),
898 ice_fdir_ipv6_gtpu6_pkt,
899 sizeof(ice_fdir_ipv6_gtpu6_pkt),
900 ice_fdir_ipv6_gtpu6_pkt,
903 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH,
904 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
905 ice_fdir_ipv6_gtpu6_eh_pkt,
906 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
907 ice_fdir_ipv6_gtpu6_eh_pkt,
910 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW,
911 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
912 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
913 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
914 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
917 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP,
918 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
919 ice_fdir_ipv6_gtpu6_eh_up_pkt,
920 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
921 ice_fdir_ipv6_gtpu6_eh_up_pkt,
924 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER,
925 sizeof(ice_fdir_ipv6_gtpu6_pkt),
926 ice_fdir_ipv6_gtpu6_pkt,
927 sizeof(ice_fdir_ipv6_gtpu6_pkt),
928 ice_fdir_ipv6_gtpu6_pkt,
931 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER,
932 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
933 ice_fdir_ipv4_gtpu4_eh_pkt,
934 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
935 ice_fdir_ipv4_gtpu4_eh_pkt,
938 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER,
939 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
940 ice_fdir_ipv6_gtpu6_eh_pkt,
941 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
942 ice_fdir_ipv6_gtpu6_eh_pkt,
945 ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3,
946 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
947 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
950 ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3,
951 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
952 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
955 ICE_FLTR_PTYPE_NONF_IPV4_ESP,
956 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
957 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
960 ICE_FLTR_PTYPE_NONF_IPV6_ESP,
961 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
962 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
965 ICE_FLTR_PTYPE_NONF_IPV4_AH,
966 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
967 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
970 ICE_FLTR_PTYPE_NONF_IPV6_AH,
971 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
972 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
975 ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP,
976 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
977 ice_fdir_ipv4_nat_t_esp_pkt,
978 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
979 ice_fdir_ipv4_nat_t_esp_pkt,
982 ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP,
983 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
984 ice_fdir_ipv6_nat_t_esp_pkt,
985 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
986 ice_fdir_ipv6_nat_t_esp_pkt,
989 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE,
990 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
991 ice_fdir_ipv4_pfcp_node_pkt,
992 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
993 ice_fdir_ipv4_pfcp_node_pkt,
996 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION,
997 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
998 ice_fdir_ipv4_pfcp_session_pkt,
999 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
1000 ice_fdir_ipv4_pfcp_session_pkt,
1003 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE,
1004 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
1005 ice_fdir_ipv6_pfcp_node_pkt,
1006 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
1007 ice_fdir_ipv6_pfcp_node_pkt,
1010 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION,
1011 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
1012 ice_fdir_ipv6_pfcp_session_pkt,
1013 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
1014 ice_fdir_ipv6_pfcp_session_pkt,
1017 ICE_FLTR_PTYPE_NON_IP_L2,
1018 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
1019 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
1022 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN,
1023 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
1024 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
1027 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_UDP,
1028 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
1029 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
1032 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_TCP,
1033 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
1034 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
1037 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_SCTP,
1038 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
1039 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
1042 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_OTHER,
1043 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
1044 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
1047 ICE_FLTR_PTYPE_NONF_ECPRI_TP0,
1048 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1049 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1052 ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0,
1053 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1054 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1055 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1056 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1059 ICE_FLTR_PTYPE_NONF_IPV6_TCP,
1060 sizeof(ice_fdir_tcpv6_pkt), ice_fdir_tcpv6_pkt,
1061 sizeof(ice_fdir_tcp6_tun_pkt), ice_fdir_tcp6_tun_pkt,
1064 ICE_FLTR_PTYPE_NONF_IPV6_UDP,
1065 sizeof(ice_fdir_udpv6_pkt), ice_fdir_udpv6_pkt,
1066 sizeof(ice_fdir_udp6_tun_pkt), ice_fdir_udp6_tun_pkt,
1069 ICE_FLTR_PTYPE_NONF_IPV6_SCTP,
1070 sizeof(ice_fdir_sctpv6_pkt), ice_fdir_sctpv6_pkt,
1071 sizeof(ice_fdir_sctp6_tun_pkt), ice_fdir_sctp6_tun_pkt,
1074 ICE_FLTR_PTYPE_NONF_IPV6_OTHER,
1075 sizeof(ice_fdir_ipv6_pkt), ice_fdir_ipv6_pkt,
1076 sizeof(ice_fdir_ip6_tun_pkt), ice_fdir_ip6_tun_pkt,
1080 #define ICE_FDIR_NUM_PKT ARRAY_SIZE(ice_fdir_pkt)
1083 * ice_set_dflt_val_fd_desc
1084 * @fd_fltr_ctx: pointer to fd filter descriptor
1086 static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
1088 fd_fltr_ctx->comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1089 fd_fltr_ctx->comp_report = ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL;
1090 fd_fltr_ctx->fd_space = ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST;
1091 fd_fltr_ctx->cnt_ena = ICE_FXD_FLTR_QW0_STAT_ENA_PKTS;
1092 fd_fltr_ctx->evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE;
1093 fd_fltr_ctx->toq = ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX;
1094 fd_fltr_ctx->toq_prio = ICE_FXD_FLTR_QW0_TO_Q_PRIO1;
1095 fd_fltr_ctx->dpu_recipe = ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT;
1096 fd_fltr_ctx->drop = ICE_FXD_FLTR_QW0_DROP_NO;
1097 fd_fltr_ctx->flex_prio = ICE_FXD_FLTR_QW0_FLEX_PRI_NONE;
1098 fd_fltr_ctx->flex_mdid = ICE_FXD_FLTR_QW0_FLEX_MDID0;
1099 fd_fltr_ctx->flex_val = ICE_FXD_FLTR_QW0_FLEX_VAL0;
1100 fd_fltr_ctx->dtype = ICE_TX_DESC_DTYPE_FLTR_PROG;
1101 fd_fltr_ctx->desc_prof_prio = ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO;
1102 fd_fltr_ctx->desc_prof = ICE_FXD_FLTR_QW1_PROF_ZERO;
1103 fd_fltr_ctx->swap = ICE_FXD_FLTR_QW1_SWAP_SET;
1104 fd_fltr_ctx->fdid_prio = ICE_FXD_FLTR_QW1_FDID_PRI_ONE;
1105 fd_fltr_ctx->fdid_mdid = ICE_FXD_FLTR_QW1_FDID_MDID_FD;
1106 fd_fltr_ctx->fdid = ICE_FXD_FLTR_QW1_FDID_ZERO;
1110 * ice_set_fd_desc_val
1111 * @ctx: pointer to fd filter descriptor context
1112 * @fdir_desc: populated with fd filter descriptor values
1115 ice_set_fd_desc_val(struct ice_fd_fltr_desc_ctx *ctx,
1116 struct ice_fltr_desc *fdir_desc)
1120 /* prep QW0 of FD filter programming desc */
1121 qword = ((u64)ctx->qindex << ICE_FXD_FLTR_QW0_QINDEX_S) &
1122 ICE_FXD_FLTR_QW0_QINDEX_M;
1123 qword |= ((u64)ctx->comp_q << ICE_FXD_FLTR_QW0_COMP_Q_S) &
1124 ICE_FXD_FLTR_QW0_COMP_Q_M;
1125 qword |= ((u64)ctx->comp_report << ICE_FXD_FLTR_QW0_COMP_REPORT_S) &
1126 ICE_FXD_FLTR_QW0_COMP_REPORT_M;
1127 qword |= ((u64)ctx->fd_space << ICE_FXD_FLTR_QW0_FD_SPACE_S) &
1128 ICE_FXD_FLTR_QW0_FD_SPACE_M;
1129 qword |= ((u64)ctx->cnt_index << ICE_FXD_FLTR_QW0_STAT_CNT_S) &
1130 ICE_FXD_FLTR_QW0_STAT_CNT_M;
1131 qword |= ((u64)ctx->cnt_ena << ICE_FXD_FLTR_QW0_STAT_ENA_S) &
1132 ICE_FXD_FLTR_QW0_STAT_ENA_M;
1133 qword |= ((u64)ctx->evict_ena << ICE_FXD_FLTR_QW0_EVICT_ENA_S) &
1134 ICE_FXD_FLTR_QW0_EVICT_ENA_M;
1135 qword |= ((u64)ctx->toq << ICE_FXD_FLTR_QW0_TO_Q_S) &
1136 ICE_FXD_FLTR_QW0_TO_Q_M;
1137 qword |= ((u64)ctx->toq_prio << ICE_FXD_FLTR_QW0_TO_Q_PRI_S) &
1138 ICE_FXD_FLTR_QW0_TO_Q_PRI_M;
1139 qword |= ((u64)ctx->dpu_recipe << ICE_FXD_FLTR_QW0_DPU_RECIPE_S) &
1140 ICE_FXD_FLTR_QW0_DPU_RECIPE_M;
1141 qword |= ((u64)ctx->drop << ICE_FXD_FLTR_QW0_DROP_S) &
1142 ICE_FXD_FLTR_QW0_DROP_M;
1143 qword |= ((u64)ctx->flex_prio << ICE_FXD_FLTR_QW0_FLEX_PRI_S) &
1144 ICE_FXD_FLTR_QW0_FLEX_PRI_M;
1145 qword |= ((u64)ctx->flex_mdid << ICE_FXD_FLTR_QW0_FLEX_MDID_S) &
1146 ICE_FXD_FLTR_QW0_FLEX_MDID_M;
1147 qword |= ((u64)ctx->flex_val << ICE_FXD_FLTR_QW0_FLEX_VAL_S) &
1148 ICE_FXD_FLTR_QW0_FLEX_VAL_M;
1149 fdir_desc->qidx_compq_space_stat = CPU_TO_LE64(qword);
1151 /* prep QW1 of FD filter programming desc */
1152 qword = ((u64)ctx->dtype << ICE_FXD_FLTR_QW1_DTYPE_S) &
1153 ICE_FXD_FLTR_QW1_DTYPE_M;
1154 qword |= ((u64)ctx->pcmd << ICE_FXD_FLTR_QW1_PCMD_S) &
1155 ICE_FXD_FLTR_QW1_PCMD_M;
1156 qword |= ((u64)ctx->desc_prof_prio << ICE_FXD_FLTR_QW1_PROF_PRI_S) &
1157 ICE_FXD_FLTR_QW1_PROF_PRI_M;
1158 qword |= ((u64)ctx->desc_prof << ICE_FXD_FLTR_QW1_PROF_S) &
1159 ICE_FXD_FLTR_QW1_PROF_M;
1160 qword |= ((u64)ctx->fd_vsi << ICE_FXD_FLTR_QW1_FD_VSI_S) &
1161 ICE_FXD_FLTR_QW1_FD_VSI_M;
1162 qword |= ((u64)ctx->swap << ICE_FXD_FLTR_QW1_SWAP_S) &
1163 ICE_FXD_FLTR_QW1_SWAP_M;
1164 qword |= ((u64)ctx->fdid_prio << ICE_FXD_FLTR_QW1_FDID_PRI_S) &
1165 ICE_FXD_FLTR_QW1_FDID_PRI_M;
1166 qword |= ((u64)ctx->fdid_mdid << ICE_FXD_FLTR_QW1_FDID_MDID_S) &
1167 ICE_FXD_FLTR_QW1_FDID_MDID_M;
1168 qword |= ((u64)ctx->fdid << ICE_FXD_FLTR_QW1_FDID_S) &
1169 ICE_FXD_FLTR_QW1_FDID_M;
1170 fdir_desc->dtype_cmd_vsi_fdid = CPU_TO_LE64(qword);
1174 * ice_fdir_get_prgm_desc - set a fdir descriptor from a fdir filter struct
1175 * @hw: pointer to the hardware structure
1177 * @fdesc: filter descriptor
1178 * @add: if add is true, this is an add operation, false implies delete
1181 ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
1182 struct ice_fltr_desc *fdesc, bool add)
1184 struct ice_fd_fltr_desc_ctx fdir_fltr_ctx = { 0 };
1186 /* set default context info */
1187 ice_set_dflt_val_fd_desc(&fdir_fltr_ctx);
1189 /* change sideband filtering values */
1190 fdir_fltr_ctx.fdid = input->fltr_id;
1191 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DROP_PKT) {
1192 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
1193 fdir_fltr_ctx.qindex = 0;
1194 } else if (input->dest_ctl ==
1195 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
1196 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1197 fdir_fltr_ctx.qindex = 0;
1199 if (input->dest_ctl ==
1200 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP)
1201 fdir_fltr_ctx.toq = input->q_region;
1202 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1203 fdir_fltr_ctx.qindex = input->q_index;
1205 fdir_fltr_ctx.cnt_ena = input->cnt_ena;
1206 fdir_fltr_ctx.cnt_index = input->cnt_index;
1207 fdir_fltr_ctx.fd_vsi = ice_get_hw_vsi_num(hw, input->dest_vsi);
1208 fdir_fltr_ctx.evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE;
1209 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER)
1210 fdir_fltr_ctx.toq_prio = 0;
1212 fdir_fltr_ctx.toq_prio = 3;
1213 fdir_fltr_ctx.pcmd = add ? ICE_FXD_FLTR_QW1_PCMD_ADD :
1214 ICE_FXD_FLTR_QW1_PCMD_REMOVE;
1215 fdir_fltr_ctx.swap = ICE_FXD_FLTR_QW1_SWAP_NOT_SET;
1216 fdir_fltr_ctx.comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1217 fdir_fltr_ctx.comp_report = input->comp_report;
1218 fdir_fltr_ctx.fdid_prio = input->fdid_prio;
1219 fdir_fltr_ctx.desc_prof = 1;
1220 fdir_fltr_ctx.desc_prof_prio = 3;
1221 ice_set_fd_desc_val(&fdir_fltr_ctx, fdesc);
1225 * ice_alloc_fd_res_cntr - obtain counter resource for FD type
1226 * @hw: pointer to the hardware structure
1227 * @cntr_id: returns counter index
1229 enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id)
1231 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1232 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1236 * ice_free_fd_res_cntr - Free counter resource for FD type
1237 * @hw: pointer to the hardware structure
1238 * @cntr_id: counter index to be freed
1240 enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id)
1242 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1243 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1247 * ice_alloc_fd_guar_item - allocate resource for FD guaranteed entries
1248 * @hw: pointer to the hardware structure
1249 * @cntr_id: returns counter index
1250 * @num_fltr: number of filter entries to be allocated
1253 ice_alloc_fd_guar_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1255 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1256 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1261 * ice_free_fd_guar_item - Free flow director guaranteed entries
1262 * @hw: pointer to the hardware structure
1263 * @cntr_id: counter index that needs to be freed
1264 * @num_fltr: number of filters to be freed
1267 ice_free_fd_guar_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1269 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1270 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1275 * ice_alloc_fd_shrd_item - allocate resource for flow director shared entries
1276 * @hw: pointer to the hardware structure
1277 * @cntr_id: returns counter index
1278 * @num_fltr: number of filter entries to be allocated
1281 ice_alloc_fd_shrd_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1283 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1284 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1289 * ice_free_fd_shrd_item - Free flow director shared entries
1290 * @hw: pointer to the hardware structure
1291 * @cntr_id: counter index that needs to be freed
1292 * @num_fltr: number of filters to be freed
1295 ice_free_fd_shrd_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1297 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1298 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1303 * ice_get_fdir_cnt_all - get the number of Flow Director filters
1304 * @hw: hardware data structure
1306 * Returns the number of filters available on device
1308 int ice_get_fdir_cnt_all(struct ice_hw *hw)
1310 return hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
1314 * ice_pkt_insert_ipv6_addr - insert a be32 IPv6 address into a memory buffer.
1315 * @pkt: packet buffer
1316 * @offset: offset into buffer
1317 * @addr: IPv6 address to convert and insert into pkt at offset
1319 static void ice_pkt_insert_ipv6_addr(u8 *pkt, int offset, __be32 *addr)
1323 for (idx = 0; idx < ICE_IPV6_ADDR_LEN_AS_U32; idx++)
1324 ice_memcpy(pkt + offset + idx * sizeof(*addr), &addr[idx],
1325 sizeof(*addr), ICE_NONDMA_TO_NONDMA);
1329 * ice_pkt_insert_u6_qfi - insert a u6 value qfi into a memory buffer for gtpu
1330 * @pkt: packet buffer
1331 * @offset: offset into buffer
1332 * @data: 8 bit value to convert and insert into pkt at offset
1334 * This function is designed for inserting qfi (6 bits) for gtpu.
1336 static void ice_pkt_insert_u6_qfi(u8 *pkt, int offset, u8 data)
1340 ret = (data & 0x3F) + (*(pkt + offset) & 0xC0);
1341 ice_memcpy(pkt + offset, &ret, sizeof(ret), ICE_NONDMA_TO_NONDMA);
1345 * ice_pkt_insert_u8 - insert a u8 value into a memory buffer.
1346 * @pkt: packet buffer
1347 * @offset: offset into buffer
1348 * @data: 8 bit value to convert and insert into pkt at offset
1350 static void ice_pkt_insert_u8(u8 *pkt, int offset, u8 data)
1352 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1356 * ice_pkt_insert_u8_tc - insert a u8 value into a memory buffer for TC ipv6.
1357 * @pkt: packet buffer
1358 * @offset: offset into buffer
1359 * @data: 8 bit value to convert and insert into pkt at offset
1361 * This function is designed for inserting Traffic Class (TC) for IPv6,
1362 * since that TC is not aligned in number of bytes. Here we split it out
1363 * into two part and fill each byte with data copy from pkt, then insert
1364 * the two bytes data one by one.
1366 static void ice_pkt_insert_u8_tc(u8 *pkt, int offset, u8 data)
1370 high = (data >> 4) + (*(pkt + offset) & 0xF0);
1371 ice_memcpy(pkt + offset, &high, sizeof(high), ICE_NONDMA_TO_NONDMA);
1373 low = (*(pkt + offset + 1) & 0x0F) + ((data & 0x0F) << 4);
1374 ice_memcpy(pkt + offset + 1, &low, sizeof(low), ICE_NONDMA_TO_NONDMA);
1378 * ice_pkt_insert_u16 - insert a be16 value into a memory buffer.
1379 * @pkt: packet buffer
1380 * @offset: offset into buffer
1381 * @data: 16 bit value to convert and insert into pkt at offset
1383 static void ice_pkt_insert_u16(u8 *pkt, int offset, __be16 data)
1385 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1389 * ice_pkt_insert_u32 - insert a be32 value into a memory buffer.
1390 * @pkt: packet buffer
1391 * @offset: offset into buffer
1392 * @data: 32 bit value to convert and insert into pkt at offset
1394 static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
1396 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1400 * ice_pkt_insert_mac_addr - insert a MAC addr into a memory buffer.
1401 * @pkt: packet buffer
1402 * @addr: MAC address to convert and insert into pkt at offset
1404 static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
1406 ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
1410 * ice_fdir_get_open_tunnel_port
1411 * @hw: pointer to the hardware structure
1413 * @port: returns open port
1415 * returns an open tunnel port specified for this flow type
1417 static enum ice_status
1418 ice_fdir_get_open_tunnel_port(struct ice_hw *hw, enum ice_fltr_ptype flow,
1422 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1424 if (!ice_get_open_tunnel_port(hw, TNL_ECPRI, port))
1425 return ICE_ERR_DOES_NOT_EXIST;
1428 if (!ice_get_open_tunnel_port(hw, TNL_VXLAN, port) &&
1429 !ice_get_open_tunnel_port(hw, TNL_GENEVE, port))
1430 return ICE_ERR_DOES_NOT_EXIST;
1437 * ice_fdir_get_gen_prgm_pkt - generate a training packet
1438 * @hw: pointer to the hardware structure
1439 * @input: flow director filter data structure
1440 * @pkt: pointer to return filter packet
1441 * @frag: generate a fragment packet
1442 * @tun: true implies generate a tunnel packet
1445 ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
1446 u8 *pkt, bool frag, bool tun)
1448 enum ice_fltr_ptype flow;
1453 if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1454 switch (input->ip.v4.proto) {
1455 case ICE_IP_PROTO_TCP:
1456 flow = ICE_FLTR_PTYPE_NONF_IPV4_TCP;
1458 case ICE_IP_PROTO_UDP:
1459 flow = ICE_FLTR_PTYPE_NONF_IPV4_UDP;
1461 case ICE_IP_PROTO_SCTP:
1462 flow = ICE_FLTR_PTYPE_NONF_IPV4_SCTP;
1465 flow = ICE_FLTR_PTYPE_NONF_IPV4_OTHER;
1468 } else if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1469 switch (input->ip.v6.proto) {
1470 case ICE_IP_PROTO_TCP:
1471 flow = ICE_FLTR_PTYPE_NONF_IPV6_TCP;
1473 case ICE_IP_PROTO_UDP:
1474 flow = ICE_FLTR_PTYPE_NONF_IPV6_UDP;
1476 case ICE_IP_PROTO_SCTP:
1477 flow = ICE_FLTR_PTYPE_NONF_IPV6_SCTP;
1480 flow = ICE_FLTR_PTYPE_NONF_IPV6_OTHER;
1484 flow = input->flow_type;
1487 for (idx = 0; idx < ICE_FDIR_NUM_PKT; idx++)
1488 if (ice_fdir_pkt[idx].flow == flow)
1490 if (idx == ICE_FDIR_NUM_PKT)
1491 return ICE_ERR_PARAM;
1493 ice_memcpy(pkt, ice_fdir_pkt[idx].pkt,
1494 ice_fdir_pkt[idx].pkt_len, ICE_NONDMA_TO_NONDMA);
1497 if (!ice_fdir_pkt[idx].tun_pkt)
1498 return ICE_ERR_PARAM;
1501 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1502 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1503 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1504 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1505 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1506 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1507 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1508 ice_fdir_pkt[idx].tun_pkt_len,
1509 ICE_NONDMA_TO_NONDMA);
1510 loc = &pkt[ICE_FDIR_GTPU_IP_INNER_PKT_OFF];
1512 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1513 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1514 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1515 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1516 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1517 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1518 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1519 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1520 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1521 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1522 ice_fdir_pkt[idx].tun_pkt_len,
1523 ICE_NONDMA_TO_NONDMA);
1524 loc = &pkt[ICE_FDIR_GTPU_EH_INNER_PKT_OFF];
1527 if (ice_fdir_get_open_tunnel_port(hw, flow, &tnl_port))
1528 return ICE_ERR_DOES_NOT_EXIST;
1530 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1531 ice_fdir_pkt[idx].tun_pkt_len,
1532 ICE_NONDMA_TO_NONDMA);
1533 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_DST_PORT_OFFSET,
1535 loc = &pkt[ICE_FDIR_TUN_PKT_OFF];
1540 /* Reverse the src and dst, since the HW expects them to be from Tx
1541 * perspective. The input from user is from Rx filter perspective.
1544 case ICE_FLTR_PTYPE_NONF_IPV4_TCP:
1545 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1546 input->ip.v4.src_ip);
1547 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1548 input->ip.v4.src_port);
1549 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1550 input->ip.v4.dst_ip);
1551 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1552 input->ip.v4.dst_port);
1553 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1554 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1555 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1557 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_MF;
1559 case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
1560 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1561 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1562 input->ext_data_outer.src_mac);
1563 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1564 input->ip_outer.v4.dst_ip);
1565 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1566 input->ip_outer.v4.src_ip);
1567 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1568 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1569 input->ip.v4.src_ip);
1570 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1571 input->ip.v4.src_port);
1572 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1573 input->ip.v4.dst_ip);
1574 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1575 input->ip.v4.dst_port);
1576 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1577 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1578 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1579 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1581 case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
1582 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1583 input->ip.v4.src_ip);
1584 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1585 input->ip.v4.src_port);
1586 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1587 input->ip.v4.dst_ip);
1588 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1589 input->ip.v4.dst_port);
1590 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1591 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1592 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1594 case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
1595 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1596 input->ip.v4.src_ip);
1597 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1598 input->ip.v4.dst_ip);
1599 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1600 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1601 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1602 input->ip.v4.proto);
1603 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1605 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN:
1606 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_UDP:
1607 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1608 ice_pkt_insert_mac_addr(pkt + ETH_ALEN, input->ext_data_outer.src_mac);
1609 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1610 input->ip_outer.v4.dst_ip);
1611 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1612 input->ip_outer.v4.src_ip);
1613 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1614 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1615 input->vxlan_data.vni);
1616 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1617 input->ip.v4.src_ip);
1618 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1619 input->ip.v4.src_port);
1620 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1621 input->ip.v4.dst_ip);
1622 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1623 input->ip.v4.dst_port);
1624 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1625 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1626 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1627 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1629 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_TCP:
1630 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1631 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1632 input->ext_data_outer.src_mac);
1633 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1634 input->ip_outer.v4.dst_ip);
1635 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1636 input->ip_outer.v4.src_ip);
1637 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET,
1638 input->ip_outer.v4.tos);
1639 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1640 input->vxlan_data.vni);
1641 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1642 input->ip.v4.src_ip);
1643 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1644 input->ip.v4.src_port);
1645 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1646 input->ip.v4.dst_ip);
1647 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1648 input->ip.v4.dst_port);
1649 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1650 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1651 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1652 ice_pkt_insert_mac_addr(loc + ETH_ALEN,
1653 input->ext_data.src_mac);
1655 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_MF;
1657 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_SCTP:
1658 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1659 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1660 input->ext_data_outer.src_mac);
1661 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1662 input->ip_outer.v4.dst_ip);
1663 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1664 input->ip_outer.v4.src_ip);
1665 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET,
1666 input->ip_outer.v4.tos);
1667 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1668 input->vxlan_data.vni);
1669 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1670 input->ip.v4.src_ip);
1671 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1672 input->ip.v4.src_port);
1673 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1674 input->ip.v4.dst_ip);
1675 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1676 input->ip.v4.dst_port);
1677 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1678 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1679 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1680 ice_pkt_insert_mac_addr(loc + ETH_ALEN,
1681 input->ext_data.src_mac);
1683 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN_IPV4_OTHER:
1684 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1685 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1686 input->ext_data_outer.src_mac);
1687 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1688 input->ip_outer.v4.dst_ip);
1689 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1690 input->ip_outer.v4.src_ip);
1691 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET,
1692 input->ip_outer.v4.tos);
1693 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1694 input->vxlan_data.vni);
1695 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1696 input->ip.v4.src_ip);
1697 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1698 input->ip.v4.dst_ip);
1699 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1700 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1701 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1702 input->ip.v4.proto);
1703 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1704 ice_pkt_insert_mac_addr(loc + ETH_ALEN,
1705 input->ext_data.src_mac);
1707 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU:
1708 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1709 input->ip.v4.src_ip);
1710 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1711 input->ip.v4.dst_ip);
1712 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1713 input->gtpu_data.teid);
1715 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1716 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1717 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1718 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1719 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1720 input->ip.v4.src_ip);
1721 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1722 input->ip.v4.dst_ip);
1723 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1724 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1725 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_PROTO_OFFSET,
1726 input->ip.v4.proto);
1728 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH:
1729 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW:
1730 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP:
1731 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1732 input->ip.v4.src_ip);
1733 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1734 input->ip.v4.dst_ip);
1735 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1736 input->gtpu_data.teid);
1737 ice_pkt_insert_u6_qfi(loc, ICE_IPV4_GTPU_QFI_OFFSET,
1738 input->gtpu_data.qfi);
1740 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1741 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1742 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1743 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1744 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1745 input->ip.v4.src_ip);
1746 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_DST_PORT_OFFSET,
1747 input->ip.v4.src_port);
1748 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1749 input->ip.v4.dst_ip);
1750 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_SRC_PORT_OFFSET,
1751 input->ip.v4.dst_port);
1752 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1753 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1755 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1756 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1757 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1758 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1759 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1760 input->ip.v4.src_ip);
1761 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_DST_PORT_OFFSET,
1762 input->ip.v4.src_port);
1763 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1764 input->ip.v4.dst_ip);
1765 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_SRC_PORT_OFFSET,
1766 input->ip.v4.dst_port);
1767 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1768 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1770 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1771 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1772 input->ip.v6.src_ip);
1773 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1774 input->ip.v6.dst_ip);
1775 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1776 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1777 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_PROTO_OFFSET,
1778 input->ip.v6.proto);
1780 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1781 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1782 input->ip.v6.src_ip);
1783 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1784 input->ip.v6.dst_ip);
1785 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_DST_PORT_OFFSET,
1786 input->ip.v6.src_port);
1787 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_SRC_PORT_OFFSET,
1788 input->ip.v6.dst_port);
1789 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1790 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1792 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1793 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1794 input->ip.v6.src_ip);
1795 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1796 input->ip.v6.dst_ip);
1797 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_DST_PORT_OFFSET,
1798 input->ip.v6.src_port);
1799 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_SRC_PORT_OFFSET,
1800 input->ip.v6.dst_port);
1801 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1802 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1804 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU:
1805 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER:
1806 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1807 input->ip.v6.src_ip);
1808 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1809 input->ip.v6.dst_ip);
1810 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1811 input->gtpu_data.teid);
1813 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH:
1814 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW:
1815 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP:
1816 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER:
1817 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1818 input->ip.v6.src_ip);
1819 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1820 input->ip.v6.dst_ip);
1821 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1822 input->gtpu_data.teid);
1823 ice_pkt_insert_u6_qfi(loc, ICE_IPV6_GTPU_QFI_OFFSET,
1824 input->gtpu_data.qfi);
1826 case ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3:
1827 ice_pkt_insert_u32(loc, ICE_IPV4_L2TPV3_SESS_ID_OFFSET,
1828 input->l2tpv3_data.session_id);
1830 case ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3:
1831 ice_pkt_insert_u32(loc, ICE_IPV6_L2TPV3_SESS_ID_OFFSET,
1832 input->l2tpv3_data.session_id);
1834 case ICE_FLTR_PTYPE_NONF_IPV4_ESP:
1835 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1836 input->ip.v4.src_ip);
1837 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1838 input->ip.v4.dst_ip);
1839 ice_pkt_insert_u32(loc, ICE_IPV4_ESP_SPI_OFFSET,
1840 input->ip.v4.sec_parm_idx);
1842 case ICE_FLTR_PTYPE_NONF_IPV6_ESP:
1843 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1844 input->ip.v6.src_ip);
1845 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1846 input->ip.v6.dst_ip);
1847 ice_pkt_insert_u32(loc, ICE_IPV6_ESP_SPI_OFFSET,
1848 input->ip.v6.sec_parm_idx);
1850 case ICE_FLTR_PTYPE_NONF_IPV4_AH:
1851 ice_pkt_insert_u32(loc, ICE_IPV4_AH_SPI_OFFSET,
1852 input->ip.v4.sec_parm_idx);
1854 case ICE_FLTR_PTYPE_NONF_IPV6_AH:
1855 ice_pkt_insert_u32(loc, ICE_IPV6_AH_SPI_OFFSET,
1856 input->ip.v6.sec_parm_idx);
1858 case ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP:
1859 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1860 input->ip.v4.src_ip);
1861 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1862 input->ip.v4.dst_ip);
1863 ice_pkt_insert_u32(loc, ICE_IPV4_NAT_T_ESP_SPI_OFFSET,
1864 input->ip.v4.sec_parm_idx);
1866 case ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP:
1867 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1868 input->ip.v6.src_ip);
1869 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1870 input->ip.v6.dst_ip);
1871 ice_pkt_insert_u32(loc, ICE_IPV6_NAT_T_ESP_SPI_OFFSET,
1872 input->ip.v6.sec_parm_idx);
1874 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE:
1875 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION:
1876 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1877 input->ip.v4.dst_port);
1879 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE:
1880 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION:
1881 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1882 input->ip.v6.dst_port);
1884 case ICE_FLTR_PTYPE_NON_IP_L2:
1885 ice_pkt_insert_u16(loc, ICE_MAC_ETHTYPE_OFFSET,
1886 input->ext_data.ether_type);
1888 case ICE_FLTR_PTYPE_NONF_ECPRI_TP0:
1889 ice_pkt_insert_u16(loc, ICE_ECPRI_TP0_PC_ID_OFFSET,
1890 input->ecpri_data.pc_id);
1892 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1893 /* Use pkt instead of loc, since PC_ID is in outer part */
1894 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_ECPRI_TP0_PC_ID_OFFSET,
1895 input->ecpri_data.pc_id);
1897 case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
1898 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1899 input->ip.v6.src_ip);
1900 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1901 input->ip.v6.dst_ip);
1902 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_DST_PORT_OFFSET,
1903 input->ip.v6.src_port);
1904 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_SRC_PORT_OFFSET,
1905 input->ip.v6.dst_port);
1906 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1907 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1908 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1910 case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
1911 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1912 input->ip.v6.src_ip);
1913 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1914 input->ip.v6.dst_ip);
1915 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_DST_PORT_OFFSET,
1916 input->ip.v6.src_port);
1917 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1918 input->ip.v6.dst_port);
1919 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1920 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1921 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1923 case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
1924 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1925 input->ip.v6.src_ip);
1926 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1927 input->ip.v6.dst_ip);
1928 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_DST_PORT_OFFSET,
1929 input->ip.v6.src_port);
1930 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_SRC_PORT_OFFSET,
1931 input->ip.v6.dst_port);
1932 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1933 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1934 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1936 case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
1937 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1938 input->ip.v6.src_ip);
1939 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1940 input->ip.v6.dst_ip);
1941 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1942 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1943 ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
1944 input->ip.v6.proto);
1945 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1947 case ICE_FLTR_PTYPE_FRAG_IPV4:
1948 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1949 input->ip.v4.src_ip);
1950 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1951 input->ip.v4.dst_ip);
1952 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1953 ice_pkt_insert_u16(loc, ICE_IPV4_ID_OFFSET,
1954 input->ip.v4.packet_id);
1955 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1956 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1957 input->ip.v4.proto);
1958 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1960 case ICE_FLTR_PTYPE_FRAG_IPV6:
1961 ice_pkt_insert_u32(loc, ICE_IPV6_ID_OFFSET,
1962 input->ip.v6.packet_id);
1965 return ICE_ERR_PARAM;
1968 if (input->flex_fltr)
1969 ice_pkt_insert_u16(loc, input->flex_offset, input->flex_word);
1975 * ice_fdir_get_prgm_pkt - generate a training packet
1976 * @input: flow director filter data structure
1977 * @pkt: pointer to return filter packet
1978 * @frag: generate a fragment packet
1981 ice_fdir_get_prgm_pkt(struct ice_fdir_fltr *input, u8 *pkt, bool frag)
1983 return ice_fdir_get_gen_prgm_pkt(NULL, input, pkt, frag, false);
1987 * ice_fdir_has_frag - does flow type have 2 ptypes
1990 * returns true is there is a fragment packet for this ptype
1992 bool ice_fdir_has_frag(enum ice_fltr_ptype flow)
1994 if (flow == ICE_FLTR_PTYPE_FRAG_IPV4 ||
1995 flow == ICE_FLTR_PTYPE_FRAG_IPV6)
2002 * ice_fdir_find_fltr_by_idx - find filter with idx
2003 * @hw: pointer to hardware structure
2004 * @fltr_idx: index to find.
2006 * Returns pointer to filter if found or null
2008 struct ice_fdir_fltr *
2009 ice_fdir_find_fltr_by_idx(struct ice_hw *hw, u32 fltr_idx)
2011 struct ice_fdir_fltr *rule;
2013 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2015 /* rule ID found in the list */
2016 if (fltr_idx == rule->fltr_id)
2018 if (fltr_idx < rule->fltr_id)
2025 * ice_fdir_list_add_fltr - add a new node to the flow director filter list
2026 * @hw: hardware structure
2027 * @fltr: filter node to add to structure
2029 void ice_fdir_list_add_fltr(struct ice_hw *hw, struct ice_fdir_fltr *fltr)
2031 struct ice_fdir_fltr *rule, *parent = NULL;
2033 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2035 /* rule ID found or pass its spot in the list */
2036 if (rule->fltr_id >= fltr->fltr_id)
2042 LIST_ADD_AFTER(&fltr->fltr_node, &parent->fltr_node);
2044 LIST_ADD(&fltr->fltr_node, &hw->fdir_list_head);
2048 * ice_fdir_update_cntrs - increment / decrement filter counter
2049 * @hw: pointer to hardware structure
2050 * @flow: filter flow type
2051 * @acl_fltr: true indicates an ACL filter
2052 * @add: true implies filters added
2055 ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,
2056 bool acl_fltr, bool add)
2060 incr = add ? 1 : -1;
2061 hw->fdir_active_fltr += incr;
2062 if (flow == ICE_FLTR_PTYPE_NONF_NONE || flow >= ICE_FLTR_PTYPE_MAX) {
2063 ice_debug(hw, ICE_DBG_SW, "Unknown filter type %d\n", flow);
2066 hw->acl_fltr_cnt[flow] += incr;
2068 hw->fdir_fltr_cnt[flow] += incr;
2073 * ice_cmp_ipv6_addr - compare 2 IP v6 addresses
2077 * Returns 0 on equal, returns non-0 if different
2079 static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)
2081 return memcmp(a, b, 4 * sizeof(__be32));
2085 * ice_fdir_comp_rules - compare 2 filters
2086 * @a: a Flow Director filter data structure
2087 * @b: a Flow Director filter data structure
2088 * @v6: bool true if v6 filter
2090 * Returns true if the filters match
2093 ice_fdir_comp_rules(struct ice_fdir_fltr *a, struct ice_fdir_fltr *b, bool v6)
2095 enum ice_fltr_ptype flow_type = a->flow_type;
2097 /* The calling function already checks that the two filters have the
2101 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2102 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2103 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP) {
2104 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
2105 a->ip.v4.src_ip == b->ip.v4.src_ip &&
2106 a->ip.v4.dst_port == b->ip.v4.dst_port &&
2107 a->ip.v4.src_port == b->ip.v4.src_port)
2109 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
2110 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
2111 a->ip.v4.src_ip == b->ip.v4.src_ip &&
2112 a->ip.v4.l4_header == b->ip.v4.l4_header &&
2113 a->ip.v4.proto == b->ip.v4.proto &&
2114 a->ip.v4.ip_ver == b->ip.v4.ip_ver &&
2115 a->ip.v4.tos == b->ip.v4.tos)
2119 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_UDP ||
2120 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_TCP ||
2121 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_SCTP) {
2122 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
2123 a->ip.v6.src_port == b->ip.v6.src_port &&
2124 !ice_cmp_ipv6_addr(a->ip.v6.dst_ip,
2126 !ice_cmp_ipv6_addr(a->ip.v6.src_ip,
2129 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
2130 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
2131 a->ip.v6.src_port == b->ip.v6.src_port)
2140 * ice_fdir_is_dup_fltr - test if filter is already in list for PF
2141 * @hw: hardware data structure
2142 * @input: Flow Director filter data structure
2144 * Returns true if the filter is found in the list
2146 bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
2148 struct ice_fdir_fltr *rule;
2151 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2153 enum ice_fltr_ptype flow_type;
2155 if (rule->flow_type != input->flow_type)
2158 flow_type = input->flow_type;
2159 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2160 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2161 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP ||
2162 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
2163 ret = ice_fdir_comp_rules(rule, input, false);
2165 ret = ice_fdir_comp_rules(rule, input, true);
2167 if (rule->fltr_id == input->fltr_id &&
2168 rule->q_index != input->q_index)
2179 * ice_clear_pf_fd_table - admin command to clear FD table for PF
2180 * @hw: hardware data structure
2182 * Clears FD table entries for a PF by issuing admin command (direct, 0x0B06)
2184 enum ice_status ice_clear_pf_fd_table(struct ice_hw *hw)
2186 struct ice_aqc_clear_fd_table *cmd;
2187 struct ice_aq_desc desc;
2189 cmd = &desc.params.clear_fd_table;
2190 ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_clear_fd_table);
2191 cmd->clear_type = CL_FD_VM_VF_TYPE_PF_IDX;
2192 /* vsi_index must be 0 to clear FD table for a PF */
2193 cmd->vsi_index = CPU_TO_LE16(0);
2195 return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);