1
2
3
4
5#include "ice_common.h"
6#include "ice_fdir.h"
7
8
9static 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
17};
18
19static 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,
25 0x00, 0x00,
26};
27
28static 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,
35};
36
37static 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,
42 0x00, 0x00
43};
44
45static 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,
58};
59
60static 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,
70};
71
72static 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,
83};
84
85static 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,
98};
99
100static 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,
111};
112
113static 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,
125};
126
127static 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,
141};
142
143static 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,
154};
155
156static 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,
168};
169
170static 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,
184};
185
186static 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,
197};
198
199static 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,
211};
212
213static 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,
227};
228
229static 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,
241 0x00, 0x00,
242};
243
244static 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,
257};
258
259static 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,
273};
274
275static 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,
290};
291
292static 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,
307};
308
309static 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,
326};
327
328static 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,
345};
346
347static 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,
364};
365
366static 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,
373};
374
375static 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,
384 0x00, 0x00,
385};
386
387static 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,
393 0x00, 0x00
394};
395
396static 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,
405};
406
407static 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,
414 0x00, 0x00
415};
416
417static 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,
427};
428
429static 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,
436 0x00, 0x00,
437};
438
439static 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,
448};
449
450static 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,
458 0x00, 0x00,
459};
460
461static 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,
469 0x00, 0x00,
470};
471
472static 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,
483};
484
485static 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,
496};
497
498static 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,
502};
503
504static 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,
509};
510
511static 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,
519};
520
521static 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,
530};
531
532static 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,
537 0x00, 0x00
538};
539
540static 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,
550 0x00, 0x00,
551};
552
553static 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,
562};
563
564static 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,
573 0x00, 0x00,
574};
575
576static 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,
584};
585
586static 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,
600};
601
602static 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,
615};
616
617static 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,
630};
631
632static 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,
644};
645
646static 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,
663};
664
665static 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,
680};
681
682static 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,
698};
699
700static 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,
714};
715
716
717static const struct ice_fdir_base_pkt ice_fdir_pkt[] = {
718 {
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,
722 },
723 {
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,
727 },
728 {
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,
732 },
733 {
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,
737 },
738 {
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,
742 },
743 {
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,
747 },
748 {
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,
754 },
755 {
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,
761 },
762 {
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,
768 },
769 {
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,
775 },
776 {
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,
782 },
783 {
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,
789 },
790 {
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,
796 },
797 {
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,
803 },
804 {
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,
810 },
811 {
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,
817 },
818 {
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,
824 },
825 {
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,
831 },
832 {
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,
838 },
839 {
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,
845 },
846 {
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,
852 },
853 {
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,
859 },
860 {
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,
866 },
867 {
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,
873 },
874 {
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,
880 },
881 {
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,
887 },
888 {
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,
894 },
895 {
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,
901 },
902 {
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,
908 },
909 {
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,
915 },
916 {
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,
922 },
923 {
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,
929 },
930 {
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,
936 },
937 {
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,
943 },
944 {
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,
948 },
949 {
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,
953 },
954 {
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,
958 },
959 {
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,
963 },
964 {
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,
968 },
969 {
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,
973 },
974 {
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,
980 },
981 {
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,
987 },
988 {
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,
994 },
995 {
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,
1001 },
1002 {
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,
1008 },
1009 {
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,
1015 },
1016 {
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,
1020 },
1021 {
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,
1025 },
1026 {
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,
1030 },
1031 {
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,
1037 },
1038 {
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,
1042 },
1043 {
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,
1047 },
1048 {
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,
1052 },
1053 {
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,
1057 },
1058};
1059
1060#define ICE_FDIR_NUM_PKT ARRAY_SIZE(ice_fdir_pkt)
1061
1062
1063
1064
1065
1066static void ice_set_dflt_val_fd_desc(struct ice_fd_fltr_desc_ctx *fd_fltr_ctx)
1067{
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;
1087}
1088
1089
1090
1091
1092
1093
1094static void
1095ice_set_fd_desc_val(struct ice_fd_fltr_desc_ctx *ctx,
1096 struct ice_fltr_desc *fdir_desc)
1097{
1098 u64 qword;
1099
1100
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);
1130
1131
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);
1151}
1152
1153
1154
1155
1156
1157
1158
1159
1160void
1161ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
1162 struct ice_fltr_desc *fdesc, bool add)
1163{
1164 struct ice_fd_fltr_desc_ctx fdir_fltr_ctx = { 0 };
1165
1166
1167 ice_set_dflt_val_fd_desc(&fdir_fltr_ctx);
1168
1169
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;
1178 } else {
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;
1184 }
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;
1191 else
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);
1202}
1203
1204
1205
1206
1207
1208
1209enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id)
1210{
1211 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1212 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1213}
1214
1215
1216
1217
1218
1219
1220enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id)
1221{
1222 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK,
1223 ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1, cntr_id);
1224}
1225
1226
1227
1228
1229
1230
1231
1232enum ice_status
1233ice_alloc_fd_guar_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1234{
1235 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1236 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1237 cntr_id);
1238}
1239
1240
1241
1242
1243
1244
1245
1246enum ice_status
1247ice_free_fd_guar_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1248{
1249 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES,
1250 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1251 cntr_id);
1252}
1253
1254
1255
1256
1257
1258
1259
1260enum ice_status
1261ice_alloc_fd_shrd_item(struct ice_hw *hw, u16 *cntr_id, u16 num_fltr)
1262{
1263 return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1264 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1265 cntr_id);
1266}
1267
1268
1269
1270
1271
1272
1273
1274enum ice_status
1275ice_free_fd_shrd_item(struct ice_hw *hw, u16 cntr_id, u16 num_fltr)
1276{
1277 return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES,
1278 ICE_AQC_RES_TYPE_FLAG_DEDICATED, num_fltr,
1279 cntr_id);
1280}
1281
1282
1283
1284
1285
1286
1287
1288int ice_get_fdir_cnt_all(struct ice_hw *hw)
1289{
1290 return hw->func_caps.fd_fltr_guar + hw->func_caps.fd_fltr_best_effort;
1291}
1292
1293
1294
1295
1296
1297
1298
1299static void ice_pkt_insert_ipv6_addr(u8 *pkt, int offset, __be32 *addr)
1300{
1301 int idx;
1302
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);
1306}
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316static void ice_pkt_insert_u6_qfi(u8 *pkt, int offset, u8 data)
1317{
1318 u8 ret;
1319
1320 ret = (data & 0x3F) + (*(pkt + offset) & 0xC0);
1321 ice_memcpy(pkt + offset, &ret, sizeof(ret), ICE_NONDMA_TO_NONDMA);
1322}
1323
1324
1325
1326
1327
1328
1329
1330static void ice_pkt_insert_u8(u8 *pkt, int offset, u8 data)
1331{
1332 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1333}
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346static void ice_pkt_insert_u8_tc(u8 *pkt, int offset, u8 data)
1347{
1348 u8 high, low;
1349
1350 high = (data >> 4) + (*(pkt + offset) & 0xF0);
1351 ice_memcpy(pkt + offset, &high, sizeof(high), ICE_NONDMA_TO_NONDMA);
1352
1353 low = (*(pkt + offset + 1) & 0x0F) + ((data & 0x0F) << 4);
1354 ice_memcpy(pkt + offset + 1, &low, sizeof(low), ICE_NONDMA_TO_NONDMA);
1355}
1356
1357
1358
1359
1360
1361
1362
1363static void ice_pkt_insert_u16(u8 *pkt, int offset, __be16 data)
1364{
1365 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1366}
1367
1368
1369
1370
1371
1372
1373
1374static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
1375{
1376 ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
1377}
1378
1379
1380
1381
1382
1383
1384static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
1385{
1386 ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
1387}
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397static enum ice_status
1398ice_fdir_get_open_tunnel_port(struct ice_hw *hw, enum ice_fltr_ptype flow,
1399 u16 *port)
1400{
1401 switch (flow) {
1402 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1403
1404 if (!ice_get_open_tunnel_port(hw, TNL_ECPRI, port))
1405 return ICE_ERR_DOES_NOT_EXIST;
1406 break;
1407 default:
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;
1411 }
1412
1413 return ICE_SUCCESS;
1414}
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424enum ice_status
1425ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
1426 u8 *pkt, bool frag, bool tun)
1427{
1428 enum ice_fltr_ptype flow;
1429 u16 tnl_port;
1430 u8 *loc;
1431 u16 idx;
1432
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;
1437 break;
1438 case ICE_IP_PROTO_UDP:
1439 flow = ICE_FLTR_PTYPE_NONF_IPV4_UDP;
1440 break;
1441 case ICE_IP_PROTO_SCTP:
1442 flow = ICE_FLTR_PTYPE_NONF_IPV4_SCTP;
1443 break;
1444 default:
1445 flow = ICE_FLTR_PTYPE_NONF_IPV4_OTHER;
1446 break;
1447 }
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;
1452 break;
1453 case ICE_IP_PROTO_UDP:
1454 flow = ICE_FLTR_PTYPE_NONF_IPV6_UDP;
1455 break;
1456 case ICE_IP_PROTO_SCTP:
1457 flow = ICE_FLTR_PTYPE_NONF_IPV6_SCTP;
1458 break;
1459 default:
1460 flow = ICE_FLTR_PTYPE_NONF_IPV6_OTHER;
1461 break;
1462 }
1463 } else {
1464 flow = input->flow_type;
1465 }
1466
1467 for (idx = 0; idx < ICE_FDIR_NUM_PKT; idx++)
1468 if (ice_fdir_pkt[idx].flow == flow)
1469 break;
1470 if (idx == ICE_FDIR_NUM_PKT)
1471 return ICE_ERR_PARAM;
1472 if (!tun) {
1473 ice_memcpy(pkt, ice_fdir_pkt[idx].pkt,
1474 ice_fdir_pkt[idx].pkt_len, ICE_NONDMA_TO_NONDMA);
1475 loc = pkt;
1476 } else {
1477 if (!ice_fdir_pkt[idx].tun_pkt)
1478 return ICE_ERR_PARAM;
1479
1480 switch (flow) {
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];
1491 break;
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];
1505 break;
1506 default:
1507 if (ice_fdir_get_open_tunnel_port(hw, flow, &tnl_port))
1508 return ICE_ERR_DOES_NOT_EXIST;
1509
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,
1514 HTONS(tnl_port));
1515 loc = &pkt[ICE_FDIR_TUN_PKT_OFF];
1516 break;
1517 }
1518 }
1519
1520
1521
1522
1523 switch (flow) {
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);
1536 if (frag)
1537 loc[20] = ICE_FDIR_IPV4_PKT_FLAG_MF;
1538 break;
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);
1560 break;
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);
1573 break;
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);
1584 break;
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);
1607 break;
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);
1615 break;
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);
1628 break;
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);
1640 break;
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);
1655 break;
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);
1670 break;
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);
1680 break;
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);
1692 break;
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);
1704 break;
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);
1713 break;
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);
1726 break;
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);
1730 break;
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);
1734 break;
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);
1738 break;
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);
1742 break;
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);
1746 break;
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);
1750 break;
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);
1758 break;
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);
1766 break;
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);
1771 break;
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);
1776 break;
1777 case ICE_FLTR_PTYPE_NON_IP_L2:
1778 ice_pkt_insert_u16(loc, ICE_MAC_ETHTYPE_OFFSET,
1779 input->ext_data.ether_type);
1780 break;
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);
1784 break;
1785 case ICE_FLTR_PTYPE_NONF_IPV4_UDP_ECPRI_TP0:
1786
1787 ice_pkt_insert_u16(pkt, ICE_IPV4_UDP_ECPRI_TP0_PC_ID_OFFSET,
1788 input->ecpri_data.pc_id);
1789 break;
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);
1802 break;
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);
1815 break;
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);
1828 break;
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);
1839 break;
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);
1852 break;
1853 case ICE_FLTR_PTYPE_FRAG_IPV6:
1854 ice_pkt_insert_u32(loc, ICE_IPV6_ID_OFFSET,
1855 input->ip.v6.packet_id);
1856 break;
1857 default:
1858 return ICE_ERR_PARAM;
1859 }
1860
1861 if (input->flex_fltr)
1862 ice_pkt_insert_u16(loc, input->flex_offset, input->flex_word);
1863
1864 return ICE_SUCCESS;
1865}
1866
1867
1868
1869
1870
1871
1872
1873enum ice_status
1874ice_fdir_get_prgm_pkt(struct ice_fdir_fltr *input, u8 *pkt, bool frag)
1875{
1876 return ice_fdir_get_gen_prgm_pkt(NULL, input, pkt, frag, false);
1877}
1878
1879
1880
1881
1882
1883
1884
1885bool ice_fdir_has_frag(enum ice_fltr_ptype flow)
1886{
1887 if (flow == ICE_FLTR_PTYPE_FRAG_IPV4 ||
1888 flow == ICE_FLTR_PTYPE_FRAG_IPV6)
1889 return true;
1890 else
1891 return false;
1892}
1893
1894
1895
1896
1897
1898
1899
1900
1901struct ice_fdir_fltr *
1902ice_fdir_find_fltr_by_idx(struct ice_hw *hw, u32 fltr_idx)
1903{
1904 struct ice_fdir_fltr *rule;
1905
1906 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1907 fltr_node) {
1908
1909 if (fltr_idx == rule->fltr_id)
1910 return rule;
1911 if (fltr_idx < rule->fltr_id)
1912 break;
1913 }
1914 return NULL;
1915}
1916
1917
1918
1919
1920
1921
1922void ice_fdir_list_add_fltr(struct ice_hw *hw, struct ice_fdir_fltr *fltr)
1923{
1924 struct ice_fdir_fltr *rule, *parent = NULL;
1925
1926 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
1927 fltr_node) {
1928
1929 if (rule->fltr_id >= fltr->fltr_id)
1930 break;
1931 parent = rule;
1932 }
1933
1934 if (parent)
1935 LIST_ADD_AFTER(&fltr->fltr_node, &parent->fltr_node);
1936 else
1937 LIST_ADD(&fltr->fltr_node, &hw->fdir_list_head);
1938}
1939
1940
1941
1942
1943
1944
1945
1946
1947void
1948ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,
1949 bool acl_fltr, bool add)
1950{
1951 int incr;
1952
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);
1957 } else {
1958 if (acl_fltr)
1959 hw->acl_fltr_cnt[flow] += incr;
1960 else
1961 hw->fdir_fltr_cnt[flow] += incr;
1962 }
1963}
1964
1965
1966
1967
1968
1969
1970
1971
1972static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)
1973{
1974 return memcmp(a, b, 4 * sizeof(__be32));
1975}
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985static bool
1986ice_fdir_comp_rules(struct ice_fdir_fltr *a, struct ice_fdir_fltr *b, bool v6)
1987{
1988 enum ice_fltr_ptype flow_type = a->flow_type;
1989
1990
1991
1992
1993 if (!v6) {
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)
2001 return true;
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)
2009 return true;
2010 }
2011 } else {
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,
2018 b->ip.v6.dst_ip) &&
2019 !ice_cmp_ipv6_addr(a->ip.v6.src_ip,
2020 b->ip.v6.src_ip))
2021 return true;
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)
2025 return true;
2026 }
2027 }
2028
2029 return false;
2030}
2031
2032
2033
2034
2035
2036
2037
2038
2039bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)
2040{
2041 struct ice_fdir_fltr *rule;
2042 bool ret = false;
2043
2044 LIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,
2045 fltr_node) {
2046 enum ice_fltr_ptype flow_type;
2047
2048 if (rule->flow_type != input->flow_type)
2049 continue;
2050
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);
2057 else
2058 ret = ice_fdir_comp_rules(rule, input, true);
2059 if (ret) {
2060 if (rule->fltr_id == input->fltr_id &&
2061 rule->q_index != input->q_index)
2062 ret = false;
2063 else
2064 break;
2065 }
2066 }
2067
2068 return ret;
2069}
2070
2071
2072
2073
2074
2075
2076
2077enum ice_status ice_clear_pf_fd_table(struct ice_hw *hw)
2078{
2079 struct ice_aqc_clear_fd_table *cmd;
2080 struct ice_aq_desc desc;
2081
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
2086 cmd->vsi_index = CPU_TO_LE16(0);
2087
2088 return ice_aq_send_cmd(hw, &desc, NULL, 0, NULL);
2089}
2090