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, 0x44, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
104 0x39, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x30,
106 0x76, 0x6c, 0x34, 0xff, 0x00, 0x20, 0x00, 0x00,
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
109 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00,
110 0x3a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111 0x00, 0x00, 0x00, 0x00,
114 static const u8 ice_fdir_udp4_gtpu4_eh_pkt[] = {
115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
117 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
118 0x39, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x38,
120 0xb7, 0x1a, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
123 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
124 0x3a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
126 0xbe, 0xc7, 0x00, 0x00,
129 static const u8 ice_fdir_tcp4_gtpu4_eh_pkt[] = {
130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
132 0x00, 0x58, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
133 0x39, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x44,
135 0xb6, 0xf7, 0x34, 0xff, 0x00, 0x34, 0x00, 0x00,
136 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
138 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,
139 0x3a, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
142 0x20, 0x00, 0x4e, 0xd2, 0x00, 0x00, 0x00, 0x00,
145 static const u8 ice_fdir_ipv4_gtpu4_eh_dw_pkt[] = {
146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
148 0x00, 0x58, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
149 0x39, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x44,
151 0xb6, 0xf7, 0x34, 0xff, 0x00, 0x34, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
154 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,
155 0x3a, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
158 0x20, 0x00, 0x4e, 0xd2, 0x00, 0x00, 0x00, 0x00,
161 static const u8 ice_fdir_udp4_gtpu4_eh_dw_pkt[] = {
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
164 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
165 0x39, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x38,
167 0xb7, 0x1a, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
170 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
171 0x3a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
173 0xbe, 0xc7, 0x00, 0x00,
176 static const u8 ice_fdir_tcp4_gtpu4_eh_dw_pkt[] = {
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
179 0x00, 0x58, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
180 0x39, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x44,
182 0xb6, 0xf7, 0x34, 0xff, 0x00, 0x34, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
185 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,
186 0x3a, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
189 0x20, 0x00, 0x4e, 0xd2, 0x00, 0x00, 0x00, 0x00,
192 static const u8 ice_fdir_ipv4_gtpu4_eh_up_pkt[] = {
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
195 0x00, 0x44, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
196 0x39, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x30,
198 0x76, 0x5c, 0x34, 0xff, 0x00, 0x20, 0x00, 0x00,
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x10,
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
201 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00,
202 0x3a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00,
206 static const u8 ice_fdir_udp4_gtpu4_eh_up_pkt[] = {
207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
208 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
209 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
210 0x39, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x38,
212 0xb7, 0x0a, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00,
213 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x10,
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
215 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
216 0x3a, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
218 0xbe, 0xc7, 0x00, 0x00,
221 static const u8 ice_fdir_tcp4_gtpu4_eh_up_pkt[] = {
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
224 0x00, 0x58, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
225 0x39, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x44,
227 0xb6, 0xe7, 0x34, 0xff, 0x00, 0x34, 0x00, 0x00,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x10,
229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
230 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,
231 0x3a, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
234 0x20, 0x00, 0x4e, 0xd2, 0x00, 0x00, 0x00, 0x00,
237 static const u8 ice_fdir_icmp4_gtpu4_pkt[] = {
238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
240 0x00, 0x4c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x00,
243 0x00, 0x00, 0x34, 0xff, 0x00, 0x28, 0x00, 0x00,
244 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x02, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
246 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01,
247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
252 static const u8 ice_fdir_ipv6_gtpu4_pkt[] = {
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
255 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
256 0x7c, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x38,
258 0x24, 0x42, 0x30, 0xff, 0x00, 0x28, 0x00, 0x00,
259 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
260 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x00, 0x00, 0x00, 0x00,
267 static const u8 ice_fdir_udp6_gtpu4_pkt[] = {
268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
270 0x00, 0x54, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
271 0x7c, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x40,
273 0x4e, 0x3d, 0x30, 0xff, 0x00, 0x30, 0x00, 0x00,
274 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08,
275 0x11, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
277 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
278 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
280 0xff, 0xdc, 0x00, 0x00,
283 static const u8 ice_fdir_tcp6_gtpu4_pkt[] = {
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
286 0x00, 0x62, 0x00, 0x01, 0x00, 0x00, 0x40, 0x11,
287 0x7c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x08, 0x68, 0x08, 0x68, 0x00, 0x4e,
289 0x59, 0x08, 0x30, 0xff, 0x00, 0x3e, 0x00, 0x00,
290 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x16,
291 0x06, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
295 0x00, 0x00, 0x00, 0x14, 0x00, 0x50, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
297 0x20, 0x00, 0x8f, 0x7b, 0x00, 0x00, 0x00, 0x00,
300 static const u8 ice_fdir_ipv6_gtpu6_pkt[] = {
301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
302 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
303 0x00, 0x00, 0x00, 0x38, 0x11, 0x40, 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,
307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68,
308 0x08, 0x68, 0x00, 0x38, 0x22, 0x43, 0x30, 0xff,
309 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
310 0x00, 0x00, 0x00, 0x00, 0x3b, 0x40, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
314 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317 static const u8 ice_fdir_ipv6_gtpu6_eh_pkt[] = {
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
320 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
321 0x00, 0x00, 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, 0x08, 0x68,
325 0x08, 0x68, 0x00, 0x44, 0x1b, 0x9a, 0x34, 0xff,
326 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
327 0x00, 0x85, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
328 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
329 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
330 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
331 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
333 0x00, 0x00, 0x00, 0x00,
336 static const u8 ice_fdir_ipv6_gtpu6_eh_dw_pkt[] = {
337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
338 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
339 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
340 0x00, 0x00, 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, 0x08, 0x68,
344 0x08, 0x68, 0x00, 0x44, 0x1b, 0x9a, 0x34, 0xff,
345 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
346 0x00, 0x85, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
347 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
348 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
352 0x00, 0x00, 0x00, 0x00,
355 static const u8 ice_fdir_ipv6_gtpu6_eh_up_pkt[] = {
356 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
357 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd, 0x60, 0x00,
358 0x00, 0x00, 0x00, 0x44, 0x11, 0x40, 0x00, 0x00,
359 0x00, 0x00, 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, 0x08, 0x68,
363 0x08, 0x68, 0x00, 0x44, 0x1b, 0x8a, 0x34, 0xff,
364 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
365 0x00, 0x85, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,
366 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
367 0x3b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00,
374 static const u8 ice_fdir_ipv4_l2tpv3_pkt[] = {
375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
376 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
377 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x73,
378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383 static const u8 ice_fdir_ipv6_l2tpv3_pkt[] = {
384 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
386 0x00, 0x00, 0x00, 0x00, 0x73, 0x40, 0x00, 0x00,
387 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
388 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
389 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
390 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
395 static const u8 ice_fdir_ipv4_esp_pkt[] = {
396 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
397 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
398 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32,
399 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
400 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
404 static const u8 ice_fdir_ipv6_esp_pkt[] = {
405 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
406 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
407 0x00, 0x00, 0x00, 0x00, 0x32, 0x40, 0x00, 0x00,
408 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
409 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
410 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
411 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
415 static const u8 ice_fdir_ipv4_ah_pkt[] = {
416 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
417 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
418 0x00, 0x14, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33,
419 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
420 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
421 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
425 static const u8 ice_fdir_ipv6_ah_pkt[] = {
426 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
427 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
428 0x00, 0x00, 0x00, 0x00, 0x33, 0x40, 0x00, 0x00,
429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
431 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
432 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
434 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
437 static const u8 ice_fdir_ipv4_nat_t_esp_pkt[] = {
438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
440 0x00, 0x1C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
441 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
442 0x00, 0x00, 0x00, 0x00, 0x11, 0x94, 0x00, 0x00,
443 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
447 static const u8 ice_fdir_ipv6_nat_t_esp_pkt[] = {
448 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
449 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
450 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 0x00, 0x00,
451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
452 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
455 0x11, 0x94, 0x00, 0x00, 0x00, 0x08,
458 static const u8 ice_fdir_ipv4_pfcp_node_pkt[] = {
459 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
460 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
461 0x00, 0x2C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
463 0x00, 0x00, 0x22, 0x65, 0x22, 0x65, 0x00, 0x00,
464 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00,
465 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
469 static const u8 ice_fdir_ipv4_pfcp_session_pkt[] = {
470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
471 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
472 0x00, 0x2C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
474 0x00, 0x00, 0x22, 0x65, 0x22, 0x65, 0x00, 0x00,
475 0x00, 0x00, 0x21, 0x00, 0x00, 0x10, 0x00, 0x00,
476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
480 static const u8 ice_fdir_ipv6_pfcp_node_pkt[] = {
481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
482 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
483 0x00, 0x00, 0x00, 0x18, 0x11, 0x40, 0x00, 0x00,
484 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
485 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x65,
488 0x22, 0x65, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
489 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
490 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
493 static const u8 ice_fdir_ipv6_pfcp_session_pkt[] = {
494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
496 0x00, 0x00, 0x00, 0x18, 0x11, 0x40, 0x00, 0x00,
497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
499 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x65,
501 0x22, 0x65, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00,
502 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
503 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
506 static const u8 ice_fdir_non_ip_l2_pkt[] = {
507 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
509 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
512 static const u8 ice_fdir_ecpri_tp0_pkt[] = {
513 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
514 0x00, 0x00, 0x00, 0x00, 0xAE, 0xFE, 0x10, 0x00,
515 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
519 static const u8 ice_fdir_ipv4_udp_ecpri_tp0_pkt[] = {
520 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
522 0x00, 0x1C, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
523 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
524 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
529 static const u8 ice_fdir_tcpv6_pkt[] = {
530 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
531 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
532 0x00, 0x00, 0x00, 0x14, 0x06, 0x40, 0x00, 0x00,
533 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
535 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
538 0x00, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00,
542 static const u8 ice_fdir_udpv6_pkt[] = {
543 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
544 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
545 0x00, 0x00, 0x00, 0x08, 0x11, 0x40, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
550 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
553 static const u8 ice_fdir_sctpv6_pkt[] = {
554 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
555 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
556 0x00, 0x00, 0x00, 0x0C, 0x84, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
565 static const u8 ice_fdir_ipv6_pkt[] = {
566 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
567 0x00, 0x00, 0x00, 0x00, 0x86, 0xDD, 0x60, 0x00,
568 0x00, 0x00, 0x00, 0x00, 0x3B, 0x40, 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,
575 static const u8 ice_fdir_tcp4_tun_pkt[] = {
576 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
577 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
578 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
579 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
580 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
581 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
582 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
583 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
584 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00,
585 0x40, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
586 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
587 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
591 static const u8 ice_fdir_udp4_tun_pkt[] = {
592 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
593 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
594 0x00, 0x4e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
595 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
596 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
597 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
599 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
600 0x45, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x40, 0x00,
601 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
602 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
603 0x00, 0x00, 0x00, 0x00,
606 static const u8 ice_fdir_sctp4_tun_pkt[] = {
607 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
608 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
609 0x00, 0x52, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
610 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
611 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
612 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
613 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
614 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
615 0x45, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00,
616 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
617 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
618 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
621 static const u8 ice_fdir_ip4_tun_pkt[] = {
622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
623 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
624 0x00, 0x46, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
626 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
627 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
630 0x45, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
631 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
632 0x00, 0x00, 0x00, 0x00,
635 static const u8 ice_fdir_tcp6_tun_pkt[] = {
636 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
637 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
638 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
639 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
640 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
641 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
643 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
644 0x60, 0x00, 0x00, 0x00, 0x00, 0x14, 0x06, 0x40,
645 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
646 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
647 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
648 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
650 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x00,
651 0x00, 0x00, 0x00, 0x00,
654 static const u8 ice_fdir_udp6_tun_pkt[] = {
655 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
656 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
657 0x00, 0x62, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
658 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
659 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
660 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
661 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
662 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
663 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x11, 0x40,
664 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
665 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
671 static const u8 ice_fdir_sctp6_tun_pkt[] = {
672 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
673 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
674 0x00, 0x66, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
675 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
677 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
679 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
680 0x60, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x84, 0x40,
681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
682 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
683 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
684 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
685 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
686 0x00, 0x00, 0x00, 0x00,
689 static const u8 ice_fdir_ip6_tun_pkt[] = {
690 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
691 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
692 0x00, 0x5a, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
693 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
694 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
695 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00,
696 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
697 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0xdd,
698 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x40,
699 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
700 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
705 /* Flow Director no-op training packet table */
706 static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
708 ICE_FLTR_PTYPE_NONF_IPV4_TCP,
709 sizeof(ice_fdir_tcpv4_pkt), ice_fdir_tcpv4_pkt,
710 sizeof(ice_fdir_tcp4_tun_pkt), ice_fdir_tcp4_tun_pkt,
713 ICE_FLTR_PTYPE_NONF_IPV4_UDP,
714 sizeof(ice_fdir_udpv4_pkt), ice_fdir_udpv4_pkt,
715 sizeof(ice_fdir_udp4_tun_pkt), ice_fdir_udp4_tun_pkt,
718 ICE_FLTR_PTYPE_NONF_IPV4_SCTP,
719 sizeof(ice_fdir_sctpv4_pkt), ice_fdir_sctpv4_pkt,
720 sizeof(ice_fdir_sctp4_tun_pkt), ice_fdir_sctp4_tun_pkt,
723 ICE_FLTR_PTYPE_NONF_IPV4_OTHER,
724 sizeof(ice_fdir_ipv4_pkt), ice_fdir_ipv4_pkt,
725 sizeof(ice_fdir_ip4_tun_pkt), ice_fdir_ip4_tun_pkt,
728 ICE_FLTR_PTYPE_NONF_IPV4_GTPU,
729 sizeof(ice_fdir_ipv4_gtpu4_pkt),
730 ice_fdir_ipv4_gtpu4_pkt,
731 sizeof(ice_fdir_ipv4_gtpu4_pkt),
732 ice_fdir_ipv4_gtpu4_pkt,
735 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH,
736 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
737 ice_fdir_ipv4_gtpu4_eh_pkt,
738 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
739 ice_fdir_ipv4_gtpu4_eh_pkt,
742 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW,
743 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
744 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
745 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
746 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
749 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP,
750 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
751 ice_fdir_ipv4_gtpu4_eh_up_pkt,
752 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
753 ice_fdir_ipv4_gtpu4_eh_up_pkt,
756 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4,
757 sizeof(ice_fdir_ipv4_gtpu4_pkt),
758 ice_fdir_ipv4_gtpu4_pkt,
759 sizeof(ice_fdir_ipv4_gtpu4_pkt),
760 ice_fdir_ipv4_gtpu4_pkt,
763 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP,
764 sizeof(ice_fdir_udp4_gtpu4_pkt),
765 ice_fdir_udp4_gtpu4_pkt,
766 sizeof(ice_fdir_udp4_gtpu4_pkt),
767 ice_fdir_udp4_gtpu4_pkt,
770 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP,
771 sizeof(ice_fdir_tcp4_gtpu4_pkt),
772 ice_fdir_tcp4_gtpu4_pkt,
773 sizeof(ice_fdir_tcp4_gtpu4_pkt),
774 ice_fdir_tcp4_gtpu4_pkt,
777 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4,
778 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
779 ice_fdir_ipv4_gtpu4_eh_pkt,
780 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
781 ice_fdir_ipv4_gtpu4_eh_pkt,
784 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP,
785 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
786 ice_fdir_udp4_gtpu4_eh_pkt,
787 sizeof(ice_fdir_udp4_gtpu4_eh_pkt),
788 ice_fdir_udp4_gtpu4_eh_pkt,
791 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP,
792 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
793 ice_fdir_tcp4_gtpu4_eh_pkt,
794 sizeof(ice_fdir_tcp4_gtpu4_eh_pkt),
795 ice_fdir_tcp4_gtpu4_eh_pkt,
798 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4,
799 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
800 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
801 sizeof(ice_fdir_ipv4_gtpu4_eh_dw_pkt),
802 ice_fdir_ipv4_gtpu4_eh_dw_pkt,
805 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP,
806 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
807 ice_fdir_udp4_gtpu4_eh_dw_pkt,
808 sizeof(ice_fdir_udp4_gtpu4_eh_dw_pkt),
809 ice_fdir_udp4_gtpu4_eh_dw_pkt,
812 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP,
813 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
814 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
815 sizeof(ice_fdir_tcp4_gtpu4_eh_dw_pkt),
816 ice_fdir_tcp4_gtpu4_eh_dw_pkt,
819 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4,
820 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
821 ice_fdir_ipv4_gtpu4_eh_up_pkt,
822 sizeof(ice_fdir_ipv4_gtpu4_eh_up_pkt),
823 ice_fdir_ipv4_gtpu4_eh_up_pkt,
826 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP,
827 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
828 ice_fdir_udp4_gtpu4_eh_up_pkt,
829 sizeof(ice_fdir_udp4_gtpu4_eh_up_pkt),
830 ice_fdir_udp4_gtpu4_eh_up_pkt,
833 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP,
834 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
835 ice_fdir_tcp4_gtpu4_eh_up_pkt,
836 sizeof(ice_fdir_tcp4_gtpu4_eh_up_pkt),
837 ice_fdir_tcp4_gtpu4_eh_up_pkt,
840 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP,
841 sizeof(ice_fdir_icmp4_gtpu4_pkt),
842 ice_fdir_icmp4_gtpu4_pkt,
843 sizeof(ice_fdir_icmp4_gtpu4_pkt),
844 ice_fdir_icmp4_gtpu4_pkt,
847 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER,
848 sizeof(ice_fdir_ipv4_gtpu4_pkt),
849 ice_fdir_ipv4_gtpu4_pkt,
850 sizeof(ice_fdir_ipv4_gtpu4_pkt),
851 ice_fdir_ipv4_gtpu4_pkt,
854 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6,
855 sizeof(ice_fdir_ipv6_gtpu4_pkt),
856 ice_fdir_ipv6_gtpu4_pkt,
857 sizeof(ice_fdir_ipv6_gtpu4_pkt),
858 ice_fdir_ipv6_gtpu4_pkt,
861 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP,
862 sizeof(ice_fdir_udp6_gtpu4_pkt),
863 ice_fdir_udp6_gtpu4_pkt,
864 sizeof(ice_fdir_udp6_gtpu4_pkt),
865 ice_fdir_udp6_gtpu4_pkt,
868 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP,
869 sizeof(ice_fdir_tcp6_gtpu4_pkt),
870 ice_fdir_tcp6_gtpu4_pkt,
871 sizeof(ice_fdir_tcp6_gtpu4_pkt),
872 ice_fdir_tcp6_gtpu4_pkt,
875 ICE_FLTR_PTYPE_NONF_IPV6_GTPU,
876 sizeof(ice_fdir_ipv6_gtpu6_pkt),
877 ice_fdir_ipv6_gtpu6_pkt,
878 sizeof(ice_fdir_ipv6_gtpu6_pkt),
879 ice_fdir_ipv6_gtpu6_pkt,
882 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH,
883 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
884 ice_fdir_ipv6_gtpu6_eh_pkt,
885 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
886 ice_fdir_ipv6_gtpu6_eh_pkt,
889 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW,
890 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
891 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
892 sizeof(ice_fdir_ipv6_gtpu6_eh_dw_pkt),
893 ice_fdir_ipv6_gtpu6_eh_dw_pkt,
896 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP,
897 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
898 ice_fdir_ipv6_gtpu6_eh_up_pkt,
899 sizeof(ice_fdir_ipv6_gtpu6_eh_up_pkt),
900 ice_fdir_ipv6_gtpu6_eh_up_pkt,
903 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER,
904 sizeof(ice_fdir_ipv6_gtpu6_pkt),
905 ice_fdir_ipv6_gtpu6_pkt,
906 sizeof(ice_fdir_ipv6_gtpu6_pkt),
907 ice_fdir_ipv6_gtpu6_pkt,
910 ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER,
911 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
912 ice_fdir_ipv4_gtpu4_eh_pkt,
913 sizeof(ice_fdir_ipv4_gtpu4_eh_pkt),
914 ice_fdir_ipv4_gtpu4_eh_pkt,
917 ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER,
918 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
919 ice_fdir_ipv6_gtpu6_eh_pkt,
920 sizeof(ice_fdir_ipv6_gtpu6_eh_pkt),
921 ice_fdir_ipv6_gtpu6_eh_pkt,
924 ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3,
925 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
926 sizeof(ice_fdir_ipv4_l2tpv3_pkt), ice_fdir_ipv4_l2tpv3_pkt,
929 ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3,
930 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
931 sizeof(ice_fdir_ipv6_l2tpv3_pkt), ice_fdir_ipv6_l2tpv3_pkt,
934 ICE_FLTR_PTYPE_NONF_IPV4_ESP,
935 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
936 sizeof(ice_fdir_ipv4_esp_pkt), ice_fdir_ipv4_esp_pkt,
939 ICE_FLTR_PTYPE_NONF_IPV6_ESP,
940 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
941 sizeof(ice_fdir_ipv6_esp_pkt), ice_fdir_ipv6_esp_pkt,
944 ICE_FLTR_PTYPE_NONF_IPV4_AH,
945 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
946 sizeof(ice_fdir_ipv4_ah_pkt), ice_fdir_ipv4_ah_pkt,
949 ICE_FLTR_PTYPE_NONF_IPV6_AH,
950 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
951 sizeof(ice_fdir_ipv6_ah_pkt), ice_fdir_ipv6_ah_pkt,
954 ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP,
955 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
956 ice_fdir_ipv4_nat_t_esp_pkt,
957 sizeof(ice_fdir_ipv4_nat_t_esp_pkt),
958 ice_fdir_ipv4_nat_t_esp_pkt,
961 ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP,
962 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
963 ice_fdir_ipv6_nat_t_esp_pkt,
964 sizeof(ice_fdir_ipv6_nat_t_esp_pkt),
965 ice_fdir_ipv6_nat_t_esp_pkt,
968 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE,
969 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
970 ice_fdir_ipv4_pfcp_node_pkt,
971 sizeof(ice_fdir_ipv4_pfcp_node_pkt),
972 ice_fdir_ipv4_pfcp_node_pkt,
975 ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION,
976 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
977 ice_fdir_ipv4_pfcp_session_pkt,
978 sizeof(ice_fdir_ipv4_pfcp_session_pkt),
979 ice_fdir_ipv4_pfcp_session_pkt,
982 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE,
983 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
984 ice_fdir_ipv6_pfcp_node_pkt,
985 sizeof(ice_fdir_ipv6_pfcp_node_pkt),
986 ice_fdir_ipv6_pfcp_node_pkt,
989 ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION,
990 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
991 ice_fdir_ipv6_pfcp_session_pkt,
992 sizeof(ice_fdir_ipv6_pfcp_session_pkt),
993 ice_fdir_ipv6_pfcp_session_pkt,
996 ICE_FLTR_PTYPE_NON_IP_L2,
997 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
998 sizeof(ice_fdir_non_ip_l2_pkt), ice_fdir_non_ip_l2_pkt,
1001 ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN,
1002 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
1003 sizeof(ice_fdir_udp4_vxlan_pkt), ice_fdir_udp4_vxlan_pkt,
1006 ICE_FLTR_PTYPE_NONF_ECPRI_TP0,
1007 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1008 sizeof(ice_fdir_ecpri_tp0_pkt), ice_fdir_ecpri_tp0_pkt,
1011 ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0,
1012 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1013 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1014 sizeof(ice_fdir_ipv4_udp_ecpri_tp0_pkt),
1015 ice_fdir_ipv4_udp_ecpri_tp0_pkt,
1018 ICE_FLTR_PTYPE_NONF_IPV6_TCP,
1019 sizeof(ice_fdir_tcpv6_pkt), ice_fdir_tcpv6_pkt,
1020 sizeof(ice_fdir_tcp6_tun_pkt), ice_fdir_tcp6_tun_pkt,
1023 ICE_FLTR_PTYPE_NONF_IPV6_UDP,
1024 sizeof(ice_fdir_udpv6_pkt), ice_fdir_udpv6_pkt,
1025 sizeof(ice_fdir_udp6_tun_pkt), ice_fdir_udp6_tun_pkt,
1028 ICE_FLTR_PTYPE_NONF_IPV6_SCTP,
1029 sizeof(ice_fdir_sctpv6_pkt), ice_fdir_sctpv6_pkt,
1030 sizeof(ice_fdir_sctp6_tun_pkt), ice_fdir_sctp6_tun_pkt,
1033 ICE_FLTR_PTYPE_NONF_IPV6_OTHER,
1034 sizeof(ice_fdir_ipv6_pkt), ice_fdir_ipv6_pkt,
1035 sizeof(ice_fdir_ip6_tun_pkt), ice_fdir_ip6_tun_pkt,
1039 #define ICE_FDIR_NUM_PKT ARRAY_SIZE(ice_fdir_pkt)
1042 * ice_set_dflt_val_fd_desc
1043 * @fd_fltr_ctx: pointer to fd filter descriptor
1045 static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
1047 fd_fltr_ctx->comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1048 fd_fltr_ctx->comp_report = ICE_FXD_FLTR_QW0_COMP_REPORT_SW_FAIL;
1049 fd_fltr_ctx->fd_space = ICE_FXD_FLTR_QW0_FD_SPACE_GUAR_BEST;
1050 fd_fltr_ctx->cnt_ena = ICE_FXD_FLTR_QW0_STAT_ENA_PKTS;
1051 fd_fltr_ctx->evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_TRUE;
1052 fd_fltr_ctx->toq = ICE_FXD_FLTR_QW0_TO_Q_EQUALS_QINDEX;
1053 fd_fltr_ctx->toq_prio = ICE_FXD_FLTR_QW0_TO_Q_PRIO1;
1054 fd_fltr_ctx->dpu_recipe = ICE_FXD_FLTR_QW0_DPU_RECIPE_DFLT;
1055 fd_fltr_ctx->drop = ICE_FXD_FLTR_QW0_DROP_NO;
1056 fd_fltr_ctx->flex_prio = ICE_FXD_FLTR_QW0_FLEX_PRI_NONE;
1057 fd_fltr_ctx->flex_mdid = ICE_FXD_FLTR_QW0_FLEX_MDID0;
1058 fd_fltr_ctx->flex_val = ICE_FXD_FLTR_QW0_FLEX_VAL0;
1059 fd_fltr_ctx->dtype = ICE_TX_DESC_DTYPE_FLTR_PROG;
1060 fd_fltr_ctx->desc_prof_prio = ICE_FXD_FLTR_QW1_PROF_PRIO_ZERO;
1061 fd_fltr_ctx->desc_prof = ICE_FXD_FLTR_QW1_PROF_ZERO;
1062 fd_fltr_ctx->swap = ICE_FXD_FLTR_QW1_SWAP_SET;
1063 fd_fltr_ctx->fdid_prio = ICE_FXD_FLTR_QW1_FDID_PRI_ONE;
1064 fd_fltr_ctx->fdid_mdid = ICE_FXD_FLTR_QW1_FDID_MDID_FD;
1065 fd_fltr_ctx->fdid = ICE_FXD_FLTR_QW1_FDID_ZERO;
1069 * ice_set_fd_desc_val
1070 * @ctx: pointer to fd filter descriptor context
1071 * @fdir_desc: populated with fd filter descriptor values
1074 ice_set_fd_desc_val(struct ice_fd_fltr_desc_ctx *ctx,
1075 struct ice_fltr_desc *fdir_desc)
1079 /* prep QW0 of FD filter programming desc */
1080 qword = ((u64)ctx->qindex << ICE_FXD_FLTR_QW0_QINDEX_S) &
1081 ICE_FXD_FLTR_QW0_QINDEX_M;
1082 qword |= ((u64)ctx->comp_q << ICE_FXD_FLTR_QW0_COMP_Q_S) &
1083 ICE_FXD_FLTR_QW0_COMP_Q_M;
1084 qword |= ((u64)ctx->comp_report << ICE_FXD_FLTR_QW0_COMP_REPORT_S) &
1085 ICE_FXD_FLTR_QW0_COMP_REPORT_M;
1086 qword |= ((u64)ctx->fd_space << ICE_FXD_FLTR_QW0_FD_SPACE_S) &
1087 ICE_FXD_FLTR_QW0_FD_SPACE_M;
1088 qword |= ((u64)ctx->cnt_index << ICE_FXD_FLTR_QW0_STAT_CNT_S) &
1089 ICE_FXD_FLTR_QW0_STAT_CNT_M;
1090 qword |= ((u64)ctx->cnt_ena << ICE_FXD_FLTR_QW0_STAT_ENA_S) &
1091 ICE_FXD_FLTR_QW0_STAT_ENA_M;
1092 qword |= ((u64)ctx->evict_ena << ICE_FXD_FLTR_QW0_EVICT_ENA_S) &
1093 ICE_FXD_FLTR_QW0_EVICT_ENA_M;
1094 qword |= ((u64)ctx->toq << ICE_FXD_FLTR_QW0_TO_Q_S) &
1095 ICE_FXD_FLTR_QW0_TO_Q_M;
1096 qword |= ((u64)ctx->toq_prio << ICE_FXD_FLTR_QW0_TO_Q_PRI_S) &
1097 ICE_FXD_FLTR_QW0_TO_Q_PRI_M;
1098 qword |= ((u64)ctx->dpu_recipe << ICE_FXD_FLTR_QW0_DPU_RECIPE_S) &
1099 ICE_FXD_FLTR_QW0_DPU_RECIPE_M;
1100 qword |= ((u64)ctx->drop << ICE_FXD_FLTR_QW0_DROP_S) &
1101 ICE_FXD_FLTR_QW0_DROP_M;
1102 qword |= ((u64)ctx->flex_prio << ICE_FXD_FLTR_QW0_FLEX_PRI_S) &
1103 ICE_FXD_FLTR_QW0_FLEX_PRI_M;
1104 qword |= ((u64)ctx->flex_mdid << ICE_FXD_FLTR_QW0_FLEX_MDID_S) &
1105 ICE_FXD_FLTR_QW0_FLEX_MDID_M;
1106 qword |= ((u64)ctx->flex_val << ICE_FXD_FLTR_QW0_FLEX_VAL_S) &
1107 ICE_FXD_FLTR_QW0_FLEX_VAL_M;
1108 fdir_desc->qidx_compq_space_stat = CPU_TO_LE64(qword);
1110 /* prep QW1 of FD filter programming desc */
1111 qword = ((u64)ctx->dtype << ICE_FXD_FLTR_QW1_DTYPE_S) &
1112 ICE_FXD_FLTR_QW1_DTYPE_M;
1113 qword |= ((u64)ctx->pcmd << ICE_FXD_FLTR_QW1_PCMD_S) &
1114 ICE_FXD_FLTR_QW1_PCMD_M;
1115 qword |= ((u64)ctx->desc_prof_prio << ICE_FXD_FLTR_QW1_PROF_PRI_S) &
1116 ICE_FXD_FLTR_QW1_PROF_PRI_M;
1117 qword |= ((u64)ctx->desc_prof << ICE_FXD_FLTR_QW1_PROF_S) &
1118 ICE_FXD_FLTR_QW1_PROF_M;
1119 qword |= ((u64)ctx->fd_vsi << ICE_FXD_FLTR_QW1_FD_VSI_S) &
1120 ICE_FXD_FLTR_QW1_FD_VSI_M;
1121 qword |= ((u64)ctx->swap << ICE_FXD_FLTR_QW1_SWAP_S) &
1122 ICE_FXD_FLTR_QW1_SWAP_M;
1123 qword |= ((u64)ctx->fdid_prio << ICE_FXD_FLTR_QW1_FDID_PRI_S) &
1124 ICE_FXD_FLTR_QW1_FDID_PRI_M;
1125 qword |= ((u64)ctx->fdid_mdid << ICE_FXD_FLTR_QW1_FDID_MDID_S) &
1126 ICE_FXD_FLTR_QW1_FDID_MDID_M;
1127 qword |= ((u64)ctx->fdid << ICE_FXD_FLTR_QW1_FDID_S) &
1128 ICE_FXD_FLTR_QW1_FDID_M;
1129 fdir_desc->dtype_cmd_vsi_fdid = CPU_TO_LE64(qword);
1133 * ice_fdir_get_prgm_desc - set a fdir descriptor from a fdir filter struct
1134 * @hw: pointer to the hardware structure
1136 * @fdesc: filter descriptor
1137 * @add: if add is true, this is an add operation, false implies delete
1140 ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
1141 struct ice_fltr_desc *fdesc, bool add)
1143 struct ice_fd_fltr_desc_ctx fdir_fltr_ctx = { 0 };
1145 /* set default context info */
1146 ice_set_dflt_val_fd_desc(&fdir_fltr_ctx);
1148 /* change sideband filtering values */
1149 fdir_fltr_ctx.fdid = input->fltr_id;
1150 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DROP_PKT) {
1151 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
1152 fdir_fltr_ctx.qindex = 0;
1153 } else if (input->dest_ctl ==
1154 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
1155 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1156 fdir_fltr_ctx.qindex = 0;
1158 if (input->dest_ctl ==
1159 ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP)
1160 fdir_fltr_ctx.toq = input->q_region;
1161 fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
1162 fdir_fltr_ctx.qindex = input->q_index;
1164 fdir_fltr_ctx.cnt_ena = input->cnt_ena;
1165 fdir_fltr_ctx.cnt_index = input->cnt_index;
1166 fdir_fltr_ctx.fd_vsi = ice_get_hw_vsi_num(hw, input->dest_vsi);
1167 fdir_fltr_ctx.evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE;
1168 if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER)
1169 fdir_fltr_ctx.toq_prio = 0;
1171 fdir_fltr_ctx.toq_prio = 3;
1172 fdir_fltr_ctx.pcmd = add ? ICE_FXD_FLTR_QW1_PCMD_ADD :
1173 ICE_FXD_FLTR_QW1_PCMD_REMOVE;
1174 fdir_fltr_ctx.swap = ICE_FXD_FLTR_QW1_SWAP_NOT_SET;
1175 fdir_fltr_ctx.comp_q = ICE_FXD_FLTR_QW0_COMP_Q_ZERO;
1176 fdir_fltr_ctx.comp_report = input->comp_report;
1177 fdir_fltr_ctx.fdid_prio = input->fdid_prio;
1178 fdir_fltr_ctx.desc_prof = 1;
1179 fdir_fltr_ctx.desc_prof_prio = 3;
1180 ice_set_fd_desc_val(&fdir_fltr_ctx, fdesc);
1184 * ice_alloc_fd_res_cntr - obtain counter resource for FD type
1185 * @hw: pointer to the hardware structure
1186 * @cntr_id: returns counter index
1188 enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id)
1190 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1191 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1195 * ice_free_fd_res_cntr - Free counter resource for FD type
1196 * @hw: pointer to the hardware structure
1197 * @cntr_id: counter index to be freed
1199 enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id)
1201 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1202 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1206 * ice_alloc_fd_guar_item - allocate resource for FD guaranteed entries
1207 * @hw: pointer to the hardware structure
1208 * @cntr_id: returns counter index
1209 * @num_fltr: number of filter entries to be allocated
1212 ice_alloc_fd_guar_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1214 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1215 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1220 * ice_free_fd_guar_item - Free flow director guaranteed entries
1221 * @hw: pointer to the hardware structure
1222 * @cntr_id: counter index that needs to be freed
1223 * @num_fltr: number of filters to be freed
1226 ice_free_fd_guar_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1228 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1229 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1234 * ice_alloc_fd_shrd_item - allocate resource for flow director shared entries
1235 * @hw: pointer to the hardware structure
1236 * @cntr_id: returns counter index
1237 * @num_fltr: number of filter entries to be allocated
1240 ice_alloc_fd_shrd_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1242 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1243 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1248 * ice_free_fd_shrd_item - Free flow director shared entries
1249 * @hw: pointer to the hardware structure
1250 * @cntr_id: counter index that needs to be freed
1251 * @num_fltr: number of filters to be freed
1254 ice_free_fd_shrd_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1256 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1257 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1262 * ice_get_fdir_cnt_all - get the number of Flow Director filters
1263 * @hw: hardware data structure
1265 * Returns the number of filters available on device
1267 int ice_get_fdir_cnt_all(struct ice_hw *hw)
1269 return hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
1273 * ice_pkt_insert_ipv6_addr - insert a be32 IPv6 address into a memory buffer.
1274 * @pkt: packet buffer
1275 * @offset: offset into buffer
1276 * @addr: IPv6 address to convert and insert into pkt at offset
1278 static void ice_pkt_insert_ipv6_addr(u8 *pkt, int offset, __be32 *addr)
1282 for (idx = 0; idx < ICE_IPV6_ADDR_LEN_AS_U32; idx++)
1283 ice_memcpy(pkt + offset + idx * sizeof(*addr), &addr[idx],
1284 sizeof(*addr), ICE_NONDMA_TO_NONDMA);
1288 * ice_pkt_insert_u6_qfi - insert a u6 value qfi into a memory buffer for gtpu
1289 * @pkt: packet buffer
1290 * @offset: offset into buffer
1291 * @data: 8 bit value to convert and insert into pkt at offset
1293 * This function is designed for inserting qfi (6 bits) for gtpu.
1295 static void ice_pkt_insert_u6_qfi(u8 *pkt, int offset, u8 data)
1299 ret = (data & 0x3F) + (*(pkt + offset) & 0xC0);
1300 ice_memcpy(pkt + offset, &ret, sizeof(ret), ICE_NONDMA_TO_NONDMA);
1304 * ice_pkt_insert_u8 - insert a u8 value into a memory buffer.
1305 * @pkt: packet buffer
1306 * @offset: offset into buffer
1307 * @data: 8 bit value to convert and insert into pkt at offset
1309 static void ice_pkt_insert_u8(u8 *pkt, int offset, u8 data)
1311 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1315 * ice_pkt_insert_u8_tc - insert a u8 value into a memory buffer for TC ipv6.
1316 * @pkt: packet buffer
1317 * @offset: offset into buffer
1318 * @data: 8 bit value to convert and insert into pkt at offset
1320 * This function is designed for inserting Traffic Class (TC) for IPv6,
1321 * since that TC is not aligned in number of bytes. Here we split it out
1322 * into two part and fill each byte with data copy from pkt, then insert
1323 * the two bytes data one by one.
1325 static void ice_pkt_insert_u8_tc(u8 *pkt, int offset, u8 data)
1329 high = (data >> 4) + (*(pkt + offset) & 0xF0);
1330 ice_memcpy(pkt + offset, &high, sizeof(high), ICE_NONDMA_TO_NONDMA);
1332 low = (*(pkt + offset + 1) & 0x0F) + ((data & 0x0F) << 4);
1333 ice_memcpy(pkt + offset + 1, &low, sizeof(low), ICE_NONDMA_TO_NONDMA);
1337 * ice_pkt_insert_u16 - insert a be16 value into a memory buffer.
1338 * @pkt: packet buffer
1339 * @offset: offset into buffer
1340 * @data: 16 bit value to convert and insert into pkt at offset
1342 static void ice_pkt_insert_u16(u8 *pkt, int offset, __be16 data)
1344 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1348 * ice_pkt_insert_u32 - insert a be32 value into a memory buffer.
1349 * @pkt: packet buffer
1350 * @offset: offset into buffer
1351 * @data: 32 bit value to convert and insert into pkt at offset
1353 static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
1355 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1359 * ice_pkt_insert_mac_addr - insert a MAC addr into a memory buffer.
1360 * @pkt: packet buffer
1361 * @addr: MAC address to convert and insert into pkt at offset
1363 static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
1365 ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
1369 * ice_fdir_get_open_tunnel_port
1370 * @hw: pointer to the hardware structure
1372 * @port: returns open port
1374 * returns an open tunnel port specified for this flow type
1376 static enum ice_status
1377 ice_fdir_get_open_tunnel_port(struct ice_hw *hw, enum ice_fltr_ptype flow,
1381 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1383 if (!ice_get_open_tunnel_port(hw, TNL_ECPRI, port))
1384 return ICE_ERR_DOES_NOT_EXIST;
1387 if (!ice_get_open_tunnel_port(hw, TNL_VXLAN, port) &&
1388 !ice_get_open_tunnel_port(hw, TNL_GENEVE, port))
1389 return ICE_ERR_DOES_NOT_EXIST;
1396 * ice_fdir_get_gen_prgm_pkt - generate a training packet
1397 * @hw: pointer to the hardware structure
1398 * @input: flow director filter data structure
1399 * @pkt: pointer to return filter packet
1400 * @frag: generate a fragment packet
1401 * @tun: true implies generate a tunnel packet
1404 ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
1405 u8 *pkt, bool frag, bool tun)
1407 enum ice_fltr_ptype flow;
1412 if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1413 switch (input->ip.v4.proto) {
1414 case ICE_IP_PROTO_TCP:
1415 flow = ICE_FLTR_PTYPE_NONF_IPV4_TCP;
1417 case ICE_IP_PROTO_UDP:
1418 flow = ICE_FLTR_PTYPE_NONF_IPV4_UDP;
1420 case ICE_IP_PROTO_SCTP:
1421 flow = ICE_FLTR_PTYPE_NONF_IPV4_SCTP;
1424 flow = ICE_FLTR_PTYPE_NONF_IPV4_OTHER;
1427 } else if (input->flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1428 switch (input->ip.v6.proto) {
1429 case ICE_IP_PROTO_TCP:
1430 flow = ICE_FLTR_PTYPE_NONF_IPV6_TCP;
1432 case ICE_IP_PROTO_UDP:
1433 flow = ICE_FLTR_PTYPE_NONF_IPV6_UDP;
1435 case ICE_IP_PROTO_SCTP:
1436 flow = ICE_FLTR_PTYPE_NONF_IPV6_SCTP;
1439 flow = ICE_FLTR_PTYPE_NONF_IPV6_OTHER;
1443 flow = input->flow_type;
1446 for (idx = 0; idx < ICE_FDIR_NUM_PKT; idx++)
1447 if (ice_fdir_pkt[idx].flow == flow)
1449 if (idx == ICE_FDIR_NUM_PKT)
1450 return ICE_ERR_PARAM;
1452 ice_memcpy(pkt, ice_fdir_pkt[idx].pkt,
1453 ice_fdir_pkt[idx].pkt_len, ICE_NONDMA_TO_NONDMA);
1456 if (!ice_fdir_pkt[idx].tun_pkt)
1457 return ICE_ERR_PARAM;
1460 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1461 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1462 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1463 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1464 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1465 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1466 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1467 ice_fdir_pkt[idx].tun_pkt_len,
1468 ICE_NONDMA_TO_NONDMA);
1469 loc = &pkt[ICE_FDIR_GTPU_IP_INNER_PKT_OFF];
1471 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1472 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1473 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1474 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1475 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1476 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1477 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1478 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1479 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1480 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1481 ice_fdir_pkt[idx].tun_pkt_len,
1482 ICE_NONDMA_TO_NONDMA);
1483 loc = &pkt[ICE_FDIR_GTPU_EH_INNER_PKT_OFF];
1486 if (ice_fdir_get_open_tunnel_port(hw, flow, &tnl_port))
1487 return ICE_ERR_DOES_NOT_EXIST;
1489 ice_memcpy(pkt, ice_fdir_pkt[idx].tun_pkt,
1490 ice_fdir_pkt[idx].tun_pkt_len,
1491 ICE_NONDMA_TO_NONDMA);
1492 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_DST_PORT_OFFSET,
1494 loc = &pkt[ICE_FDIR_TUN_PKT_OFF];
1499 /* Reverse the src and dst, since the HW expects them to be from Tx
1500 * perspective. The input from user is from Rx filter perspective.
1503 case ICE_FLTR_PTYPE_NONF_IPV4_TCP:
1504 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1505 input->ip.v4.src_ip);
1506 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_DST_PORT_OFFSET,
1507 input->ip.v4.src_port);
1508 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1509 input->ip.v4.dst_ip);
1510 ice_pkt_insert_u16(loc, ICE_IPV4_TCP_SRC_PORT_OFFSET,
1511 input->ip.v4.dst_port);
1512 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1513 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1514 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1516 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_DF;
1518 case ICE_FLTR_PTYPE_NONF_IPV4_UDP:
1519 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1520 ice_pkt_insert_mac_addr(pkt + ETH_ALEN,
1521 input->ext_data_outer.src_mac);
1522 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1523 input->ip_outer.v4.dst_ip);
1524 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1525 input->ip_outer.v4.src_ip);
1526 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1527 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1528 input->ip.v4.src_ip);
1529 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1530 input->ip.v4.src_port);
1531 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1532 input->ip.v4.dst_ip);
1533 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1534 input->ip.v4.dst_port);
1535 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1536 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1537 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1538 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1540 case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
1541 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1542 input->ip.v4.src_ip);
1543 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_DST_PORT_OFFSET,
1544 input->ip.v4.src_port);
1545 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1546 input->ip.v4.dst_ip);
1547 ice_pkt_insert_u16(loc, ICE_IPV4_SCTP_SRC_PORT_OFFSET,
1548 input->ip.v4.dst_port);
1549 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1550 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1551 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1553 case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
1554 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1555 input->ip.v4.src_ip);
1556 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1557 input->ip.v4.dst_ip);
1558 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1559 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1560 ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
1561 input->ip.v4.proto);
1562 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1564 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN:
1565 ice_pkt_insert_mac_addr(pkt, input->ext_data_outer.dst_mac);
1566 ice_pkt_insert_mac_addr(pkt + ETH_ALEN, input->ext_data_outer.src_mac);
1567 ice_pkt_insert_u32(pkt, ICE_IPV4_SRC_ADDR_OFFSET,
1568 input->ip_outer.v4.dst_ip);
1569 ice_pkt_insert_u32(pkt, ICE_IPV4_DST_ADDR_OFFSET,
1570 input->ip_outer.v4.src_ip);
1571 ice_pkt_insert_u8(pkt, ICE_IPV4_TOS_OFFSET, input->ip_outer.v4.tos);
1572 ice_pkt_insert_u32(pkt, ICE_IPV4_VXLAN_VNI_OFFSET,
1573 input->vxlan_data.vni);
1574 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1575 input->ip.v4.src_ip);
1576 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_DST_PORT_OFFSET,
1577 input->ip.v4.src_port);
1578 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1579 input->ip.v4.dst_ip);
1580 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1581 input->ip.v4.dst_port);
1582 ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
1583 ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
1584 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1585 ice_pkt_insert_mac_addr(loc + ETH_ALEN, input->ext_data.src_mac);
1587 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU:
1588 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1589 input->ip.v4.src_ip);
1590 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1591 input->ip.v4.dst_ip);
1592 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1593 input->gtpu_data.teid);
1595 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4:
1596 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4:
1597 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4:
1598 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4:
1599 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1600 input->ip.v4.src_ip);
1601 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1602 input->ip.v4.dst_ip);
1603 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1604 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1605 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_PROTO_OFFSET,
1606 input->ip.v4.proto);
1608 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH:
1609 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW:
1610 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP:
1611 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1612 input->ip.v4.src_ip);
1613 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1614 input->ip.v4.dst_ip);
1615 ice_pkt_insert_u32(loc, ICE_IPV4_GTPU_TEID_OFFSET,
1616 input->gtpu_data.teid);
1617 ice_pkt_insert_u6_qfi(loc, ICE_IPV4_GTPU_QFI_OFFSET,
1618 input->gtpu_data.qfi);
1620 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP:
1621 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_UDP:
1622 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_UDP:
1623 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_UDP:
1624 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1625 input->ip.v4.src_ip);
1626 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_DST_PORT_OFFSET,
1627 input->ip.v4.src_port);
1628 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1629 input->ip.v4.dst_ip);
1630 ice_pkt_insert_u16(loc, ICE_UDP4_NO_MAC_SRC_PORT_OFFSET,
1631 input->ip.v4.dst_port);
1632 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1633 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1635 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
1636 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_TCP:
1637 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_DW_IPV4_TCP:
1638 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_UP_IPV4_TCP:
1639 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_DST_ADDR_OFFSET,
1640 input->ip.v4.src_ip);
1641 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_DST_PORT_OFFSET,
1642 input->ip.v4.src_port);
1643 ice_pkt_insert_u32(loc, ICE_IPV4_NO_MAC_SRC_ADDR_OFFSET,
1644 input->ip.v4.dst_ip);
1645 ice_pkt_insert_u16(loc, ICE_TCP4_NO_MAC_SRC_PORT_OFFSET,
1646 input->ip.v4.dst_port);
1647 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TOS_OFFSET, input->ip.v4.tos);
1648 ice_pkt_insert_u8(loc, ICE_IPV4_NO_MAC_TTL_OFFSET, input->ip.v4.ttl);
1650 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6:
1651 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1652 input->ip.v6.src_ip);
1653 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1654 input->ip.v6.dst_ip);
1655 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1656 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1657 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_PROTO_OFFSET,
1658 input->ip.v6.proto);
1660 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_UDP:
1661 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1662 input->ip.v6.src_ip);
1663 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1664 input->ip.v6.dst_ip);
1665 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_DST_PORT_OFFSET,
1666 input->ip.v6.src_port);
1667 ice_pkt_insert_u16(loc, ICE_UDP6_NO_MAC_SRC_PORT_OFFSET,
1668 input->ip.v6.dst_port);
1669 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1670 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1672 case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV6_TCP:
1673 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_DST_ADDR_OFFSET,
1674 input->ip.v6.src_ip);
1675 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_NO_MAC_SRC_ADDR_OFFSET,
1676 input->ip.v6.dst_ip);
1677 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_DST_PORT_OFFSET,
1678 input->ip.v6.src_port);
1679 ice_pkt_insert_u16(loc, ICE_TCP6_NO_MAC_SRC_PORT_OFFSET,
1680 input->ip.v6.dst_port);
1681 ice_pkt_insert_u8_tc(loc, ICE_IPV6_NO_MAC_TC_OFFSET, input->ip.v6.tc);
1682 ice_pkt_insert_u8(loc, ICE_IPV6_NO_MAC_HLIM_OFFSET, input->ip.v6.hlim);
1684 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU:
1685 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER:
1686 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1687 input->ip.v6.src_ip);
1688 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1689 input->ip.v6.dst_ip);
1690 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1691 input->gtpu_data.teid);
1693 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH:
1694 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_DW:
1695 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_UP:
1696 case ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER:
1697 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1698 input->ip.v6.src_ip);
1699 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1700 input->ip.v6.dst_ip);
1701 ice_pkt_insert_u32(loc, ICE_IPV6_GTPU_TEID_OFFSET,
1702 input->gtpu_data.teid);
1703 ice_pkt_insert_u6_qfi(loc, ICE_IPV6_GTPU_QFI_OFFSET,
1704 input->gtpu_data.qfi);
1706 case ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3:
1707 ice_pkt_insert_u32(loc, ICE_IPV4_L2TPV3_SESS_ID_OFFSET,
1708 input->l2tpv3_data.session_id);
1710 case ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3:
1711 ice_pkt_insert_u32(loc, ICE_IPV6_L2TPV3_SESS_ID_OFFSET,
1712 input->l2tpv3_data.session_id);
1714 case ICE_FLTR_PTYPE_NONF_IPV4_ESP:
1715 ice_pkt_insert_u32(loc, ICE_IPV4_ESP_SPI_OFFSET,
1716 input->ip.v4.sec_parm_idx);
1718 case ICE_FLTR_PTYPE_NONF_IPV6_ESP:
1719 ice_pkt_insert_u32(loc, ICE_IPV6_ESP_SPI_OFFSET,
1720 input->ip.v6.sec_parm_idx);
1722 case ICE_FLTR_PTYPE_NONF_IPV4_AH:
1723 ice_pkt_insert_u32(loc, ICE_IPV4_AH_SPI_OFFSET,
1724 input->ip.v4.sec_parm_idx);
1726 case ICE_FLTR_PTYPE_NONF_IPV6_AH:
1727 ice_pkt_insert_u32(loc, ICE_IPV6_AH_SPI_OFFSET,
1728 input->ip.v6.sec_parm_idx);
1730 case ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP:
1731 ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
1732 input->ip.v4.src_ip);
1733 ice_pkt_insert_u32(loc, ICE_IPV4_SRC_ADDR_OFFSET,
1734 input->ip.v4.dst_ip);
1735 ice_pkt_insert_u32(loc, ICE_IPV4_NAT_T_ESP_SPI_OFFSET,
1736 input->ip.v4.sec_parm_idx);
1738 case ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP:
1739 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1740 input->ip.v6.src_ip);
1741 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1742 input->ip.v6.dst_ip);
1743 ice_pkt_insert_u32(loc, ICE_IPV6_NAT_T_ESP_SPI_OFFSET,
1744 input->ip.v6.sec_parm_idx);
1746 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE:
1747 case ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION:
1748 ice_pkt_insert_u16(loc, ICE_IPV4_UDP_SRC_PORT_OFFSET,
1749 input->ip.v4.dst_port);
1751 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE:
1752 case ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION:
1753 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1754 input->ip.v6.dst_port);
1756 case ICE_FLTR_PTYPE_NON_IP_L2:
1757 ice_pkt_insert_u16(loc, ICE_MAC_ETHTYPE_OFFSET,
1758 input->ext_data.ether_type);
1760 case ICE_FLTR_PTYPE_NONF_ECPRI_TP0:
1761 ice_pkt_insert_u16(loc, ICE_ECPRI_TP0_PC_ID_OFFSET,
1762 input->ecpri_data.pc_id);
1764 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1765 /* Use pkt instead of loc, since PC_ID is in outer part */
1766 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_ECPRI_TP0_PC_ID_OFFSET,
1767 input->ecpri_data.pc_id);
1769 case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
1770 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1771 input->ip.v6.src_ip);
1772 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1773 input->ip.v6.dst_ip);
1774 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_DST_PORT_OFFSET,
1775 input->ip.v6.src_port);
1776 ice_pkt_insert_u16(loc, ICE_IPV6_TCP_SRC_PORT_OFFSET,
1777 input->ip.v6.dst_port);
1778 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1779 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1780 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1782 case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
1783 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1784 input->ip.v6.src_ip);
1785 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1786 input->ip.v6.dst_ip);
1787 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_DST_PORT_OFFSET,
1788 input->ip.v6.src_port);
1789 ice_pkt_insert_u16(loc, ICE_IPV6_UDP_SRC_PORT_OFFSET,
1790 input->ip.v6.dst_port);
1791 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1792 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1793 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1795 case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
1796 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1797 input->ip.v6.src_ip);
1798 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1799 input->ip.v6.dst_ip);
1800 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_DST_PORT_OFFSET,
1801 input->ip.v6.src_port);
1802 ice_pkt_insert_u16(loc, ICE_IPV6_SCTP_SRC_PORT_OFFSET,
1803 input->ip.v6.dst_port);
1804 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1805 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1806 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1808 case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
1809 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
1810 input->ip.v6.src_ip);
1811 ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_SRC_ADDR_OFFSET,
1812 input->ip.v6.dst_ip);
1813 ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
1814 ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
1815 ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
1816 input->ip.v6.proto);
1817 ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
1820 return ICE_ERR_PARAM;
1823 if (input->flex_fltr)
1824 ice_pkt_insert_u16(loc, input->flex_offset, input->flex_word);
1830 * ice_fdir_get_prgm_pkt - generate a training packet
1831 * @input: flow director filter data structure
1832 * @pkt: pointer to return filter packet
1833 * @frag: generate a fragment packet
1836 ice_fdir_get_prgm_pkt(struct ice_fdir_fltr *input, u8 *pkt, bool frag)
1838 return ice_fdir_get_gen_prgm_pkt(NULL, input, pkt, frag, false);
1842 * ice_fdir_has_frag - does flow type have 2 ptypes
1845 * returns true is there is a fragment packet for this ptype
1847 bool ice_fdir_has_frag(enum ice_fltr_ptype flow)
1849 if (flow == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
1856 * ice_fdir_find_by_idx - find filter with idx
1857 * @hw: pointer to hardware structure
1858 * @fltr_idx: index to find.
1860 * Returns pointer to filter if found or null
1862 struct ice_fdir_fltr *
1863 ice_fdir_find_fltr_by_idx(struct ice_hw *hw, u32 fltr_idx)
1865 struct ice_fdir_fltr *rule;
1867 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1869 /* rule ID found in the list */
1870 if (fltr_idx == rule->fltr_id)
1872 if (fltr_idx < rule->fltr_id)
1879 * ice_fdir_list_add_fltr - add a new node to the flow director filter list
1880 * @hw: hardware structure
1881 * @fltr: filter node to add to structure
1883 void ice_fdir_list_add_fltr(struct ice_hw *hw, struct ice_fdir_fltr *fltr)
1885 struct ice_fdir_fltr *rule, *parent = NULL;
1887 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1889 /* rule ID found or pass its spot in the list */
1890 if (rule->fltr_id >= fltr->fltr_id)
1896 LIST_ADD_AFTER(&fltr->fltr_node, &parent->fltr_node);
1898 LIST_ADD(&fltr->fltr_node, &hw->fdir_list_head);
1902 * ice_fdir_update_cntrs - increment / decrement filter counter
1903 * @hw: pointer to hardware structure
1904 * @flow: filter flow type
1905 * @acl_fltr: true indicates an ACL filter
1906 * @add: true implies filters added
1909 ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,
1910 bool acl_fltr, bool add)
1914 incr = add ? 1 : -1;
1915 hw->fdir_active_fltr += incr;
1916 if (flow == ICE_FLTR_PTYPE_NONF_NONE || flow >= ICE_FLTR_PTYPE_MAX) {
1917 ice_debug(hw, ICE_DBG_SW, "Unknown filter type %d\n", flow);
1920 hw->acl_fltr_cnt[flow] += incr;
1922 hw->fdir_fltr_cnt[flow] += incr;
1927 * ice_cmp_ipv6_addr - compare 2 IP v6 addresses
1931 * Returns 0 on equal, returns non-0 if different
1933 static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)
1935 return memcmp(a, b, 4 * sizeof(__be32));
1939 * ice_fdir_comp_rules - compare 2 filters
1940 * @a: a Flow Director filter data structure
1941 * @b: a Flow Director filter data structure
1942 * @v6: bool true if v6 filter
1944 * Returns true if the filters match
1947 ice_fdir_comp_rules(struct ice_fdir_fltr *a, struct ice_fdir_fltr *b, bool v6)
1949 enum ice_fltr_ptype flow_type = a->flow_type;
1951 /* The calling function already checks that the two filters have the
1955 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
1956 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
1957 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP) {
1958 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
1959 a->ip.v4.src_ip == b->ip.v4.src_ip &&
1960 a->ip.v4.dst_port == b->ip.v4.dst_port &&
1961 a->ip.v4.src_port == b->ip.v4.src_port)
1963 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {
1964 if (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&
1965 a->ip.v4.src_ip == b->ip.v4.src_ip &&
1966 a->ip.v4.l4_header == b->ip.v4.l4_header &&
1967 a->ip.v4.proto == b->ip.v4.proto &&
1968 a->ip.v4.ip_ver == b->ip.v4.ip_ver &&
1969 a->ip.v4.tos == b->ip.v4.tos)
1973 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_UDP ||
1974 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_TCP ||
1975 flow_type == ICE_FLTR_PTYPE_NONF_IPV6_SCTP) {
1976 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
1977 a->ip.v6.src_port == b->ip.v6.src_port &&
1978 !ice_cmp_ipv6_addr(a->ip.v6.dst_ip,
1980 !ice_cmp_ipv6_addr(a->ip.v6.src_ip,
1983 } else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {
1984 if (a->ip.v6.dst_port == b->ip.v6.dst_port &&
1985 a->ip.v6.src_port == b->ip.v6.src_port)
1994 * ice_fdir_is_dup_fltr - test if filter is already in list for PF
1995 * @hw: hardware data structure
1996 * @input: Flow Director filter data structure
1998 * Returns true if the filter is found in the list
2000 bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
2002 struct ice_fdir_fltr *rule;
2005 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2007 enum ice_fltr_ptype flow_type;
2009 if (rule->flow_type != input->flow_type)
2012 flow_type = input->flow_type;
2013 if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||
2014 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||
2015 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP ||
2016 flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)
2017 ret = ice_fdir_comp_rules(rule, input, false);
2019 ret = ice_fdir_comp_rules(rule, input, true);
2021 if (rule->fltr_id == input->fltr_id &&
2022 rule->q_index != input->q_index)
2033 * ice_clear_pf_fd_table - admin command to clear FD table for PF
2034 * @hw: hardware data structure
2036 * Clears FD table entries for a PF by issuing admin command (direct, 0x0B06)
2038 enum ice_status ice_clear_pf_fd_table(struct ice_hw *hw)
2040 struct ice_aqc_clear_fd_table *cmd;
2041 struct ice_aq_desc desc;
2043 cmd = &desc.params.clear_fd_table;
2044 ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_clear_fd_table);
2045 cmd->clear_type = CL_FD_VM_VF_TYPE_PF_IDX;
2046 /* vsi_index must be 0 to clear FD table for a PF */
2047 cmd->vsi_index = CPU_TO_LE16(0);
2049 return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);