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_tcpv6_pkt[] = {
522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
524 0x00, 0x00, 0x00, 0x14, 0x06, 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, 0x00, 0x00,
529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
530 0x00, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00,
534 static const u8 ice_fdir_udpv6_pkt[] = {
535 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
536 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
537 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 0x00, 0x00,
538 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
539 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
541 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
542 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
545 static const u8 ice_fdir_sctpv6_pkt[] = {
546 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
547 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
548 0x00, 0x00, 0x00, 0x0C, 0x84, 0x40, 0x00, 0x00,
549 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
550 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
551 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
552 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
553 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
557 static const u8 ice_fdir_ipv6_pkt[] = {
558 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
559 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
560 0x00, 0x00, 0x00, 0x00, 0x3B, 0x40, 0x00, 0x00,
561 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
562 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
563 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
564 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
567 static const u8 ice_fdir_tcp4_tun_pkt[] = {
568 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
569 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
570 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
571 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
572 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
573 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
574 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
575 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
576 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00,
577 0x40, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
578 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
579 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
580 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
583 static const u8 ice_fdir_udp4_tun_pkt[] = {
584 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
585 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
586 0x00, 0x4e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
587 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
589 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
590 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
591 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
592 0x45, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00,
593 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
594 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
595 0x00, 0x00, 0x00, 0x00,
598 static const u8 ice_fdir_sctp4_tun_pkt[] = {
599 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
600 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
601 0x00, 0x52, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
602 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
603 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
604 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
605 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
607 0x45, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00,
608 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
609 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
610 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
613 static const u8 ice_fdir_ip4_tun_pkt[] = {
614 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
615 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
616 0x00, 0x46, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
617 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
618 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
619 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
620 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
621 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
622 0x45, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
623 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
624 0x00, 0x00, 0x00, 0x00,
627 static const u8 ice_fdir_tcp6_tun_pkt[] = {
628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
630 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
631 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
632 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
633 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
634 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
635 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
636 0x60, 0x00, 0x00, 0x00, 0x00, 0x14, 0x06, 0x40,
637 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
638 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
639 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
640 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x00,
643 0x00, 0x00, 0x00, 0x00,
646 static const u8 ice_fdir_udp6_tun_pkt[] = {
647 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
648 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
649 0x00, 0x62, 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, 0x08, 0x11, 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,
663 static const u8 ice_fdir_sctp6_tun_pkt[] = {
664 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
665 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
666 0x00, 0x66, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
669 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
671 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
672 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x84, 0x40,
673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
674 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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,
681 static const u8 ice_fdir_ip6_tun_pkt[] = {
682 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
683 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
684 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
685 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
687 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
688 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
690 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x40,
691 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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,
697 /* Flow Director no-op training packet table */
698 static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
700 ICE_FLTR_PTYPE_NONF_IPV4_TCP,
701 sizeof(ice_fdir_tcpv4_pkt), ice_fdir_tcpv4_pkt,
702 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
705 ICE_FLTR_PTYPE_NONF_IPV4_UDP,
706 sizeof(ice_fdir_udpv4_pkt), ice_fdir_udpv4_pkt,
707 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
710 ICE_FLTR_PTYPE_NONF_IPV4_SCTP,
711 sizeof(ice_fdir_sctpv4_pkt), ice_fdir_sctpv4_pkt,
712 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
715 ICE_FLTR_PTYPE_NONF_IPV4_OTHER,
716 sizeof(ice_fdir_ipv4_pkt), ice_fdir_ipv4_pkt,
717 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
720 ICE_FLTR_PTYPE_NONF_IPV4_GTPU,
721 sizeof(ice_fdir_ipv4_gtpu4_pkt),
722 ice_fdir_ipv4_gtpu4_pkt,
723 sizeof(ice_fdir_ipv4_gtpu4_pkt),
724 ice_fdir_ipv4_gtpu4_pkt,
727 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH,
728 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
729 ice_fdir_ipv4_gtpu4_eh_pkt,
730 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
731 ice_fdir_ipv4_gtpu4_eh_pkt,
734 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW,
735 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
736 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
737 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
738 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
741 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP,
742 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
743 ice_fdir_ipv4_gtpu4_eh_up_pkt,
744 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
745 ice_fdir_ipv4_gtpu4_eh_up_pkt,
748 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4,
749 sizeof(ice_fdir_ipv4_gtpu4_pkt),
750 ice_fdir_ipv4_gtpu4_pkt,
751 sizeof(ice_fdir_ipv4_gtpu4_pkt),
752 ice_fdir_ipv4_gtpu4_pkt,
755 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP,
756 sizeof(ice_fdir_udp4_gtpu4_pkt),
757 ice_fdir_udp4_gtpu4_pkt,
758 sizeof(ice_fdir_udp4_gtpu4_pkt),
759 ice_fdir_udp4_gtpu4_pkt,
762 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP,
763 sizeof(ice_fdir_tcp4_gtpu4_pkt),
764 ice_fdir_tcp4_gtpu4_pkt,
765 sizeof(ice_fdir_tcp4_gtpu4_pkt),
766 ice_fdir_tcp4_gtpu4_pkt,
769 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4,
770 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
771 ice_fdir_ipv4_gtpu4_eh_pkt,
772 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
773 ice_fdir_ipv4_gtpu4_eh_pkt,
776 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP,
777 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
778 ice_fdir_udp4_gtpu4_eh_pkt,
779 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
780 ice_fdir_udp4_gtpu4_eh_pkt,
783 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP,
784 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
785 ice_fdir_tcp4_gtpu4_eh_pkt,
786 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
787 ice_fdir_tcp4_gtpu4_eh_pkt,
790 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4,
791 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
792 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
793 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
794 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
797 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP,
798 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
799 ice_fdir_udp4_gtpu4_eh_dw_pkt,
800 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
801 ice_fdir_udp4_gtpu4_eh_dw_pkt,
804 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP,
805 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
806 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
807 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
808 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
811 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4,
812 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
813 ice_fdir_ipv4_gtpu4_eh_up_pkt,
814 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
815 ice_fdir_ipv4_gtpu4_eh_up_pkt,
818 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP,
819 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
820 ice_fdir_udp4_gtpu4_eh_up_pkt,
821 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
822 ice_fdir_udp4_gtpu4_eh_up_pkt,
825 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP,
826 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
827 ice_fdir_tcp4_gtpu4_eh_up_pkt,
828 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
829 ice_fdir_tcp4_gtpu4_eh_up_pkt,
832 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP,
833 sizeof(ice_fdir_icmp4_gtpu4_pkt),
834 ice_fdir_icmp4_gtpu4_pkt,
835 sizeof(ice_fdir_icmp4_gtpu4_pkt),
836 ice_fdir_icmp4_gtpu4_pkt,
839 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER,
840 sizeof(ice_fdir_ipv4_gtpu4_pkt),
841 ice_fdir_ipv4_gtpu4_pkt,
842 sizeof(ice_fdir_ipv4_gtpu4_pkt),
843 ice_fdir_ipv4_gtpu4_pkt,
846 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6,
847 sizeof(ice_fdir_ipv6_gtpu4_pkt),
848 ice_fdir_ipv6_gtpu4_pkt,
849 sizeof(ice_fdir_ipv6_gtpu4_pkt),
850 ice_fdir_ipv6_gtpu4_pkt,
853 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP,
854 sizeof(ice_fdir_udp6_gtpu4_pkt),
855 ice_fdir_udp6_gtpu4_pkt,
856 sizeof(ice_fdir_udp6_gtpu4_pkt),
857 ice_fdir_udp6_gtpu4_pkt,
860 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP,
861 sizeof(ice_fdir_tcp6_gtpu4_pkt),
862 ice_fdir_tcp6_gtpu4_pkt,
863 sizeof(ice_fdir_tcp6_gtpu4_pkt),
864 ice_fdir_tcp6_gtpu4_pkt,
867 ICE_FLTR_PTYPE_NONF_IPV6_GTPU,
868 sizeof(ice_fdir_ipv6_gtpu6_pkt),
869 ice_fdir_ipv6_gtpu6_pkt,
870 sizeof(ice_fdir_ipv6_gtpu6_pkt),
871 ice_fdir_ipv6_gtpu6_pkt,
874 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH,
875 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
876 ice_fdir_ipv6_gtpu6_eh_pkt,
877 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
878 ice_fdir_ipv6_gtpu6_eh_pkt,
881 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW,
882 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
883 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
884 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
885 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
888 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP,
889 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
890 ice_fdir_ipv6_gtpu6_eh_up_pkt,
891 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
892 ice_fdir_ipv6_gtpu6_eh_up_pkt,
895 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER,
896 sizeof(ice_fdir_ipv6_gtpu6_pkt),
897 ice_fdir_ipv6_gtpu6_pkt,
898 sizeof(ice_fdir_ipv6_gtpu6_pkt),
899 ice_fdir_ipv6_gtpu6_pkt,
902 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER,
903 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
904 ice_fdir_ipv4_gtpu4_eh_pkt,
905 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
906 ice_fdir_ipv4_gtpu4_eh_pkt,
909 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER,
910 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
911 ice_fdir_ipv6_gtpu6_eh_pkt,
912 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
913 ice_fdir_ipv6_gtpu6_eh_pkt,
916 ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3,
917 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
918 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
921 ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3,
922 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
923 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
926 ICE_FLTR_PTYPE_NONF_IPV4_ESP,
927 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
928 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
931 ICE_FLTR_PTYPE_NONF_IPV6_ESP,
932 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
933 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
936 ICE_FLTR_PTYPE_NONF_IPV4_AH,
937 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
938 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
941 ICE_FLTR_PTYPE_NONF_IPV6_AH,
942 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
943 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
946 ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP,
947 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
948 ice_fdir_ipv4_nat_t_esp_pkt,
949 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
950 ice_fdir_ipv4_nat_t_esp_pkt,
953 ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP,
954 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
955 ice_fdir_ipv6_nat_t_esp_pkt,
956 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
957 ice_fdir_ipv6_nat_t_esp_pkt,
960 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE,
961 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
962 ice_fdir_ipv4_pfcp_node_pkt,
963 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
964 ice_fdir_ipv4_pfcp_node_pkt,
967 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION,
968 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
969 ice_fdir_ipv4_pfcp_session_pkt,
970 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
971 ice_fdir_ipv4_pfcp_session_pkt,
974 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE,
975 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
976 ice_fdir_ipv6_pfcp_node_pkt,
977 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
978 ice_fdir_ipv6_pfcp_node_pkt,
981 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION,
982 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
983 ice_fdir_ipv6_pfcp_session_pkt,
984 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
985 ice_fdir_ipv6_pfcp_session_pkt,
988 ICE_FLTR_PTYPE_NON_IP_L2,
989 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
990 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
993 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN,
994 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
995 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
998 ICE_FLTR_PTYPE_NONF_ECPRI_TP0,
999 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1000 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1003 ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0,
1004 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1005 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1006 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1007 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1010 ICE_FLTR_PTYPE_NONF_IPV6_TCP,
1011 sizeof(ice_fdir_tcpv6_pkt), ice_fdir_tcpv6_pkt,
1012 sizeof(ice_fdir_tcp6_tun_pkt), ice_fdir_tcp6_tun_pkt,
1015 ICE_FLTR_PTYPE_NONF_IPV6_UDP,
1016 sizeof(ice_fdir_udpv6_pkt), ice_fdir_udpv6_pkt,
1017 sizeof(ice_fdir_udp6_tun_pkt), ice_fdir_udp6_tun_pkt,
1020 ICE_FLTR_PTYPE_NONF_IPV6_SCTP,
1021 sizeof(ice_fdir_sctpv6_pkt), ice_fdir_sctpv6_pkt,
1022 sizeof(ice_fdir_sctp6_tun_pkt), ice_fdir_sctp6_tun_pkt,
1025 ICE_FLTR_PTYPE_NONF_IPV6_OTHER,
1026 sizeof(ice_fdir_ipv6_pkt), ice_fdir_ipv6_pkt,
1027 sizeof(ice_fdir_ip6_tun_pkt), ice_fdir_ip6_tun_pkt,
1031 #define ICE_FDIR_NUM_PKT ARRAY_SIZE(ice_fdir_pkt)
1034 * ice_set_dflt_val_fd_desc
1035 * @fd_fltr_ctx: pointer to fd filter descriptor
1037 static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
1039 fd_fltr_ctx->comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1040 fd_fltr_ctx->comp_report = ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL;
1041 fd_fltr_ctx->fd_space = ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST;
1042 fd_fltr_ctx->cnt_ena = ICE_FXD_FLTR_QW0_STAT_ENA_PKTS;
1043 fd_fltr_ctx->evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE;
1044 fd_fltr_ctx->toq = ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX;
1045 fd_fltr_ctx->toq_prio = ICE_FXD_FLTR_QW0_TO_Q_PRIO1;
1046 fd_fltr_ctx->dpu_recipe = ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT;
1047 fd_fltr_ctx->drop = ICE_FXD_FLTR_QW0_DROP_NO;
1048 fd_fltr_ctx->flex_prio = ICE_FXD_FLTR_QW0_FLEX_PRI_NONE;
1049 fd_fltr_ctx->flex_mdid = ICE_FXD_FLTR_QW0_FLEX_MDID0;
1050 fd_fltr_ctx->flex_val = ICE_FXD_FLTR_QW0_FLEX_VAL0;
1051 fd_fltr_ctx->dtype = ICE_TX_DESC_DTYPE_FLTR_PROG;
1052 fd_fltr_ctx->desc_prof_prio = ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO;
1053 fd_fltr_ctx->desc_prof = ICE_FXD_FLTR_QW1_PROF_ZERO;
1054 fd_fltr_ctx->swap = ICE_FXD_FLTR_QW1_SWAP_SET;
1055 fd_fltr_ctx->fdid_prio = ICE_FXD_FLTR_QW1_FDID_PRI_ONE;
1056 fd_fltr_ctx->fdid_mdid = ICE_FXD_FLTR_QW1_FDID_MDID_FD;
1057 fd_fltr_ctx->fdid = ICE_FXD_FLTR_QW1_FDID_ZERO;
1061 * ice_set_fd_desc_val
1062 * @ctx: pointer to fd filter descriptor context
1063 * @fdir_desc: populated with fd filter descriptor values
1066 ice_set_fd_desc_val(struct ice_fd_fltr_desc_ctx *ctx,
1067 struct ice_fltr_desc *fdir_desc)
1071 /* prep QW0 of FD filter programming desc */
1072 qword = ((u64)ctx->qindex << ICE_FXD_FLTR_QW0_QINDEX_S) &
1073 ICE_FXD_FLTR_QW0_QINDEX_M;
1074 qword |= ((u64)ctx->comp_q << ICE_FXD_FLTR_QW0_COMP_Q_S) &
1075 ICE_FXD_FLTR_QW0_COMP_Q_M;
1076 qword |= ((u64)ctx->comp_report << ICE_FXD_FLTR_QW0_COMP_REPORT_S) &
1077 ICE_FXD_FLTR_QW0_COMP_REPORT_M;
1078 qword |= ((u64)ctx->fd_space << ICE_FXD_FLTR_QW0_FD_SPACE_S) &
1079 ICE_FXD_FLTR_QW0_FD_SPACE_M;
1080 qword |= ((u64)ctx->cnt_index << ICE_FXD_FLTR_QW0_STAT_CNT_S) &
1081 ICE_FXD_FLTR_QW0_STAT_CNT_M;
1082 qword |= ((u64)ctx->cnt_ena << ICE_FXD_FLTR_QW0_STAT_ENA_S) &
1083 ICE_FXD_FLTR_QW0_STAT_ENA_M;
1084 qword |= ((u64)ctx->evict_ena << ICE_FXD_FLTR_QW0_EVICT_ENA_S) &
1085 ICE_FXD_FLTR_QW0_EVICT_ENA_M;
1086 qword |= ((u64)ctx->toq << ICE_FXD_FLTR_QW0_TO_Q_S) &
1087 ICE_FXD_FLTR_QW0_TO_Q_M;
1088 qword |= ((u64)ctx->toq_prio << ICE_FXD_FLTR_QW0_TO_Q_PRI_S) &
1089 ICE_FXD_FLTR_QW0_TO_Q_PRI_M;
1090 qword |= ((u64)ctx->dpu_recipe << ICE_FXD_FLTR_QW0_DPU_RECIPE_S) &
1091 ICE_FXD_FLTR_QW0_DPU_RECIPE_M;
1092 qword |= ((u64)ctx->drop << ICE_FXD_FLTR_QW0_DROP_S) &
1093 ICE_FXD_FLTR_QW0_DROP_M;
1094 qword |= ((u64)ctx->flex_prio << ICE_FXD_FLTR_QW0_FLEX_PRI_S) &
1095 ICE_FXD_FLTR_QW0_FLEX_PRI_M;
1096 qword |= ((u64)ctx->flex_mdid << ICE_FXD_FLTR_QW0_FLEX_MDID_S) &
1097 ICE_FXD_FLTR_QW0_FLEX_MDID_M;
1098 qword |= ((u64)ctx->flex_val << ICE_FXD_FLTR_QW0_FLEX_VAL_S) &
1099 ICE_FXD_FLTR_QW0_FLEX_VAL_M;
1100 fdir_desc->qidx_compq_space_stat = CPU_TO_LE64(qword);
1102 /* prep QW1 of FD filter programming desc */
1103 qword = ((u64)ctx->dtype << ICE_FXD_FLTR_QW1_DTYPE_S) &
1104 ICE_FXD_FLTR_QW1_DTYPE_M;
1105 qword |= ((u64)ctx->pcmd << ICE_FXD_FLTR_QW1_PCMD_S) &
1106 ICE_FXD_FLTR_QW1_PCMD_M;
1107 qword |= ((u64)ctx->desc_prof_prio << ICE_FXD_FLTR_QW1_PROF_PRI_S) &
1108 ICE_FXD_FLTR_QW1_PROF_PRI_M;
1109 qword |= ((u64)ctx->desc_prof << ICE_FXD_FLTR_QW1_PROF_S) &
1110 ICE_FXD_FLTR_QW1_PROF_M;
1111 qword |= ((u64)ctx->fd_vsi << ICE_FXD_FLTR_QW1_FD_VSI_S) &
1112 ICE_FXD_FLTR_QW1_FD_VSI_M;
1113 qword |= ((u64)ctx->swap << ICE_FXD_FLTR_QW1_SWAP_S) &
1114 ICE_FXD_FLTR_QW1_SWAP_M;
1115 qword |= ((u64)ctx->fdid_prio << ICE_FXD_FLTR_QW1_FDID_PRI_S) &
1116 ICE_FXD_FLTR_QW1_FDID_PRI_M;
1117 qword |= ((u64)ctx->fdid_mdid << ICE_FXD_FLTR_QW1_FDID_MDID_S) &
1118 ICE_FXD_FLTR_QW1_FDID_MDID_M;
1119 qword |= ((u64)ctx->fdid << ICE_FXD_FLTR_QW1_FDID_S) &
1120 ICE_FXD_FLTR_QW1_FDID_M;
1121 fdir_desc->dtype_cmd_vsi_fdid = CPU_TO_LE64(qword);
1125 * ice_fdir_get_prgm_desc - set a fdir descriptor from a fdir filter struct
1126 * @hw: pointer to the hardware structure
1128 * @fdesc: filter descriptor
1129 * @add: if add is true, this is an add operation, false implies delete
1132 ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
1133 struct ice_fltr_desc *fdesc, bool add)
1135 struct ice_fd_fltr_desc_ctx fdir_fltr_ctx = { 0 };
1137 /* set default context info */
1138 ice_set_dflt_val_fd_desc(&fdir_fltr_ctx);
1140 /* change sideband filtering values */
1141 fdir_fltr_ctx.fdid = input->fltr_id;
1142 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DROP_PKT) {
1143 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
1144 fdir_fltr_ctx.qindex = 0;
1145 } else if (input->dest_ctl ==
1146 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
1147 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1148 fdir_fltr_ctx.qindex = 0;
1150 if (input->dest_ctl ==
1151 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP)
1152 fdir_fltr_ctx.toq = input->q_region;
1153 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1154 fdir_fltr_ctx.qindex = input->q_index;
1156 fdir_fltr_ctx.cnt_ena = input->cnt_ena;
1157 fdir_fltr_ctx.cnt_index = input->cnt_index;
1158 fdir_fltr_ctx.fd_vsi = ice_get_hw_vsi_num(hw, input->dest_vsi);
1159 fdir_fltr_ctx.evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE;
1160 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER)
1161 fdir_fltr_ctx.toq_prio = 0;
1163 fdir_fltr_ctx.toq_prio = 3;
1164 fdir_fltr_ctx.pcmd = add ? ICE_FXD_FLTR_QW1_PCMD_ADD :
1165 ICE_FXD_FLTR_QW1_PCMD_REMOVE;
1166 fdir_fltr_ctx.swap = ICE_FXD_FLTR_QW1_SWAP_NOT_SET;
1167 fdir_fltr_ctx.comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1168 fdir_fltr_ctx.comp_report = input->comp_report;
1169 fdir_fltr_ctx.fdid_prio = input->fdid_prio;
1170 fdir_fltr_ctx.desc_prof = 1;
1171 fdir_fltr_ctx.desc_prof_prio = 3;
1172 ice_set_fd_desc_val(&fdir_fltr_ctx, fdesc);
1176 * ice_alloc_fd_res_cntr - obtain counter resource for FD type
1177 * @hw: pointer to the hardware structure
1178 * @cntr_id: returns counter index
1180 enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id)
1182 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1183 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1187 * ice_free_fd_res_cntr - Free counter resource for FD type
1188 * @hw: pointer to the hardware structure
1189 * @cntr_id: counter index to be freed
1191 enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id)
1193 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1194 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1198 * ice_alloc_fd_guar_item - allocate resource for FD guaranteed entries
1199 * @hw: pointer to the hardware structure
1200 * @cntr_id: returns counter index
1201 * @num_fltr: number of filter entries to be allocated
1204 ice_alloc_fd_guar_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1206 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1207 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1212 * ice_free_fd_guar_item - Free flow director guaranteed entries
1213 * @hw: pointer to the hardware structure
1214 * @cntr_id: counter index that needs to be freed
1215 * @num_fltr: number of filters to be freed
1218 ice_free_fd_guar_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1220 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1221 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1226 * ice_alloc_fd_shrd_item - allocate resource for flow director shared entries
1227 * @hw: pointer to the hardware structure
1228 * @cntr_id: returns counter index
1229 * @num_fltr: number of filter entries to be allocated
1232 ice_alloc_fd_shrd_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1234 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1235 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1240 * ice_free_fd_shrd_item - Free flow director shared entries
1241 * @hw: pointer to the hardware structure
1242 * @cntr_id: counter index that needs to be freed
1243 * @num_fltr: number of filters to be freed
1246 ice_free_fd_shrd_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1248 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1249 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1254 * ice_get_fdir_cnt_all - get the number of Flow Director filters
1255 * @hw: hardware data structure
1257 * Returns the number of filters available on device
1259 int ice_get_fdir_cnt_all(struct ice_hw *hw)
1261 return hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
1265 * ice_pkt_insert_ipv6_addr - insert a be32 IPv6 address into a memory buffer.
1266 * @pkt: packet buffer
1267 * @offset: offset into buffer
1268 * @addr: IPv6 address to convert and insert into pkt at offset
1270 static void ice_pkt_insert_ipv6_addr(u8 *pkt, int offset, __be32 *addr)
1274 for (idx = 0; idx < ICE_IPV6_ADDR_LEN_AS_U32; idx++)
1275 ice_memcpy(pkt + offset + idx * sizeof(*addr), &addr[idx],
1276 sizeof(*addr), ICE_NONDMA_TO_NONDMA);
1280 * ice_pkt_insert_u6_qfi - insert a u6 value qfi into a memory buffer for gtpu
1281 * @pkt: packet buffer
1282 * @offset: offset into buffer
1283 * @data: 8 bit value to convert and insert into pkt at offset
1285 * This function is designed for inserting qfi (6 bits) for gtpu.
1287 static void ice_pkt_insert_u6_qfi(u8 *pkt, int offset, u8 data)
1291 ret = (data & 0x3F) + (*(pkt + offset) & 0xC0);
1292 ice_memcpy(pkt + offset, &ret, sizeof(ret), ICE_NONDMA_TO_NONDMA);
1296 * ice_pkt_insert_u8 - insert a u8 value into a memory buffer.
1297 * @pkt: packet buffer
1298 * @offset: offset into buffer
1299 * @data: 8 bit value to convert and insert into pkt at offset
1301 static void ice_pkt_insert_u8(u8 *pkt, int offset, u8 data)
1303 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1307 * ice_pkt_insert_u8_tc - insert a u8 value into a memory buffer for TC ipv6.
1308 * @pkt: packet buffer
1309 * @offset: offset into buffer
1310 * @data: 8 bit value to convert and insert into pkt at offset
1312 * This function is designed for inserting Traffic Class (TC) for IPv6,
1313 * since that TC is not aligned in number of bytes. Here we split it out
1314 * into two part and fill each byte with data copy from pkt, then insert
1315 * the two bytes data one by one.
1317 static void ice_pkt_insert_u8_tc(u8 *pkt, int offset, u8 data)
1321 high = (data >> 4) + (*(pkt + offset) & 0xF0);
1322 ice_memcpy(pkt + offset, &high, sizeof(high), ICE_NONDMA_TO_NONDMA);
1324 low = (*(pkt + offset + 1) & 0x0F) + ((data & 0x0F) << 4);
1325 ice_memcpy(pkt + offset + 1, &low, sizeof(low), ICE_NONDMA_TO_NONDMA);
1329 * ice_pkt_insert_u16 - insert a be16 value into a memory buffer.
1330 * @pkt: packet buffer
1331 * @offset: offset into buffer
1332 * @data: 16 bit value to convert and insert into pkt at offset
1334 static void ice_pkt_insert_u16(u8 *pkt, int offset, __be16 data)
1336 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1340 * ice_pkt_insert_u32 - insert a be32 value into a memory buffer.
1341 * @pkt: packet buffer
1342 * @offset: offset into buffer
1343 * @data: 32 bit value to convert and insert into pkt at offset
1345 static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
1347 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1351 * ice_pkt_insert_mac_addr - insert a MAC addr into a memory buffer.
1352 * @pkt: packet buffer
1353 * @addr: MAC address to convert and insert into pkt at offset
1355 static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
1357 ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
1361 * ice_fdir_get_open_tunnel_port
1362 * @hw: pointer to the hardware structure
1364 * @port: returns open port
1366 * returns an open tunnel port specified for this flow type
1368 static enum ice_status
1369 ice_fdir_get_open_tunnel_port(struct ice_hw *hw, enum ice_fltr_ptype flow,
1373 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1375 if (!ice_get_open_tunnel_port(hw, TNL_ECPRI, port))
1376 return ICE_ERR_DOES_NOT_EXIST;
1379 if (!ice_get_open_tunnel_port(hw, TNL_VXLAN, port) &&
1380 !ice_get_open_tunnel_port(hw, TNL_GENEVE, port))
1381 return ICE_ERR_DOES_NOT_EXIST;
1388 * ice_fdir_get_gen_prgm_pkt - generate a training packet
1389 * @hw: pointer to the hardware structure
1390 * @input: flow director filter data structure
1391 * @pkt: pointer to return filter packet
1392 * @frag: generate a fragment packet
1393 * @tun: true implies generate a tunnel packet
1396 ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
1397 u8 *pkt, bool frag, bool tun)
1399 enum ice_fltr_ptype flow;
1404 if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1405 switch (input->ip.v4.proto) {
1406 case ICE_IP_PROTO_TCP:
1407 flow = ICE_FLTR_PTYPE_NONF_IPV4_TCP;
1409 case ICE_IP_PROTO_UDP:
1410 flow = ICE_FLTR_PTYPE_NONF_IPV4_UDP;
1412 case ICE_IP_PROTO_SCTP:
1413 flow = ICE_FLTR_PTYPE_NONF_IPV4_SCTP;
1416 flow = ICE_FLTR_PTYPE_NONF_IPV4_OTHER;
1419 } else if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1420 switch (input->ip.v6.proto) {
1421 case ICE_IP_PROTO_TCP:
1422 flow = ICE_FLTR_PTYPE_NONF_IPV6_TCP;
1424 case ICE_IP_PROTO_UDP:
1425 flow = ICE_FLTR_PTYPE_NONF_IPV6_UDP;
1427 case ICE_IP_PROTO_SCTP:
1428 flow = ICE_FLTR_PTYPE_NONF_IPV6_SCTP;
1431 flow = ICE_FLTR_PTYPE_NONF_IPV6_OTHER;
1435 flow = input->flow_type;
1438 for (idx = 0; idx < ICE_FDIR_NUM_PKT; idx++)
1439 if (ice_fdir_pkt[idx].flow == flow)
1441 if (idx == ICE_FDIR_NUM_PKT)
1442 return ICE_ERR_PARAM;
1444 ice_memcpy(pkt, ice_fdir_pkt[idx].pkt,
1445 ice_fdir_pkt[idx].pkt_len, ICE_NONDMA_TO_NONDMA);
1448 if (!ice_fdir_pkt[idx].tun_pkt)
1449 return ICE_ERR_PARAM;
1452 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1453 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1454 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1455 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1456 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1457 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1458 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1459 ice_fdir_pkt[idx].tun_pkt_len,
1460 ICE_NONDMA_TO_NONDMA);
1461 loc = &pkt[ICE_FDIR_GTPU_IP_INNER_PKT_OFF];
1463 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1464 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1465 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1466 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1467 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1468 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1469 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1470 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1471 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1472 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1473 ice_fdir_pkt[idx].tun_pkt_len,
1474 ICE_NONDMA_TO_NONDMA);
1475 loc = &pkt[ICE_FDIR_GTPU_EH_INNER_PKT_OFF];
1478 if (ice_fdir_get_open_tunnel_port(hw, flow, &tnl_port))
1479 return ICE_ERR_DOES_NOT_EXIST;
1481 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1482 ice_fdir_pkt[idx].tun_pkt_len,
1483 ICE_NONDMA_TO_NONDMA);
1484 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_DST_PORT_OFFSET,
1486 loc = &pkt[ICE_FDIR_TUN_PKT_OFF];
1491 /* Reverse the src and dst, since the HW expects them to be from Tx
1492 * perspective. The input from user is from Rx filter perspective.
1495 case ICE_FLTR_PTYPE_NONF_IPV4_TCP:
1496 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1497 input->ip.v4.src_ip);
1498 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1499 input->ip.v4.src_port);
1500 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1501 input->ip.v4.dst_ip);
1502 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1503 input->ip.v4.dst_port);
1504 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1505 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1506 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1508 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_DF;
1510 case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
1511 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1512 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1513 input->ext_data_outer.src_mac);
1514 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1515 input->ip_outer.v4.dst_ip);
1516 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1517 input->ip_outer.v4.src_ip);
1518 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1519 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1520 input->ip.v4.src_ip);
1521 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1522 input->ip.v4.src_port);
1523 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1524 input->ip.v4.dst_ip);
1525 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1526 input->ip.v4.dst_port);
1527 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1528 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1529 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1530 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1532 case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
1533 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1534 input->ip.v4.src_ip);
1535 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1536 input->ip.v4.src_port);
1537 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1538 input->ip.v4.dst_ip);
1539 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1540 input->ip.v4.dst_port);
1541 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1542 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1543 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1545 case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
1546 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1547 input->ip.v4.src_ip);
1548 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1549 input->ip.v4.dst_ip);
1550 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1551 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1552 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1553 input->ip.v4.proto);
1554 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1556 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN:
1557 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1558 ice_pkt_insert_mac_addr(pkt + ETH_ALEN, input->ext_data_outer.src_mac);
1559 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1560 input->ip_outer.v4.dst_ip);
1561 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1562 input->ip_outer.v4.src_ip);
1563 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1564 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1565 input->vxlan_data.vni);
1566 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1567 input->ip.v4.src_ip);
1568 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1569 input->ip.v4.src_port);
1570 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1571 input->ip.v4.dst_ip);
1572 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1573 input->ip.v4.dst_port);
1574 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1575 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1576 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1577 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1579 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU:
1580 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1581 input->ip.v4.src_ip);
1582 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1583 input->ip.v4.dst_ip);
1584 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1585 input->gtpu_data.teid);
1587 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1588 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1589 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1590 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1591 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1592 input->ip.v4.src_ip);
1593 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1594 input->ip.v4.dst_ip);
1595 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1596 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1597 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_PROTO_OFFSET,
1598 input->ip.v4.proto);
1600 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH:
1601 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW:
1602 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP:
1603 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1604 input->ip.v4.src_ip);
1605 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1606 input->ip.v4.dst_ip);
1607 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1608 input->gtpu_data.teid);
1609 ice_pkt_insert_u6_qfi(loc, ICE_IPV4_GTPU_QFI_OFFSET,
1610 input->gtpu_data.qfi);
1612 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1613 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1614 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1615 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1616 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1617 input->ip.v4.src_ip);
1618 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_DST_PORT_OFFSET,
1619 input->ip.v4.src_port);
1620 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1621 input->ip.v4.dst_ip);
1622 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_SRC_PORT_OFFSET,
1623 input->ip.v4.dst_port);
1624 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1625 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1627 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1628 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1629 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1630 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1631 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1632 input->ip.v4.src_ip);
1633 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_DST_PORT_OFFSET,
1634 input->ip.v4.src_port);
1635 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1636 input->ip.v4.dst_ip);
1637 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_SRC_PORT_OFFSET,
1638 input->ip.v4.dst_port);
1639 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1640 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1642 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1643 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1644 input->ip.v6.src_ip);
1645 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1646 input->ip.v6.dst_ip);
1647 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1648 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1649 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_PROTO_OFFSET,
1650 input->ip.v6.proto);
1652 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1653 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1654 input->ip.v6.src_ip);
1655 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1656 input->ip.v6.dst_ip);
1657 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_DST_PORT_OFFSET,
1658 input->ip.v6.src_port);
1659 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_SRC_PORT_OFFSET,
1660 input->ip.v6.dst_port);
1661 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1662 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1664 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1665 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1666 input->ip.v6.src_ip);
1667 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1668 input->ip.v6.dst_ip);
1669 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_DST_PORT_OFFSET,
1670 input->ip.v6.src_port);
1671 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_SRC_PORT_OFFSET,
1672 input->ip.v6.dst_port);
1673 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1674 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1676 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU:
1677 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER:
1678 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1679 input->ip.v6.src_ip);
1680 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1681 input->ip.v6.dst_ip);
1682 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1683 input->gtpu_data.teid);
1685 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH:
1686 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW:
1687 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP:
1688 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER:
1689 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1690 input->ip.v6.src_ip);
1691 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1692 input->ip.v6.dst_ip);
1693 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1694 input->gtpu_data.teid);
1695 ice_pkt_insert_u6_qfi(loc, ICE_IPV6_GTPU_QFI_OFFSET,
1696 input->gtpu_data.qfi);
1698 case ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3:
1699 ice_pkt_insert_u32(loc, ICE_IPV4_L2TPV3_SESS_ID_OFFSET,
1700 input->l2tpv3_data.session_id);
1702 case ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3:
1703 ice_pkt_insert_u32(loc, ICE_IPV6_L2TPV3_SESS_ID_OFFSET,
1704 input->l2tpv3_data.session_id);
1706 case ICE_FLTR_PTYPE_NONF_IPV4_ESP:
1707 ice_pkt_insert_u32(loc, ICE_IPV4_ESP_SPI_OFFSET,
1708 input->ip.v4.sec_parm_idx);
1710 case ICE_FLTR_PTYPE_NONF_IPV6_ESP:
1711 ice_pkt_insert_u32(loc, ICE_IPV6_ESP_SPI_OFFSET,
1712 input->ip.v6.sec_parm_idx);
1714 case ICE_FLTR_PTYPE_NONF_IPV4_AH:
1715 ice_pkt_insert_u32(loc, ICE_IPV4_AH_SPI_OFFSET,
1716 input->ip.v4.sec_parm_idx);
1718 case ICE_FLTR_PTYPE_NONF_IPV6_AH:
1719 ice_pkt_insert_u32(loc, ICE_IPV6_AH_SPI_OFFSET,
1720 input->ip.v6.sec_parm_idx);
1722 case ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP:
1723 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1724 input->ip.v4.src_ip);
1725 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1726 input->ip.v4.dst_ip);
1727 ice_pkt_insert_u32(loc, ICE_IPV4_NAT_T_ESP_SPI_OFFSET,
1728 input->ip.v4.sec_parm_idx);
1730 case ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP:
1731 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1732 input->ip.v6.src_ip);
1733 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1734 input->ip.v6.dst_ip);
1735 ice_pkt_insert_u32(loc, ICE_IPV6_NAT_T_ESP_SPI_OFFSET,
1736 input->ip.v6.sec_parm_idx);
1738 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE:
1739 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION:
1740 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1741 input->ip.v4.dst_port);
1743 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE:
1744 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION:
1745 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1746 input->ip.v6.dst_port);
1748 case ICE_FLTR_PTYPE_NON_IP_L2:
1749 ice_pkt_insert_u16(loc, ICE_MAC_ETHTYPE_OFFSET,
1750 input->ext_data.ether_type);
1752 case ICE_FLTR_PTYPE_NONF_ECPRI_TP0:
1753 ice_pkt_insert_u16(loc, ICE_ECPRI_TP0_PC_ID_OFFSET,
1754 input->ecpri_data.pc_id);
1756 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1757 /* Use pkt instead of loc, since PC_ID is in outer part */
1758 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_ECPRI_TP0_PC_ID_OFFSET,
1759 input->ecpri_data.pc_id);
1761 case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
1762 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1763 input->ip.v6.src_ip);
1764 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1765 input->ip.v6.dst_ip);
1766 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_DST_PORT_OFFSET,
1767 input->ip.v6.src_port);
1768 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_SRC_PORT_OFFSET,
1769 input->ip.v6.dst_port);
1770 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1771 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1772 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1774 case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
1775 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1776 input->ip.v6.src_ip);
1777 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1778 input->ip.v6.dst_ip);
1779 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_DST_PORT_OFFSET,
1780 input->ip.v6.src_port);
1781 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1782 input->ip.v6.dst_port);
1783 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1784 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1785 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1787 case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
1788 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1789 input->ip.v6.src_ip);
1790 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1791 input->ip.v6.dst_ip);
1792 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_DST_PORT_OFFSET,
1793 input->ip.v6.src_port);
1794 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_SRC_PORT_OFFSET,
1795 input->ip.v6.dst_port);
1796 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1797 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1798 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1800 case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
1801 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1802 input->ip.v6.src_ip);
1803 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1804 input->ip.v6.dst_ip);
1805 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1806 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1807 ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
1808 input->ip.v6.proto);
1809 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1812 return ICE_ERR_PARAM;
1815 if (input->flex_fltr)
1816 ice_pkt_insert_u16(loc, input->flex_offset, input->flex_word);
1822 * ice_fdir_get_prgm_pkt - generate a training packet
1823 * @input: flow director filter data structure
1824 * @pkt: pointer to return filter packet
1825 * @frag: generate a fragment packet
1828 ice_fdir_get_prgm_pkt(struct ice_fdir_fltr *input, u8 *pkt, bool frag)
1830 return ice_fdir_get_gen_prgm_pkt(NULL, input, pkt, frag, false);
1834 * ice_fdir_has_frag - does flow type have 2 ptypes
1837 * returns true is there is a fragment packet for this ptype
1839 bool ice_fdir_has_frag(enum ice_fltr_ptype flow)
1841 if (flow == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
1848 * ice_fdir_find_fltr_by_idx - find filter with idx
1849 * @hw: pointer to hardware structure
1850 * @fltr_idx: index to find.
1852 * Returns pointer to filter if found or null
1854 struct ice_fdir_fltr *
1855 ice_fdir_find_fltr_by_idx(struct ice_hw *hw, u32 fltr_idx)
1857 struct ice_fdir_fltr *rule;
1859 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1861 /* rule ID found in the list */
1862 if (fltr_idx == rule->fltr_id)
1864 if (fltr_idx < rule->fltr_id)
1871 * ice_fdir_list_add_fltr - add a new node to the flow director filter list
1872 * @hw: hardware structure
1873 * @fltr: filter node to add to structure
1875 void ice_fdir_list_add_fltr(struct ice_hw *hw, struct ice_fdir_fltr *fltr)
1877 struct ice_fdir_fltr *rule, *parent = NULL;
1879 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1881 /* rule ID found or pass its spot in the list */
1882 if (rule->fltr_id >= fltr->fltr_id)
1888 LIST_ADD_AFTER(&fltr->fltr_node, &parent->fltr_node);
1890 LIST_ADD(&fltr->fltr_node, &hw->fdir_list_head);
1894 * ice_fdir_update_cntrs - increment / decrement filter counter
1895 * @hw: pointer to hardware structure
1896 * @flow: filter flow type
1897 * @acl_fltr: true indicates an ACL filter
1898 * @add: true implies filters added
1901 ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,
1902 bool acl_fltr, bool add)
1906 incr = add ? 1 : -1;
1907 hw->fdir_active_fltr += incr;
1908 if (flow == ICE_FLTR_PTYPE_NONF_NONE || flow >= ICE_FLTR_PTYPE_MAX) {
1909 ice_debug(hw, ICE_DBG_SW, "Unknown filter type %d\n", flow);
1912 hw->acl_fltr_cnt[flow] += incr;
1914 hw->fdir_fltr_cnt[flow] += incr;
1919 * ice_cmp_ipv6_addr - compare 2 IP v6 addresses
1923 * Returns 0 on equal, returns non-0 if different
1925 static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)
1927 return memcmp(a, b, 4 * sizeof(__be32));
1931 * ice_fdir_comp_rules - compare 2 filters
1932 * @a: a Flow Director filter data structure
1933 * @b: a Flow Director filter data structure
1934 * @v6: bool true if v6 filter
1936 * Returns true if the filters match
1939 ice_fdir_comp_rules(struct ice_fdir_fltr *a, struct ice_fdir_fltr *b, bool v6)
1941 enum ice_fltr_ptype flow_type = a->flow_type;
1943 /* The calling function already checks that the two filters have the
1947 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
1948 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
1949 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP) {
1950 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
1951 a->ip.v4.src_ip == b->ip.v4.src_ip &&
1952 a->ip.v4.dst_port == b->ip.v4.dst_port &&
1953 a->ip.v4.src_port == b->ip.v4.src_port)
1955 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1956 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
1957 a->ip.v4.src_ip == b->ip.v4.src_ip &&
1958 a->ip.v4.l4_header == b->ip.v4.l4_header &&
1959 a->ip.v4.proto == b->ip.v4.proto &&
1960 a->ip.v4.ip_ver == b->ip.v4.ip_ver &&
1961 a->ip.v4.tos == b->ip.v4.tos)
1965 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_UDP ||
1966 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_TCP ||
1967 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_SCTP) {
1968 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
1969 a->ip.v6.src_port == b->ip.v6.src_port &&
1970 !ice_cmp_ipv6_addr(a->ip.v6.dst_ip,
1972 !ice_cmp_ipv6_addr(a->ip.v6.src_ip,
1975 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1976 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
1977 a->ip.v6.src_port == b->ip.v6.src_port)
1986 * ice_fdir_is_dup_fltr - test if filter is already in list for PF
1987 * @hw: hardware data structure
1988 * @input: Flow Director filter data structure
1990 * Returns true if the filter is found in the list
1992 bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
1994 struct ice_fdir_fltr *rule;
1997 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1999 enum ice_fltr_ptype flow_type;
2001 if (rule->flow_type != input->flow_type)
2004 flow_type = input->flow_type;
2005 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2006 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2007 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP ||
2008 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
2009 ret = ice_fdir_comp_rules(rule, input, false);
2011 ret = ice_fdir_comp_rules(rule, input, true);
2013 if (rule->fltr_id == input->fltr_id &&
2014 rule->q_index != input->q_index)
2025 * ice_clear_pf_fd_table - admin command to clear FD table for PF
2026 * @hw: hardware data structure
2028 * Clears FD table entries for a PF by issuing admin command (direct, 0x0B06)
2030 enum ice_status ice_clear_pf_fd_table(struct ice_hw *hw)
2032 struct ice_aqc_clear_fd_table *cmd;
2033 struct ice_aq_desc desc;
2035 cmd = &desc.params.clear_fd_table;
2036 ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_clear_fd_table);
2037 cmd->clear_type = CL_FD_VM_VF_TYPE_PF_IDX;
2038 /* vsi_index must be 0 to clear FD table for a PF */
2039 cmd->vsi_index = CPU_TO_LE16(0);
2041 return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);