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_ECPRI_TP0,
1028 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1029 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1032 ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0,
1033 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1034 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1035 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1036 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1039 ICE_FLTR_PTYPE_NONF_IPV6_TCP,
1040 sizeof(ice_fdir_tcpv6_pkt), ice_fdir_tcpv6_pkt,
1041 sizeof(ice_fdir_tcp6_tun_pkt), ice_fdir_tcp6_tun_pkt,
1044 ICE_FLTR_PTYPE_NONF_IPV6_UDP,
1045 sizeof(ice_fdir_udpv6_pkt), ice_fdir_udpv6_pkt,
1046 sizeof(ice_fdir_udp6_tun_pkt), ice_fdir_udp6_tun_pkt,
1049 ICE_FLTR_PTYPE_NONF_IPV6_SCTP,
1050 sizeof(ice_fdir_sctpv6_pkt), ice_fdir_sctpv6_pkt,
1051 sizeof(ice_fdir_sctp6_tun_pkt), ice_fdir_sctp6_tun_pkt,
1054 ICE_FLTR_PTYPE_NONF_IPV6_OTHER,
1055 sizeof(ice_fdir_ipv6_pkt), ice_fdir_ipv6_pkt,
1056 sizeof(ice_fdir_ip6_tun_pkt), ice_fdir_ip6_tun_pkt,
1060 #define ICE_FDIR_NUM_PKT ARRAY_SIZE(ice_fdir_pkt)
1063 * ice_set_dflt_val_fd_desc
1064 * @fd_fltr_ctx: pointer to fd filter descriptor
1066 static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
1068 fd_fltr_ctx->comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1069 fd_fltr_ctx->comp_report = ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL;
1070 fd_fltr_ctx->fd_space = ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST;
1071 fd_fltr_ctx->cnt_ena = ICE_FXD_FLTR_QW0_STAT_ENA_PKTS;
1072 fd_fltr_ctx->evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE;
1073 fd_fltr_ctx->toq = ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX;
1074 fd_fltr_ctx->toq_prio = ICE_FXD_FLTR_QW0_TO_Q_PRIO1;
1075 fd_fltr_ctx->dpu_recipe = ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT;
1076 fd_fltr_ctx->drop = ICE_FXD_FLTR_QW0_DROP_NO;
1077 fd_fltr_ctx->flex_prio = ICE_FXD_FLTR_QW0_FLEX_PRI_NONE;
1078 fd_fltr_ctx->flex_mdid = ICE_FXD_FLTR_QW0_FLEX_MDID0;
1079 fd_fltr_ctx->flex_val = ICE_FXD_FLTR_QW0_FLEX_VAL0;
1080 fd_fltr_ctx->dtype = ICE_TX_DESC_DTYPE_FLTR_PROG;
1081 fd_fltr_ctx->desc_prof_prio = ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO;
1082 fd_fltr_ctx->desc_prof = ICE_FXD_FLTR_QW1_PROF_ZERO;
1083 fd_fltr_ctx->swap = ICE_FXD_FLTR_QW1_SWAP_SET;
1084 fd_fltr_ctx->fdid_prio = ICE_FXD_FLTR_QW1_FDID_PRI_ONE;
1085 fd_fltr_ctx->fdid_mdid = ICE_FXD_FLTR_QW1_FDID_MDID_FD;
1086 fd_fltr_ctx->fdid = ICE_FXD_FLTR_QW1_FDID_ZERO;
1090 * ice_set_fd_desc_val
1091 * @ctx: pointer to fd filter descriptor context
1092 * @fdir_desc: populated with fd filter descriptor values
1095 ice_set_fd_desc_val(struct ice_fd_fltr_desc_ctx *ctx,
1096 struct ice_fltr_desc *fdir_desc)
1100 /* prep QW0 of FD filter programming desc */
1101 qword = ((u64)ctx->qindex << ICE_FXD_FLTR_QW0_QINDEX_S) &
1102 ICE_FXD_FLTR_QW0_QINDEX_M;
1103 qword |= ((u64)ctx->comp_q << ICE_FXD_FLTR_QW0_COMP_Q_S) &
1104 ICE_FXD_FLTR_QW0_COMP_Q_M;
1105 qword |= ((u64)ctx->comp_report << ICE_FXD_FLTR_QW0_COMP_REPORT_S) &
1106 ICE_FXD_FLTR_QW0_COMP_REPORT_M;
1107 qword |= ((u64)ctx->fd_space << ICE_FXD_FLTR_QW0_FD_SPACE_S) &
1108 ICE_FXD_FLTR_QW0_FD_SPACE_M;
1109 qword |= ((u64)ctx->cnt_index << ICE_FXD_FLTR_QW0_STAT_CNT_S) &
1110 ICE_FXD_FLTR_QW0_STAT_CNT_M;
1111 qword |= ((u64)ctx->cnt_ena << ICE_FXD_FLTR_QW0_STAT_ENA_S) &
1112 ICE_FXD_FLTR_QW0_STAT_ENA_M;
1113 qword |= ((u64)ctx->evict_ena << ICE_FXD_FLTR_QW0_EVICT_ENA_S) &
1114 ICE_FXD_FLTR_QW0_EVICT_ENA_M;
1115 qword |= ((u64)ctx->toq << ICE_FXD_FLTR_QW0_TO_Q_S) &
1116 ICE_FXD_FLTR_QW0_TO_Q_M;
1117 qword |= ((u64)ctx->toq_prio << ICE_FXD_FLTR_QW0_TO_Q_PRI_S) &
1118 ICE_FXD_FLTR_QW0_TO_Q_PRI_M;
1119 qword |= ((u64)ctx->dpu_recipe << ICE_FXD_FLTR_QW0_DPU_RECIPE_S) &
1120 ICE_FXD_FLTR_QW0_DPU_RECIPE_M;
1121 qword |= ((u64)ctx->drop << ICE_FXD_FLTR_QW0_DROP_S) &
1122 ICE_FXD_FLTR_QW0_DROP_M;
1123 qword |= ((u64)ctx->flex_prio << ICE_FXD_FLTR_QW0_FLEX_PRI_S) &
1124 ICE_FXD_FLTR_QW0_FLEX_PRI_M;
1125 qword |= ((u64)ctx->flex_mdid << ICE_FXD_FLTR_QW0_FLEX_MDID_S) &
1126 ICE_FXD_FLTR_QW0_FLEX_MDID_M;
1127 qword |= ((u64)ctx->flex_val << ICE_FXD_FLTR_QW0_FLEX_VAL_S) &
1128 ICE_FXD_FLTR_QW0_FLEX_VAL_M;
1129 fdir_desc->qidx_compq_space_stat = CPU_TO_LE64(qword);
1131 /* prep QW1 of FD filter programming desc */
1132 qword = ((u64)ctx->dtype << ICE_FXD_FLTR_QW1_DTYPE_S) &
1133 ICE_FXD_FLTR_QW1_DTYPE_M;
1134 qword |= ((u64)ctx->pcmd << ICE_FXD_FLTR_QW1_PCMD_S) &
1135 ICE_FXD_FLTR_QW1_PCMD_M;
1136 qword |= ((u64)ctx->desc_prof_prio << ICE_FXD_FLTR_QW1_PROF_PRI_S) &
1137 ICE_FXD_FLTR_QW1_PROF_PRI_M;
1138 qword |= ((u64)ctx->desc_prof << ICE_FXD_FLTR_QW1_PROF_S) &
1139 ICE_FXD_FLTR_QW1_PROF_M;
1140 qword |= ((u64)ctx->fd_vsi << ICE_FXD_FLTR_QW1_FD_VSI_S) &
1141 ICE_FXD_FLTR_QW1_FD_VSI_M;
1142 qword |= ((u64)ctx->swap << ICE_FXD_FLTR_QW1_SWAP_S) &
1143 ICE_FXD_FLTR_QW1_SWAP_M;
1144 qword |= ((u64)ctx->fdid_prio << ICE_FXD_FLTR_QW1_FDID_PRI_S) &
1145 ICE_FXD_FLTR_QW1_FDID_PRI_M;
1146 qword |= ((u64)ctx->fdid_mdid << ICE_FXD_FLTR_QW1_FDID_MDID_S) &
1147 ICE_FXD_FLTR_QW1_FDID_MDID_M;
1148 qword |= ((u64)ctx->fdid << ICE_FXD_FLTR_QW1_FDID_S) &
1149 ICE_FXD_FLTR_QW1_FDID_M;
1150 fdir_desc->dtype_cmd_vsi_fdid = CPU_TO_LE64(qword);
1154 * ice_fdir_get_prgm_desc - set a fdir descriptor from a fdir filter struct
1155 * @hw: pointer to the hardware structure
1157 * @fdesc: filter descriptor
1158 * @add: if add is true, this is an add operation, false implies delete
1161 ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
1162 struct ice_fltr_desc *fdesc, bool add)
1164 struct ice_fd_fltr_desc_ctx fdir_fltr_ctx = { 0 };
1166 /* set default context info */
1167 ice_set_dflt_val_fd_desc(&fdir_fltr_ctx);
1169 /* change sideband filtering values */
1170 fdir_fltr_ctx.fdid = input->fltr_id;
1171 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DROP_PKT) {
1172 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
1173 fdir_fltr_ctx.qindex = 0;
1174 } else if (input->dest_ctl ==
1175 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
1176 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1177 fdir_fltr_ctx.qindex = 0;
1179 if (input->dest_ctl ==
1180 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP)
1181 fdir_fltr_ctx.toq = input->q_region;
1182 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1183 fdir_fltr_ctx.qindex = input->q_index;
1185 fdir_fltr_ctx.cnt_ena = input->cnt_ena;
1186 fdir_fltr_ctx.cnt_index = input->cnt_index;
1187 fdir_fltr_ctx.fd_vsi = ice_get_hw_vsi_num(hw, input->dest_vsi);
1188 fdir_fltr_ctx.evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE;
1189 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER)
1190 fdir_fltr_ctx.toq_prio = 0;
1192 fdir_fltr_ctx.toq_prio = 3;
1193 fdir_fltr_ctx.pcmd = add ? ICE_FXD_FLTR_QW1_PCMD_ADD :
1194 ICE_FXD_FLTR_QW1_PCMD_REMOVE;
1195 fdir_fltr_ctx.swap = ICE_FXD_FLTR_QW1_SWAP_NOT_SET;
1196 fdir_fltr_ctx.comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1197 fdir_fltr_ctx.comp_report = input->comp_report;
1198 fdir_fltr_ctx.fdid_prio = input->fdid_prio;
1199 fdir_fltr_ctx.desc_prof = 1;
1200 fdir_fltr_ctx.desc_prof_prio = 3;
1201 ice_set_fd_desc_val(&fdir_fltr_ctx, fdesc);
1205 * ice_alloc_fd_res_cntr - obtain counter resource for FD type
1206 * @hw: pointer to the hardware structure
1207 * @cntr_id: returns counter index
1209 enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id)
1211 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1212 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1216 * ice_free_fd_res_cntr - Free counter resource for FD type
1217 * @hw: pointer to the hardware structure
1218 * @cntr_id: counter index to be freed
1220 enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id)
1222 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1223 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1227 * ice_alloc_fd_guar_item - allocate resource for FD guaranteed entries
1228 * @hw: pointer to the hardware structure
1229 * @cntr_id: returns counter index
1230 * @num_fltr: number of filter entries to be allocated
1233 ice_alloc_fd_guar_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1235 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1236 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1241 * ice_free_fd_guar_item - Free flow director guaranteed entries
1242 * @hw: pointer to the hardware structure
1243 * @cntr_id: counter index that needs to be freed
1244 * @num_fltr: number of filters to be freed
1247 ice_free_fd_guar_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1249 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1250 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1255 * ice_alloc_fd_shrd_item - allocate resource for flow director shared entries
1256 * @hw: pointer to the hardware structure
1257 * @cntr_id: returns counter index
1258 * @num_fltr: number of filter entries to be allocated
1261 ice_alloc_fd_shrd_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1263 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1264 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1269 * ice_free_fd_shrd_item - Free flow director shared entries
1270 * @hw: pointer to the hardware structure
1271 * @cntr_id: counter index that needs to be freed
1272 * @num_fltr: number of filters to be freed
1275 ice_free_fd_shrd_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1277 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1278 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1283 * ice_get_fdir_cnt_all - get the number of Flow Director filters
1284 * @hw: hardware data structure
1286 * Returns the number of filters available on device
1288 int ice_get_fdir_cnt_all(struct ice_hw *hw)
1290 return hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
1294 * ice_pkt_insert_ipv6_addr - insert a be32 IPv6 address into a memory buffer.
1295 * @pkt: packet buffer
1296 * @offset: offset into buffer
1297 * @addr: IPv6 address to convert and insert into pkt at offset
1299 static void ice_pkt_insert_ipv6_addr(u8 *pkt, int offset, __be32 *addr)
1303 for (idx = 0; idx < ICE_IPV6_ADDR_LEN_AS_U32; idx++)
1304 ice_memcpy(pkt + offset + idx * sizeof(*addr), &addr[idx],
1305 sizeof(*addr), ICE_NONDMA_TO_NONDMA);
1309 * ice_pkt_insert_u6_qfi - insert a u6 value qfi into a memory buffer for gtpu
1310 * @pkt: packet buffer
1311 * @offset: offset into buffer
1312 * @data: 8 bit value to convert and insert into pkt at offset
1314 * This function is designed for inserting qfi (6 bits) for gtpu.
1316 static void ice_pkt_insert_u6_qfi(u8 *pkt, int offset, u8 data)
1320 ret = (data & 0x3F) + (*(pkt + offset) & 0xC0);
1321 ice_memcpy(pkt + offset, &ret, sizeof(ret), ICE_NONDMA_TO_NONDMA);
1325 * ice_pkt_insert_u8 - insert a u8 value into a memory buffer.
1326 * @pkt: packet buffer
1327 * @offset: offset into buffer
1328 * @data: 8 bit value to convert and insert into pkt at offset
1330 static void ice_pkt_insert_u8(u8 *pkt, int offset, u8 data)
1332 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1336 * ice_pkt_insert_u8_tc - insert a u8 value into a memory buffer for TC ipv6.
1337 * @pkt: packet buffer
1338 * @offset: offset into buffer
1339 * @data: 8 bit value to convert and insert into pkt at offset
1341 * This function is designed for inserting Traffic Class (TC) for IPv6,
1342 * since that TC is not aligned in number of bytes. Here we split it out
1343 * into two part and fill each byte with data copy from pkt, then insert
1344 * the two bytes data one by one.
1346 static void ice_pkt_insert_u8_tc(u8 *pkt, int offset, u8 data)
1350 high = (data >> 4) + (*(pkt + offset) & 0xF0);
1351 ice_memcpy(pkt + offset, &high, sizeof(high), ICE_NONDMA_TO_NONDMA);
1353 low = (*(pkt + offset + 1) & 0x0F) + ((data & 0x0F) << 4);
1354 ice_memcpy(pkt + offset + 1, &low, sizeof(low), ICE_NONDMA_TO_NONDMA);
1358 * ice_pkt_insert_u16 - insert a be16 value into a memory buffer.
1359 * @pkt: packet buffer
1360 * @offset: offset into buffer
1361 * @data: 16 bit value to convert and insert into pkt at offset
1363 static void ice_pkt_insert_u16(u8 *pkt, int offset, __be16 data)
1365 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1369 * ice_pkt_insert_u32 - insert a be32 value into a memory buffer.
1370 * @pkt: packet buffer
1371 * @offset: offset into buffer
1372 * @data: 32 bit value to convert and insert into pkt at offset
1374 static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
1376 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1380 * ice_pkt_insert_mac_addr - insert a MAC addr into a memory buffer.
1381 * @pkt: packet buffer
1382 * @addr: MAC address to convert and insert into pkt at offset
1384 static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
1386 ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
1390 * ice_fdir_get_open_tunnel_port
1391 * @hw: pointer to the hardware structure
1393 * @port: returns open port
1395 * returns an open tunnel port specified for this flow type
1397 static enum ice_status
1398 ice_fdir_get_open_tunnel_port(struct ice_hw *hw, enum ice_fltr_ptype flow,
1402 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1404 if (!ice_get_open_tunnel_port(hw, TNL_ECPRI, port))
1405 return ICE_ERR_DOES_NOT_EXIST;
1408 if (!ice_get_open_tunnel_port(hw, TNL_VXLAN, port) &&
1409 !ice_get_open_tunnel_port(hw, TNL_GENEVE, port))
1410 return ICE_ERR_DOES_NOT_EXIST;
1417 * ice_fdir_get_gen_prgm_pkt - generate a training packet
1418 * @hw: pointer to the hardware structure
1419 * @input: flow director filter data structure
1420 * @pkt: pointer to return filter packet
1421 * @frag: generate a fragment packet
1422 * @tun: true implies generate a tunnel packet
1425 ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
1426 u8 *pkt, bool frag, bool tun)
1428 enum ice_fltr_ptype flow;
1433 if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1434 switch (input->ip.v4.proto) {
1435 case ICE_IP_PROTO_TCP:
1436 flow = ICE_FLTR_PTYPE_NONF_IPV4_TCP;
1438 case ICE_IP_PROTO_UDP:
1439 flow = ICE_FLTR_PTYPE_NONF_IPV4_UDP;
1441 case ICE_IP_PROTO_SCTP:
1442 flow = ICE_FLTR_PTYPE_NONF_IPV4_SCTP;
1445 flow = ICE_FLTR_PTYPE_NONF_IPV4_OTHER;
1448 } else if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1449 switch (input->ip.v6.proto) {
1450 case ICE_IP_PROTO_TCP:
1451 flow = ICE_FLTR_PTYPE_NONF_IPV6_TCP;
1453 case ICE_IP_PROTO_UDP:
1454 flow = ICE_FLTR_PTYPE_NONF_IPV6_UDP;
1456 case ICE_IP_PROTO_SCTP:
1457 flow = ICE_FLTR_PTYPE_NONF_IPV6_SCTP;
1460 flow = ICE_FLTR_PTYPE_NONF_IPV6_OTHER;
1464 flow = input->flow_type;
1467 for (idx = 0; idx < ICE_FDIR_NUM_PKT; idx++)
1468 if (ice_fdir_pkt[idx].flow == flow)
1470 if (idx == ICE_FDIR_NUM_PKT)
1471 return ICE_ERR_PARAM;
1473 ice_memcpy(pkt, ice_fdir_pkt[idx].pkt,
1474 ice_fdir_pkt[idx].pkt_len, ICE_NONDMA_TO_NONDMA);
1477 if (!ice_fdir_pkt[idx].tun_pkt)
1478 return ICE_ERR_PARAM;
1481 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1482 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1483 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1484 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1485 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1486 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1487 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1488 ice_fdir_pkt[idx].tun_pkt_len,
1489 ICE_NONDMA_TO_NONDMA);
1490 loc = &pkt[ICE_FDIR_GTPU_IP_INNER_PKT_OFF];
1492 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1493 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1494 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1495 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1496 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1497 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1498 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1499 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1500 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1501 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1502 ice_fdir_pkt[idx].tun_pkt_len,
1503 ICE_NONDMA_TO_NONDMA);
1504 loc = &pkt[ICE_FDIR_GTPU_EH_INNER_PKT_OFF];
1507 if (ice_fdir_get_open_tunnel_port(hw, flow, &tnl_port))
1508 return ICE_ERR_DOES_NOT_EXIST;
1510 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1511 ice_fdir_pkt[idx].tun_pkt_len,
1512 ICE_NONDMA_TO_NONDMA);
1513 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_DST_PORT_OFFSET,
1515 loc = &pkt[ICE_FDIR_TUN_PKT_OFF];
1520 /* Reverse the src and dst, since the HW expects them to be from Tx
1521 * perspective. The input from user is from Rx filter perspective.
1524 case ICE_FLTR_PTYPE_NONF_IPV4_TCP:
1525 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1526 input->ip.v4.src_ip);
1527 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1528 input->ip.v4.src_port);
1529 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1530 input->ip.v4.dst_ip);
1531 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1532 input->ip.v4.dst_port);
1533 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1534 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1535 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1537 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_MF;
1539 case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
1540 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1541 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1542 input->ext_data_outer.src_mac);
1543 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1544 input->ip_outer.v4.dst_ip);
1545 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1546 input->ip_outer.v4.src_ip);
1547 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1548 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1549 input->ip.v4.src_ip);
1550 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1551 input->ip.v4.src_port);
1552 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1553 input->ip.v4.dst_ip);
1554 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1555 input->ip.v4.dst_port);
1556 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1557 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1558 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1559 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1561 case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
1562 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1563 input->ip.v4.src_ip);
1564 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1565 input->ip.v4.src_port);
1566 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1567 input->ip.v4.dst_ip);
1568 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1569 input->ip.v4.dst_port);
1570 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1571 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1572 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1574 case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
1575 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1576 input->ip.v4.src_ip);
1577 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1578 input->ip.v4.dst_ip);
1579 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1580 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1581 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1582 input->ip.v4.proto);
1583 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1585 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN:
1586 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1587 ice_pkt_insert_mac_addr(pkt + ETH_ALEN, input->ext_data_outer.src_mac);
1588 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1589 input->ip_outer.v4.dst_ip);
1590 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1591 input->ip_outer.v4.src_ip);
1592 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1593 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1594 input->vxlan_data.vni);
1595 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1596 input->ip.v4.src_ip);
1597 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1598 input->ip.v4.src_port);
1599 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1600 input->ip.v4.dst_ip);
1601 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1602 input->ip.v4.dst_port);
1603 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1604 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1605 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1606 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1608 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU:
1609 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1610 input->ip.v4.src_ip);
1611 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1612 input->ip.v4.dst_ip);
1613 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1614 input->gtpu_data.teid);
1616 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1617 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1618 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1619 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1620 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1621 input->ip.v4.src_ip);
1622 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1623 input->ip.v4.dst_ip);
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);
1626 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_PROTO_OFFSET,
1627 input->ip.v4.proto);
1629 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH:
1630 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW:
1631 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP:
1632 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1633 input->ip.v4.src_ip);
1634 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1635 input->ip.v4.dst_ip);
1636 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1637 input->gtpu_data.teid);
1638 ice_pkt_insert_u6_qfi(loc, ICE_IPV4_GTPU_QFI_OFFSET,
1639 input->gtpu_data.qfi);
1641 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1642 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1643 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1644 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1645 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1646 input->ip.v4.src_ip);
1647 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_DST_PORT_OFFSET,
1648 input->ip.v4.src_port);
1649 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1650 input->ip.v4.dst_ip);
1651 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_SRC_PORT_OFFSET,
1652 input->ip.v4.dst_port);
1653 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1654 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1656 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1657 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1658 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1659 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1660 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1661 input->ip.v4.src_ip);
1662 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_DST_PORT_OFFSET,
1663 input->ip.v4.src_port);
1664 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1665 input->ip.v4.dst_ip);
1666 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_SRC_PORT_OFFSET,
1667 input->ip.v4.dst_port);
1668 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1669 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1671 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1672 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1673 input->ip.v6.src_ip);
1674 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1675 input->ip.v6.dst_ip);
1676 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1677 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1678 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_PROTO_OFFSET,
1679 input->ip.v6.proto);
1681 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1682 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1683 input->ip.v6.src_ip);
1684 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1685 input->ip.v6.dst_ip);
1686 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_DST_PORT_OFFSET,
1687 input->ip.v6.src_port);
1688 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_SRC_PORT_OFFSET,
1689 input->ip.v6.dst_port);
1690 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1691 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1693 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1694 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1695 input->ip.v6.src_ip);
1696 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1697 input->ip.v6.dst_ip);
1698 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_DST_PORT_OFFSET,
1699 input->ip.v6.src_port);
1700 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_SRC_PORT_OFFSET,
1701 input->ip.v6.dst_port);
1702 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1703 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1705 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU:
1706 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER:
1707 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1708 input->ip.v6.src_ip);
1709 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1710 input->ip.v6.dst_ip);
1711 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1712 input->gtpu_data.teid);
1714 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH:
1715 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW:
1716 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP:
1717 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER:
1718 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1719 input->ip.v6.src_ip);
1720 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1721 input->ip.v6.dst_ip);
1722 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1723 input->gtpu_data.teid);
1724 ice_pkt_insert_u6_qfi(loc, ICE_IPV6_GTPU_QFI_OFFSET,
1725 input->gtpu_data.qfi);
1727 case ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3:
1728 ice_pkt_insert_u32(loc, ICE_IPV4_L2TPV3_SESS_ID_OFFSET,
1729 input->l2tpv3_data.session_id);
1731 case ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3:
1732 ice_pkt_insert_u32(loc, ICE_IPV6_L2TPV3_SESS_ID_OFFSET,
1733 input->l2tpv3_data.session_id);
1735 case ICE_FLTR_PTYPE_NONF_IPV4_ESP:
1736 ice_pkt_insert_u32(loc, ICE_IPV4_ESP_SPI_OFFSET,
1737 input->ip.v4.sec_parm_idx);
1739 case ICE_FLTR_PTYPE_NONF_IPV6_ESP:
1740 ice_pkt_insert_u32(loc, ICE_IPV6_ESP_SPI_OFFSET,
1741 input->ip.v6.sec_parm_idx);
1743 case ICE_FLTR_PTYPE_NONF_IPV4_AH:
1744 ice_pkt_insert_u32(loc, ICE_IPV4_AH_SPI_OFFSET,
1745 input->ip.v4.sec_parm_idx);
1747 case ICE_FLTR_PTYPE_NONF_IPV6_AH:
1748 ice_pkt_insert_u32(loc, ICE_IPV6_AH_SPI_OFFSET,
1749 input->ip.v6.sec_parm_idx);
1751 case ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP:
1752 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1753 input->ip.v4.src_ip);
1754 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1755 input->ip.v4.dst_ip);
1756 ice_pkt_insert_u32(loc, ICE_IPV4_NAT_T_ESP_SPI_OFFSET,
1757 input->ip.v4.sec_parm_idx);
1759 case ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP:
1760 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1761 input->ip.v6.src_ip);
1762 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1763 input->ip.v6.dst_ip);
1764 ice_pkt_insert_u32(loc, ICE_IPV6_NAT_T_ESP_SPI_OFFSET,
1765 input->ip.v6.sec_parm_idx);
1767 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE:
1768 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION:
1769 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1770 input->ip.v4.dst_port);
1772 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE:
1773 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION:
1774 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1775 input->ip.v6.dst_port);
1777 case ICE_FLTR_PTYPE_NON_IP_L2:
1778 ice_pkt_insert_u16(loc, ICE_MAC_ETHTYPE_OFFSET,
1779 input->ext_data.ether_type);
1781 case ICE_FLTR_PTYPE_NONF_ECPRI_TP0:
1782 ice_pkt_insert_u16(loc, ICE_ECPRI_TP0_PC_ID_OFFSET,
1783 input->ecpri_data.pc_id);
1785 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1786 /* Use pkt instead of loc, since PC_ID is in outer part */
1787 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_ECPRI_TP0_PC_ID_OFFSET,
1788 input->ecpri_data.pc_id);
1790 case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
1791 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1792 input->ip.v6.src_ip);
1793 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1794 input->ip.v6.dst_ip);
1795 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_DST_PORT_OFFSET,
1796 input->ip.v6.src_port);
1797 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_SRC_PORT_OFFSET,
1798 input->ip.v6.dst_port);
1799 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1800 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1801 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1803 case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
1804 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1805 input->ip.v6.src_ip);
1806 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1807 input->ip.v6.dst_ip);
1808 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_DST_PORT_OFFSET,
1809 input->ip.v6.src_port);
1810 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1811 input->ip.v6.dst_port);
1812 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1813 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1814 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1816 case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
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_u16(loc, ICE_IPV6_SCTP_DST_PORT_OFFSET,
1822 input->ip.v6.src_port);
1823 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_SRC_PORT_OFFSET,
1824 input->ip.v6.dst_port);
1825 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1826 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1827 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1829 case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
1830 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1831 input->ip.v6.src_ip);
1832 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1833 input->ip.v6.dst_ip);
1834 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1835 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1836 ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
1837 input->ip.v6.proto);
1838 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1840 case ICE_FLTR_PTYPE_FRAG_IPV4:
1841 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1842 input->ip.v4.src_ip);
1843 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1844 input->ip.v4.dst_ip);
1845 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1846 ice_pkt_insert_u16(loc, ICE_IPV4_ID_OFFSET,
1847 input->ip.v4.packet_id);
1848 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1849 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1850 input->ip.v4.proto);
1851 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1853 case ICE_FLTR_PTYPE_FRAG_IPV6:
1854 ice_pkt_insert_u32(loc, ICE_IPV6_ID_OFFSET,
1855 input->ip.v6.packet_id);
1858 return ICE_ERR_PARAM;
1861 if (input->flex_fltr)
1862 ice_pkt_insert_u16(loc, input->flex_offset, input->flex_word);
1868 * ice_fdir_get_prgm_pkt - generate a training packet
1869 * @input: flow director filter data structure
1870 * @pkt: pointer to return filter packet
1871 * @frag: generate a fragment packet
1874 ice_fdir_get_prgm_pkt(struct ice_fdir_fltr *input, u8 *pkt, bool frag)
1876 return ice_fdir_get_gen_prgm_pkt(NULL, input, pkt, frag, false);
1880 * ice_fdir_has_frag - does flow type have 2 ptypes
1883 * returns true is there is a fragment packet for this ptype
1885 bool ice_fdir_has_frag(enum ice_fltr_ptype flow)
1887 if (flow == ICE_FLTR_PTYPE_FRAG_IPV4 ||
1888 flow == ICE_FLTR_PTYPE_FRAG_IPV6)
1895 * ice_fdir_find_fltr_by_idx - find filter with idx
1896 * @hw: pointer to hardware structure
1897 * @fltr_idx: index to find.
1899 * Returns pointer to filter if found or null
1901 struct ice_fdir_fltr *
1902 ice_fdir_find_fltr_by_idx(struct ice_hw *hw, u32 fltr_idx)
1904 struct ice_fdir_fltr *rule;
1906 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1908 /* rule ID found in the list */
1909 if (fltr_idx == rule->fltr_id)
1911 if (fltr_idx < rule->fltr_id)
1918 * ice_fdir_list_add_fltr - add a new node to the flow director filter list
1919 * @hw: hardware structure
1920 * @fltr: filter node to add to structure
1922 void ice_fdir_list_add_fltr(struct ice_hw *hw, struct ice_fdir_fltr *fltr)
1924 struct ice_fdir_fltr *rule, *parent = NULL;
1926 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1928 /* rule ID found or pass its spot in the list */
1929 if (rule->fltr_id >= fltr->fltr_id)
1935 LIST_ADD_AFTER(&fltr->fltr_node, &parent->fltr_node);
1937 LIST_ADD(&fltr->fltr_node, &hw->fdir_list_head);
1941 * ice_fdir_update_cntrs - increment / decrement filter counter
1942 * @hw: pointer to hardware structure
1943 * @flow: filter flow type
1944 * @acl_fltr: true indicates an ACL filter
1945 * @add: true implies filters added
1948 ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,
1949 bool acl_fltr, bool add)
1953 incr = add ? 1 : -1;
1954 hw->fdir_active_fltr += incr;
1955 if (flow == ICE_FLTR_PTYPE_NONF_NONE || flow >= ICE_FLTR_PTYPE_MAX) {
1956 ice_debug(hw, ICE_DBG_SW, "Unknown filter type %d\n", flow);
1959 hw->acl_fltr_cnt[flow] += incr;
1961 hw->fdir_fltr_cnt[flow] += incr;
1966 * ice_cmp_ipv6_addr - compare 2 IP v6 addresses
1970 * Returns 0 on equal, returns non-0 if different
1972 static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)
1974 return memcmp(a, b, 4 * sizeof(__be32));
1978 * ice_fdir_comp_rules - compare 2 filters
1979 * @a: a Flow Director filter data structure
1980 * @b: a Flow Director filter data structure
1981 * @v6: bool true if v6 filter
1983 * Returns true if the filters match
1986 ice_fdir_comp_rules(struct ice_fdir_fltr *a, struct ice_fdir_fltr *b, bool v6)
1988 enum ice_fltr_ptype flow_type = a->flow_type;
1990 /* The calling function already checks that the two filters have the
1994 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
1995 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
1996 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP) {
1997 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
1998 a->ip.v4.src_ip == b->ip.v4.src_ip &&
1999 a->ip.v4.dst_port == b->ip.v4.dst_port &&
2000 a->ip.v4.src_port == b->ip.v4.src_port)
2002 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
2003 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
2004 a->ip.v4.src_ip == b->ip.v4.src_ip &&
2005 a->ip.v4.l4_header == b->ip.v4.l4_header &&
2006 a->ip.v4.proto == b->ip.v4.proto &&
2007 a->ip.v4.ip_ver == b->ip.v4.ip_ver &&
2008 a->ip.v4.tos == b->ip.v4.tos)
2012 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_UDP ||
2013 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_TCP ||
2014 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_SCTP) {
2015 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
2016 a->ip.v6.src_port == b->ip.v6.src_port &&
2017 !ice_cmp_ipv6_addr(a->ip.v6.dst_ip,
2019 !ice_cmp_ipv6_addr(a->ip.v6.src_ip,
2022 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
2023 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
2024 a->ip.v6.src_port == b->ip.v6.src_port)
2033 * ice_fdir_is_dup_fltr - test if filter is already in list for PF
2034 * @hw: hardware data structure
2035 * @input: Flow Director filter data structure
2037 * Returns true if the filter is found in the list
2039 bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
2041 struct ice_fdir_fltr *rule;
2044 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2046 enum ice_fltr_ptype flow_type;
2048 if (rule->flow_type != input->flow_type)
2051 flow_type = input->flow_type;
2052 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2053 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2054 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP ||
2055 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
2056 ret = ice_fdir_comp_rules(rule, input, false);
2058 ret = ice_fdir_comp_rules(rule, input, true);
2060 if (rule->fltr_id == input->fltr_id &&
2061 rule->q_index != input->q_index)
2072 * ice_clear_pf_fd_table - admin command to clear FD table for PF
2073 * @hw: hardware data structure
2075 * Clears FD table entries for a PF by issuing admin command (direct, 0x0B06)
2077 enum ice_status ice_clear_pf_fd_table(struct ice_hw *hw)
2079 struct ice_aqc_clear_fd_table *cmd;
2080 struct ice_aq_desc desc;
2082 cmd = &desc.params.clear_fd_table;
2083 ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_clear_fd_table);
2084 cmd->clear_type = CL_FD_VM_VF_TYPE_PF_IDX;
2085 /* vsi_index must be 0 to clear FD table for a PF */
2086 cmd->vsi_index = CPU_TO_LE16(0);
2088 return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);