net/iavf: support RSS for IPv4 IPv6 mix of GTP
[dpdk.git] / drivers / net / iavf / iavf_hash.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Intel Corporation
3  */
4
5 #include <sys/queue.h>
6 #include <stdio.h>
7 #include <errno.h>
8 #include <stdint.h>
9 #include <string.h>
10 #include <unistd.h>
11 #include <stdarg.h>
12
13 #include <rte_debug.h>
14 #include <rte_ether.h>
15 #include <rte_ethdev_driver.h>
16 #include <rte_log.h>
17 #include <rte_malloc.h>
18 #include <rte_eth_ctrl.h>
19 #include <rte_tailq.h>
20 #include <rte_flow_driver.h>
21
22 #include "iavf_log.h"
23 #include "iavf.h"
24 #include "iavf_generic_flow.h"
25
26 enum iavf_pattern_hint_type {
27         IAVF_PHINT_NONE                         = 0x00000000,
28         IAVF_PHINT_IPV4                         = 0x00000001,
29         IAVF_PHINT_IPV4_UDP                     = 0x00000002,
30         IAVF_PHINT_IPV4_TCP                     = 0x00000004,
31         IAVF_PHINT_IPV4_SCTP                    = 0x00000008,
32         IAVF_PHINT_IPV6                         = 0x00000010,
33         IAVF_PHINT_IPV6_UDP                     = 0x00000020,
34         IAVF_PHINT_IPV6_TCP                     = 0x00000040,
35         IAVF_PHINT_IPV6_SCTP                    = 0x00000080,
36         IAVF_PHINT_IPV4_GTPU_IP                 = 0x00000100,
37         IAVF_PHINT_IPV4_GTPU_EH                 = 0x00000200,
38         IAVF_PHINT_IPV4_GTPU_EH_DWNLINK         = 0x00000400,
39         IAVF_PHINT_IPV4_GTPU_EH_UPLINK          = 0x00000800,
40         IAVF_PHINT_IPV6_GTPU_IP                 = 0x00001000,
41         IAVF_PHINT_IPV6_GTPU_EH                 = 0x00002000,
42         IAVF_PHINT_IPV6_GTPU_EH_DWNLINK         = 0x00004000,
43         IAVF_PHINT_IPV6_GTPU_EH_UPLINK          = 0x00008000,
44 };
45
46 #define IAVF_GTPU_EH_DWNLINK    0
47 #define IAVF_GTPU_EH_UPLINK     1
48
49 struct iavf_pattern_match_type {
50         uint64_t pattern_hint;
51 };
52
53 struct iavf_hash_match_type {
54         uint64_t hash_type;
55         struct virtchnl_proto_hdrs *proto_hdrs;
56         uint64_t pattern_hint;
57 };
58
59 struct iavf_rss_meta {
60         struct virtchnl_proto_hdrs *proto_hdrs;
61         enum virtchnl_rss_algorithm rss_algorithm;
62 };
63
64 struct iavf_hash_flow_cfg {
65         struct virtchnl_rss_cfg *rss_cfg;
66         bool simple_xor;
67 };
68
69 static int
70 iavf_hash_init(struct iavf_adapter *ad);
71 static int
72 iavf_hash_create(struct iavf_adapter *ad, struct rte_flow *flow, void *meta,
73                  struct rte_flow_error *error);
74 static int
75 iavf_hash_destroy(struct iavf_adapter *ad, struct rte_flow *flow,
76                   struct rte_flow_error *error);
77 static void
78 iavf_hash_uninit(struct iavf_adapter *ad);
79 static void
80 iavf_hash_free(struct rte_flow *flow);
81 static int
82 iavf_hash_parse_pattern_action(struct iavf_adapter *ad,
83                                struct iavf_pattern_match_item *array,
84                                uint32_t array_len,
85                                const struct rte_flow_item pattern[],
86                                const struct rte_flow_action actions[],
87                                void **meta,
88                                struct rte_flow_error *error);
89
90 static struct iavf_pattern_match_type phint_empty = {
91         IAVF_PHINT_NONE};
92 static struct iavf_pattern_match_type phint_eth_ipv4 = {
93         IAVF_PHINT_IPV4};
94 static struct iavf_pattern_match_type phint_eth_ipv4_udp = {
95         IAVF_PHINT_IPV4_UDP};
96 static struct iavf_pattern_match_type phint_eth_ipv4_tcp = {
97         IAVF_PHINT_IPV4_TCP};
98 static struct iavf_pattern_match_type phint_eth_ipv4_sctp = {
99         IAVF_PHINT_IPV4_SCTP};
100 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv4 = {
101         IAVF_PHINT_IPV4};
102 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv4_udp = {
103         IAVF_PHINT_IPV4_UDP};
104 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv4_tcp = {
105         IAVF_PHINT_IPV4_TCP};
106 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv6 = {
107         IAVF_PHINT_IPV6};
108 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv6_udp = {
109         IAVF_PHINT_IPV6_UDP};
110 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_ipv6_tcp = {
111         IAVF_PHINT_IPV6_TCP};
112 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_ipv4 = {
113         IAVF_PHINT_IPV4};
114 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_ipv4_udp = {
115         IAVF_PHINT_IPV4_UDP};
116 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_ipv4_tcp = {
117         IAVF_PHINT_IPV4_TCP};
118 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_ipv6 = {
119         IAVF_PHINT_IPV6};
120 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_ipv6_udp = {
121         IAVF_PHINT_IPV6_UDP};
122 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_ipv6_tcp = {
123         IAVF_PHINT_IPV6_TCP};
124 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4 = {
125         IAVF_PHINT_IPV4};
126 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4_udp = {
127         IAVF_PHINT_IPV4_UDP};
128 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv4_tcp = {
129         IAVF_PHINT_IPV4_TCP};
130 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv6 = {
131         IAVF_PHINT_IPV6};
132 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv6_udp = {
133         IAVF_PHINT_IPV6_UDP};
134 static struct iavf_pattern_match_type phint_eth_ipv4_gtpu_eh_ipv6_tcp = {
135         IAVF_PHINT_IPV6_TCP};
136 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_eh_ipv4 = {
137         IAVF_PHINT_IPV4};
138 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_eh_ipv4_udp = {
139         IAVF_PHINT_IPV4_UDP};
140 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_eh_ipv4_tcp = {
141         IAVF_PHINT_IPV4_TCP};
142 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_eh_ipv6 = {
143         IAVF_PHINT_IPV6};
144 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_eh_ipv6_udp = {
145         IAVF_PHINT_IPV6_UDP};
146 static struct iavf_pattern_match_type phint_eth_ipv6_gtpu_eh_ipv6_tcp = {
147         IAVF_PHINT_IPV6_TCP};
148 static struct iavf_pattern_match_type phint_eth_ipv4_esp = {
149         IAVF_PHINT_IPV4};
150 static struct iavf_pattern_match_type phint_eth_ipv4_udp_esp = {
151         IAVF_PHINT_IPV4_UDP};
152 static struct iavf_pattern_match_type phint_eth_ipv4_ah = {
153         IAVF_PHINT_IPV4};
154 static struct iavf_pattern_match_type phint_eth_ipv4_l2tpv3 = {
155         IAVF_PHINT_IPV4};
156 static struct iavf_pattern_match_type phint_eth_ipv4_pfcp = {
157         IAVF_PHINT_IPV4_UDP};
158 static struct iavf_pattern_match_type phint_eth_vlan_ipv4 = {
159         IAVF_PHINT_IPV4};
160 static struct iavf_pattern_match_type phint_eth_vlan_ipv4_udp = {
161         IAVF_PHINT_IPV4_UDP};
162 static struct iavf_pattern_match_type phint_eth_vlan_ipv4_tcp = {
163         IAVF_PHINT_IPV4_TCP};
164 static struct iavf_pattern_match_type phint_eth_vlan_ipv4_sctp = {
165         IAVF_PHINT_IPV4_SCTP};
166 static struct iavf_pattern_match_type phint_eth_ipv6 = {
167         IAVF_PHINT_IPV6};
168 static struct iavf_pattern_match_type phint_eth_ipv6_udp = {
169         IAVF_PHINT_IPV6_UDP};
170 static struct iavf_pattern_match_type phint_eth_ipv6_tcp = {
171         IAVF_PHINT_IPV6_TCP};
172 static struct iavf_pattern_match_type phint_eth_ipv6_sctp = {
173         IAVF_PHINT_IPV6_SCTP};
174 static struct iavf_pattern_match_type phint_eth_ipv6_esp = {
175         IAVF_PHINT_IPV6};
176 static struct iavf_pattern_match_type phint_eth_ipv6_udp_esp = {
177         IAVF_PHINT_IPV6_UDP};
178 static struct iavf_pattern_match_type phint_eth_ipv6_ah = {
179         IAVF_PHINT_IPV6};
180 static struct iavf_pattern_match_type phint_eth_ipv6_l2tpv3 = {
181         IAVF_PHINT_IPV6};
182 static struct iavf_pattern_match_type phint_eth_ipv6_pfcp = {
183         IAVF_PHINT_IPV6_UDP};
184 static struct iavf_pattern_match_type phint_eth_vlan_ipv6 = {
185         IAVF_PHINT_IPV6};
186 static struct iavf_pattern_match_type phint_eth_vlan_ipv6_udp = {
187         IAVF_PHINT_IPV6_UDP};
188 static struct iavf_pattern_match_type phint_eth_vlan_ipv6_tcp = {
189         IAVF_PHINT_IPV6_TCP};
190 static struct iavf_pattern_match_type phint_eth_vlan_ipv6_sctp = {
191         IAVF_PHINT_IPV6_SCTP};
192
193 /**
194  * Supported pattern for hash.
195  * The first member is pattern item type,
196  * the second member is input set mask,
197  * the third member is pattern hint for hash.
198  */
199 static struct iavf_pattern_match_item iavf_hash_pattern_list[] = {
200         {iavf_pattern_eth_ipv4, IAVF_INSET_NONE, &phint_eth_ipv4},
201         {iavf_pattern_eth_ipv4_udp, IAVF_INSET_NONE, &phint_eth_ipv4_udp},
202         {iavf_pattern_eth_ipv4_tcp, IAVF_INSET_NONE, &phint_eth_ipv4_tcp},
203         {iavf_pattern_eth_ipv4_sctp, IAVF_INSET_NONE, &phint_eth_ipv4_sctp},
204         {iavf_pattern_eth_ipv4_gtpu_ipv4, IAVF_INSET_NONE,
205                                         &phint_eth_ipv4_gtpu_ipv4},
206         {iavf_pattern_eth_ipv4_gtpu_ipv4_udp, IAVF_INSET_NONE,
207                                         &phint_eth_ipv4_gtpu_ipv4_udp},
208         {iavf_pattern_eth_ipv4_gtpu_ipv4_tcp, IAVF_INSET_NONE,
209                                         &phint_eth_ipv4_gtpu_ipv4_tcp},
210         {iavf_pattern_eth_ipv4_gtpu_ipv6, IAVF_INSET_NONE,
211                                         &phint_eth_ipv4_gtpu_ipv6},
212         {iavf_pattern_eth_ipv4_gtpu_ipv6_udp, IAVF_INSET_NONE,
213                                         &phint_eth_ipv4_gtpu_ipv6_udp},
214         {iavf_pattern_eth_ipv4_gtpu_ipv6_tcp, IAVF_INSET_NONE,
215                                         &phint_eth_ipv4_gtpu_ipv6_tcp},
216         {iavf_pattern_eth_ipv6_gtpu_ipv4, IAVF_INSET_NONE,
217                                         &phint_eth_ipv6_gtpu_ipv4},
218         {iavf_pattern_eth_ipv6_gtpu_ipv4_udp, IAVF_INSET_NONE,
219                                         &phint_eth_ipv6_gtpu_ipv4_udp},
220         {iavf_pattern_eth_ipv6_gtpu_ipv4_tcp, IAVF_INSET_NONE,
221                                         &phint_eth_ipv6_gtpu_ipv4_tcp},
222         {iavf_pattern_eth_ipv6_gtpu_ipv6, IAVF_INSET_NONE,
223                                         &phint_eth_ipv6_gtpu_ipv6},
224         {iavf_pattern_eth_ipv6_gtpu_ipv6_udp, IAVF_INSET_NONE,
225                                         &phint_eth_ipv6_gtpu_ipv6_udp},
226         {iavf_pattern_eth_ipv6_gtpu_ipv6_tcp, IAVF_INSET_NONE,
227                                         &phint_eth_ipv6_gtpu_ipv6_tcp},
228         {iavf_pattern_eth_ipv4_gtpu_eh_ipv4, IAVF_INSET_NONE,
229                                         &phint_eth_ipv4_gtpu_eh_ipv4},
230         {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_udp, IAVF_INSET_NONE,
231                                         &phint_eth_ipv4_gtpu_eh_ipv4_udp},
232         {iavf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp, IAVF_INSET_NONE,
233                                         &phint_eth_ipv4_gtpu_eh_ipv4_tcp},
234         {iavf_pattern_eth_ipv4_gtpu_eh_ipv6, IAVF_INSET_NONE,
235                                         &phint_eth_ipv4_gtpu_eh_ipv6},
236         {iavf_pattern_eth_ipv4_gtpu_eh_ipv6_udp, IAVF_INSET_NONE,
237                                         &phint_eth_ipv4_gtpu_eh_ipv6_udp},
238         {iavf_pattern_eth_ipv4_gtpu_eh_ipv6_tcp, IAVF_INSET_NONE,
239                                         &phint_eth_ipv4_gtpu_eh_ipv6_tcp},
240         {iavf_pattern_eth_ipv6_gtpu_eh_ipv4, IAVF_INSET_NONE,
241                                         &phint_eth_ipv6_gtpu_eh_ipv4},
242         {iavf_pattern_eth_ipv6_gtpu_eh_ipv4_udp, IAVF_INSET_NONE,
243                                         &phint_eth_ipv6_gtpu_eh_ipv4_udp},
244         {iavf_pattern_eth_ipv6_gtpu_eh_ipv4_tcp, IAVF_INSET_NONE,
245                                         &phint_eth_ipv6_gtpu_eh_ipv4_tcp},
246         {iavf_pattern_eth_ipv6_gtpu_eh_ipv6, IAVF_INSET_NONE,
247                                         &phint_eth_ipv6_gtpu_eh_ipv6},
248         {iavf_pattern_eth_ipv6_gtpu_eh_ipv6_udp, IAVF_INSET_NONE,
249                                         &phint_eth_ipv6_gtpu_eh_ipv6_udp},
250         {iavf_pattern_eth_ipv6_gtpu_eh_ipv6_tcp, IAVF_INSET_NONE,
251                                         &phint_eth_ipv6_gtpu_eh_ipv6_tcp},
252         {iavf_pattern_eth_ipv4_esp, IAVF_INSET_NONE, &phint_eth_ipv4_esp},
253         {iavf_pattern_eth_ipv4_udp_esp, IAVF_INSET_NONE,
254                                         &phint_eth_ipv4_udp_esp},
255         {iavf_pattern_eth_ipv4_ah, IAVF_INSET_NONE, &phint_eth_ipv4_ah},
256         {iavf_pattern_eth_ipv4_l2tpv3, IAVF_INSET_NONE,
257                                         &phint_eth_ipv4_l2tpv3},
258         {iavf_pattern_eth_ipv4_pfcp, IAVF_INSET_NONE, &phint_eth_ipv4_pfcp},
259         {iavf_pattern_eth_vlan_ipv4, IAVF_INSET_NONE, &phint_eth_vlan_ipv4},
260         {iavf_pattern_eth_vlan_ipv4_udp, IAVF_INSET_NONE,
261                                         &phint_eth_vlan_ipv4_udp},
262         {iavf_pattern_eth_vlan_ipv4_tcp, IAVF_INSET_NONE,
263                                         &phint_eth_vlan_ipv4_tcp},
264         {iavf_pattern_eth_vlan_ipv4_sctp, IAVF_INSET_NONE,
265                                         &phint_eth_vlan_ipv4_sctp},
266         {iavf_pattern_eth_ipv6, IAVF_INSET_NONE, &phint_eth_ipv6},
267         {iavf_pattern_eth_ipv6_udp, IAVF_INSET_NONE, &phint_eth_ipv6_udp},
268         {iavf_pattern_eth_ipv6_tcp, IAVF_INSET_NONE, &phint_eth_ipv6_tcp},
269         {iavf_pattern_eth_ipv6_sctp, IAVF_INSET_NONE, &phint_eth_ipv6_sctp},
270         {iavf_pattern_eth_ipv6_esp, IAVF_INSET_NONE, &phint_eth_ipv6_esp},
271         {iavf_pattern_eth_ipv6_udp_esp, IAVF_INSET_NONE,
272                                         &phint_eth_ipv6_udp_esp},
273         {iavf_pattern_eth_ipv6_ah, IAVF_INSET_NONE, &phint_eth_ipv6_ah},
274         {iavf_pattern_eth_ipv6_l2tpv3, IAVF_INSET_NONE,
275                                         &phint_eth_ipv6_l2tpv3},
276         {iavf_pattern_eth_ipv6_pfcp, IAVF_INSET_NONE, &phint_eth_ipv6_pfcp},
277         {iavf_pattern_eth_vlan_ipv6, IAVF_INSET_NONE, &phint_eth_vlan_ipv6},
278         {iavf_pattern_eth_vlan_ipv6_udp, IAVF_INSET_NONE,
279                                         &phint_eth_vlan_ipv6_udp},
280         {iavf_pattern_eth_vlan_ipv6_tcp, IAVF_INSET_NONE,
281                                         &phint_eth_vlan_ipv6_tcp},
282         {iavf_pattern_eth_vlan_ipv6_sctp, IAVF_INSET_NONE,
283                                         &phint_eth_vlan_ipv6_sctp},
284         {iavf_pattern_empty, IAVF_INSET_NONE, &phint_empty},
285 };
286
287 #define TUNNEL_LEVEL_OUTER              0
288 #define TUNNEL_LEVEL_FIRST_INNER        1
289
290 #define PROTO_COUNT_ONE                 1
291 #define PROTO_COUNT_TWO                 2
292 #define PROTO_COUNT_THREE               3
293
294 #define BUFF_NOUSED                     0
295 #define FIELD_FOR_PROTO_ONLY            0
296
297 #define FIELD_SELECTOR(proto_hdr_field) \
298                 (1UL << ((proto_hdr_field) & PROTO_HDR_FIELD_MASK))
299
300 #define proto_hint_eth_src { \
301         VIRTCHNL_PROTO_HDR_ETH, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_SRC), \
302         {BUFF_NOUSED } }
303
304 #define proto_hint_eth_dst { \
305         VIRTCHNL_PROTO_HDR_ETH, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_DST), \
306         {BUFF_NOUSED } }
307
308 #define proto_hint_eth_only { \
309         VIRTCHNL_PROTO_HDR_ETH, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
310
311 #define proto_hint_eth { \
312         VIRTCHNL_PROTO_HDR_ETH, \
313         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_SRC) | \
314         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_DST), {BUFF_NOUSED } }
315
316 #define proto_hint_svlan { \
317         VIRTCHNL_PROTO_HDR_S_VLAN, \
318         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_S_VLAN_ID), {BUFF_NOUSED } }
319
320 #define proto_hint_cvlan { \
321         VIRTCHNL_PROTO_HDR_C_VLAN, \
322         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_C_VLAN_ID), {BUFF_NOUSED } }
323
324 #define proto_hint_ipv4_src { \
325         VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC), \
326         {BUFF_NOUSED } }
327
328 #define proto_hint_ipv4_dst { \
329         VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST), \
330         {BUFF_NOUSED } }
331
332 #define proto_hint_ipv4_only { \
333         VIRTCHNL_PROTO_HDR_IPV4, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
334
335 #define proto_hint_ipv4 { \
336         VIRTCHNL_PROTO_HDR_IPV4, \
337         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \
338         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST), {BUFF_NOUSED } }
339
340 #define proto_hint_ipv4_src_prot { \
341         VIRTCHNL_PROTO_HDR_IPV4, \
342         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \
343         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), \
344         {BUFF_NOUSED } }
345
346 #define proto_hint_ipv4_dst_prot { \
347         VIRTCHNL_PROTO_HDR_IPV4, \
348         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) | \
349         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), \
350         {BUFF_NOUSED } }
351
352 #define proto_hint_ipv4_only_prot { \
353         VIRTCHNL_PROTO_HDR_IPV4, \
354         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), {BUFF_NOUSED } }
355
356 #define proto_hint_ipv4_prot { \
357         VIRTCHNL_PROTO_HDR_IPV4, \
358         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \
359         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) | \
360         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT), {BUFF_NOUSED } }
361
362 #define proto_hint_udp_src_port { \
363         VIRTCHNL_PROTO_HDR_UDP, \
364         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT), {BUFF_NOUSED } }
365
366 #define proto_hint_udp_dst_port { \
367         VIRTCHNL_PROTO_HDR_UDP, \
368         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT), {BUFF_NOUSED } }
369
370 #define proto_hint_udp_only { \
371         VIRTCHNL_PROTO_HDR_UDP, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
372
373 #define proto_hint_udp { \
374         VIRTCHNL_PROTO_HDR_UDP, \
375         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) | \
376         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT), {BUFF_NOUSED } }
377
378 #define proto_hint_tcp_src_port { \
379         VIRTCHNL_PROTO_HDR_TCP, \
380         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT), {BUFF_NOUSED } }
381
382 #define proto_hint_tcp_dst_port { \
383         VIRTCHNL_PROTO_HDR_TCP, \
384         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT), {BUFF_NOUSED } }
385
386 #define proto_hint_tcp_only { \
387         VIRTCHNL_PROTO_HDR_TCP, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
388
389 #define proto_hint_tcp { \
390         VIRTCHNL_PROTO_HDR_TCP, \
391         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) | \
392         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT), {BUFF_NOUSED } }
393
394 #define proto_hint_sctp_src_port { \
395         VIRTCHNL_PROTO_HDR_SCTP, \
396         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT), {BUFF_NOUSED } }
397
398 #define proto_hint_sctp_dst_port { \
399         VIRTCHNL_PROTO_HDR_SCTP, \
400         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT), {BUFF_NOUSED } }
401
402 #define proto_hint_sctp_only { \
403         VIRTCHNL_PROTO_HDR_SCTP, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
404
405 #define proto_hint_sctp { \
406         VIRTCHNL_PROTO_HDR_SCTP, \
407         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) | \
408         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT), {BUFF_NOUSED } }
409
410 #define proto_hint_ipv6_src { \
411         VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC), \
412         {BUFF_NOUSED } }
413
414 #define proto_hint_ipv6_dst { \
415         VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST), \
416         {BUFF_NOUSED } }
417
418 #define proto_hint_ipv6_only { \
419         VIRTCHNL_PROTO_HDR_IPV6, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
420
421 #define proto_hint_ipv6 { \
422         VIRTCHNL_PROTO_HDR_IPV6, \
423         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \
424         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST), {BUFF_NOUSED } }
425
426 #define proto_hint_ipv6_src_prot { \
427         VIRTCHNL_PROTO_HDR_IPV6, \
428         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \
429         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), \
430         {BUFF_NOUSED } }
431
432 #define proto_hint_ipv6_dst_prot { \
433         VIRTCHNL_PROTO_HDR_IPV6, \
434         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST) | \
435         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), \
436         {BUFF_NOUSED } }
437
438 #define proto_hint_ipv6_only_prot { \
439         VIRTCHNL_PROTO_HDR_IPV6, \
440         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
441
442 #define proto_hint_ipv6_prot { \
443         VIRTCHNL_PROTO_HDR_IPV6, \
444         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \
445         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST) | \
446         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
447
448 #define proto_hint_gtpu_ip_teid { \
449         VIRTCHNL_PROTO_HDR_GTPU_IP, \
450         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPU_IP_TEID), {BUFF_NOUSED } }
451
452 #define proto_hint_gtpu_eh_only { \
453         VIRTCHNL_PROTO_HDR_GTPU_EH, \
454         FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
455
456 #define proto_hint_gtpu_ip_only { \
457         VIRTCHNL_PROTO_HDR_GTPU_IP, \
458         FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
459
460 #define proto_hint_gtpu_up_only { \
461         VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP, \
462         FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
463
464 #define proto_hint_gtpu_dwn_only { \
465         VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_DWN, \
466         FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }
467
468 #define proto_hint_esp { \
469         VIRTCHNL_PROTO_HDR_ESP, \
470         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ESP_SPI), {BUFF_NOUSED } }
471
472 #define proto_hint_ah { \
473         VIRTCHNL_PROTO_HDR_AH, \
474         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_AH_SPI), {BUFF_NOUSED } }
475
476 #define proto_hint_l2tpv3 { \
477         VIRTCHNL_PROTO_HDR_L2TPV3, \
478         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV3_SESS_ID), {BUFF_NOUSED } }
479
480 #define proto_hint_pfcp { \
481         VIRTCHNL_PROTO_HDR_PFCP, \
482         FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PFCP_SEID), {BUFF_NOUSED } }
483
484 /* IPV4 */
485
486 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv4 = {
487         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth_src,
488         proto_hint_ipv4_only }
489 };
490
491 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv4_udp = {
492         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
493         proto_hint_ipv4_only, proto_hint_udp_only }
494 };
495
496 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv4_tcp = {
497         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
498         proto_hint_ipv4_only, proto_hint_tcp_only }
499 };
500
501 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv4_sctp = {
502         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
503         proto_hint_ipv4_only, proto_hint_sctp_only }
504 };
505
506 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv4 = {
507         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth_dst,
508         proto_hint_ipv4_only }
509 };
510
511 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv4_udp = {
512         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
513         proto_hint_ipv4_only, proto_hint_udp_only }
514 };
515
516 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv4_tcp = {
517         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
518         proto_hint_ipv4_only, proto_hint_tcp_only }
519 };
520
521 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv4_sctp = {
522         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
523         proto_hint_ipv4_only, proto_hint_sctp_only }
524 };
525
526 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv4 = {
527         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth,
528         proto_hint_ipv4_only }
529 };
530
531 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv4_udp = {
532         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
533         proto_hint_ipv4_only, proto_hint_udp_only }
534 };
535
536 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv4_tcp = {
537         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
538         proto_hint_ipv4_only, proto_hint_tcp_only }
539 };
540
541 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv4_sctp = {
542         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
543         proto_hint_ipv4_only, proto_hint_sctp_only }
544 };
545
546 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv4 = {
547         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_svlan,
548         proto_hint_ipv4_only}
549 };
550
551 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv4_udp = {
552         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
553         proto_hint_ipv4_only, proto_hint_udp_only}
554 };
555
556 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv4_tcp = {
557         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
558         proto_hint_ipv4_only, proto_hint_tcp_only}
559 };
560
561 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv4_sctp = {
562         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
563         proto_hint_ipv4_only, proto_hint_sctp_only}
564 };
565
566 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv4 = {
567         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_cvlan,
568         proto_hint_ipv4_only}
569 };
570
571 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv4_udp = {
572         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
573         proto_hint_ipv4_only, proto_hint_udp_only}
574 };
575
576 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv4_tcp = {
577         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
578         proto_hint_ipv4_only, proto_hint_tcp_only}
579 };
580
581 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv4_sctp = {
582         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
583         proto_hint_ipv4_only, proto_hint_sctp_only}
584 };
585
586 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src = {
587         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4_src }
588 };
589
590 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst = {
591         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4_dst }
592 };
593
594 struct virtchnl_proto_hdrs hdrs_hint_ipv4 = {
595         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv4 }
596 };
597
598 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_port = {
599         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
600         proto_hint_udp_src_port }
601 };
602
603 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_port = {
604         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
605         proto_hint_udp_dst_port }
606 };
607
608 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_port = {
609         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
610         proto_hint_udp_src_port }
611 };
612
613 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_port = {
614         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
615         proto_hint_udp_dst_port }
616 };
617
618 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_port = {
619         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
620         proto_hint_udp_src_port }
621 };
622
623 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_port = {
624         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
625         proto_hint_udp_dst_port }
626 };
627
628 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp = {
629         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
630         proto_hint_udp }
631 };
632
633 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_port = {
634         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
635         proto_hint_tcp_src_port }
636 };
637
638 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_port = {
639         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
640         proto_hint_tcp_dst_port }
641 };
642
643 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_port = {
644         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
645         proto_hint_tcp_src_port }
646 };
647
648 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_port = {
649         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
650         proto_hint_tcp_dst_port }
651 };
652
653 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_port = {
654         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
655         proto_hint_tcp_src_port }
656 };
657
658 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_port = {
659         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
660         proto_hint_tcp_dst_port }
661 };
662
663 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp = {
664         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
665         proto_hint_tcp }
666 };
667
668 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_sctp_src_port = {
669         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src,
670         proto_hint_sctp_src_port }
671 };
672
673 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_sctp_dst_port = {
674         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src,
675         proto_hint_sctp_dst_port }
676 };
677
678 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_sctp_src_port = {
679         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst,
680         proto_hint_sctp_src_port }
681 };
682
683 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_sctp_dst_port = {
684         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst,
685         proto_hint_sctp_dst_port }
686 };
687
688 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp_src_port = {
689         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
690         proto_hint_sctp_src_port }
691 };
692
693 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp_dst_port = {
694         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
695         proto_hint_sctp_dst_port }
696 };
697
698 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp = {
699         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4,
700         proto_hint_sctp }
701 };
702
703 struct virtchnl_proto_hdrs hdrs_hint_ipv4_esp = {
704         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
705         proto_hint_esp }
706 };
707
708 struct virtchnl_proto_hdrs hdrs_hint_ipv4_ah = {
709         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
710         proto_hint_ah }
711 };
712
713 struct virtchnl_proto_hdrs hdrs_hint_ipv4_l2tpv3 = {
714         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
715         proto_hint_l2tpv3 }
716 };
717
718 struct virtchnl_proto_hdrs hdrs_hint_ipv4_pfcp = {
719         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
720         proto_hint_pfcp }
721 };
722
723 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_esp = {
724         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_ipv4_only,
725         proto_hint_udp_only, proto_hint_esp }
726 };
727
728 /* IPv4 GTPU IP */
729
730 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_ip = {
731         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
732         proto_hint_ipv4_src }
733 };
734
735 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_ip = {
736         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
737         proto_hint_ipv4_dst }
738 };
739
740 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_ip = {
741         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
742         proto_hint_ipv4 }
743 };
744
745 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_ip = {
746         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
747         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
748 };
749
750 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_ip = {
751         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
752         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
753 };
754
755 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_ip = {
756         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
757         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
758 };
759
760 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_ip = {
761         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
762         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
763 };
764
765 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_ip = {
766         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
767         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
768 };
769
770 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_ip = {
771         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
772         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
773 };
774
775 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_ip = {
776         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
777         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
778 };
779
780 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_ip = {
781         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
782         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
783 };
784
785 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_ip = {
786         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
787         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
788 };
789
790 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_ip = {
791         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
792         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
793 };
794
795 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_ip = {
796         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
797         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
798 };
799
800 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip = {
801         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
802         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
803 };
804
805 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_ip = {
806         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
807         proto_hint_ipv4_prot, proto_hint_udp}
808 };
809
810 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_ip = {
811         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
812         proto_hint_ipv4_prot, proto_hint_tcp}
813 };
814
815 struct virtchnl_proto_hdrs hdrs_hint_teid_gtpu_ip = {
816         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_teid}
817 };
818
819 /* IPv6 GTPU IP */
820
821 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_ip = {
822         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
823                 proto_hint_ipv6_src }
824 };
825
826 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_ip = {
827         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
828                 proto_hint_ipv6_dst }
829 };
830
831 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_ip = {
832         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
833                 proto_hint_ipv6 }
834 };
835
836 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_ip = {
837         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
838         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
839 };
840
841 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_ip = {
842         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
843         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
844 };
845
846 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_ip = {
847         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
848         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
849 };
850
851 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_ip = {
852         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
853         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
854 };
855
856 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_ip = {
857         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
858         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
859 };
860
861 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_ip = {
862         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
863         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
864 };
865
866 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_ip = {
867         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
868         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
869 };
870
871 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_ip = {
872         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
873         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
874 };
875
876 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_ip = {
877         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
878         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
879 };
880
881 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_ip = {
882         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
883         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
884 };
885
886 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_ip = {
887         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
888         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
889 };
890
891 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip = {
892         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
893         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
894 };
895
896 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_ip = {
897         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
898         proto_hint_ipv6_prot, proto_hint_udp}
899 };
900
901 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_ip = {
902         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
903         proto_hint_ipv6_prot, proto_hint_tcp}
904 };
905
906 /* IPv4 GTPU EH */
907
908 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_eh = {
909         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
910         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
911 };
912
913 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_eh = {
914         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
915         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
916 };
917
918 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_eh = {
919         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
920         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
921 };
922
923 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_eh = {
924         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
925         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
926 };
927
928 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_eh = {
929         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
930         proto_hint_ipv4_src }
931 };
932
933 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_eh = {
934         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
935         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
936 };
937
938 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_eh = {
939         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
940         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
941 };
942
943 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_eh = {
944         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
945         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
946 };
947
948 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_eh = {
949         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
950         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
951 };
952
953 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_eh = {
954         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
955         proto_hint_ipv4_dst }
956 };
957
958 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_eh = {
959         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
960         proto_hint_ipv4 }
961 };
962
963 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_eh = {
964         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
965         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
966 };
967
968 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_eh = {
969         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
970         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
971 };
972
973 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_eh = {
974         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
975         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
976 };
977
978 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh = {
979         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
980         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
981 };
982
983 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_eh = {
984         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
985         proto_hint_ipv4_prot, proto_hint_udp}
986 };
987
988 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_eh = {
989         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
990         proto_hint_ipv4_prot, proto_hint_tcp}
991 };
992
993 /* IPv6 GTPU EH */
994
995 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_eh = {
996         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
997         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
998 };
999
1000 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_eh = {
1001         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1002         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
1003 };
1004
1005 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_eh = {
1006         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1007         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
1008 };
1009
1010 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_eh = {
1011         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1012         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
1013 };
1014
1015 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_eh = {
1016         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1017         proto_hint_ipv6_src }
1018 };
1019
1020 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_eh = {
1021         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1022         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
1023 };
1024
1025 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_eh = {
1026         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1027         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
1028 };
1029
1030 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_eh = {
1031         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1032         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
1033 };
1034
1035 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_eh = {
1036         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1037         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
1038 };
1039
1040 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_eh = {
1041         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1042         proto_hint_ipv6_dst }
1043 };
1044
1045 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_eh = {
1046         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1047         proto_hint_ipv6 }
1048 };
1049
1050 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_eh = {
1051         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1052         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
1053 };
1054
1055 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_eh = {
1056         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1057         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
1058 };
1059
1060 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_eh = {
1061         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1062         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
1063 };
1064
1065 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh = {
1066         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1067         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
1068 };
1069
1070 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_eh = {
1071         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1072         proto_hint_ipv6_prot, proto_hint_udp}
1073 };
1074
1075 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_eh = {
1076         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1077         proto_hint_ipv6_prot, proto_hint_tcp}
1078 };
1079
1080 /* IPv4 GTPU UP */
1081
1082 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_up = {
1083         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1084         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
1085 };
1086
1087 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_up = {
1088         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1089         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
1090 };
1091
1092 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_up = {
1093         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1094         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
1095 };
1096
1097 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_up = {
1098         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1099         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
1100 };
1101
1102 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_up = {
1103         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1104         proto_hint_ipv4_src }
1105 };
1106
1107 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_up = {
1108         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1109         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
1110 };
1111
1112 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_up = {
1113         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1114         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
1115 };
1116
1117 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_up = {
1118         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1119         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
1120 };
1121
1122 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_up = {
1123         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1124         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
1125 };
1126
1127 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_up = {
1128         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1129         proto_hint_ipv4_dst }
1130 };
1131
1132 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_up = {
1133         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1134         proto_hint_ipv4 }
1135 };
1136
1137 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_up = {
1138         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1139         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
1140 };
1141
1142 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_up = {
1143         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1144         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
1145 };
1146
1147 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_up = {
1148         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1149         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
1150 };
1151
1152 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_up = {
1153         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1154         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
1155 };
1156
1157 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_up = {
1158         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1159         proto_hint_ipv4_prot, proto_hint_udp}
1160 };
1161
1162 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_up = {
1163         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1164         proto_hint_ipv4_prot, proto_hint_tcp}
1165 };
1166
1167 /* IPv6 GTPU UP */
1168
1169 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_up = {
1170         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1171         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
1172 };
1173
1174 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_up = {
1175         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1176         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
1177 };
1178
1179 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_up = {
1180         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1181         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
1182 };
1183
1184 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_up = {
1185         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1186         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
1187 };
1188
1189 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_up = {
1190         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1191         proto_hint_ipv6_src }
1192 };
1193
1194 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_up = {
1195         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1196         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
1197 };
1198
1199 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_up = {
1200         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1201         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
1202 };
1203
1204 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_up = {
1205         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1206         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
1207 };
1208
1209 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_up = {
1210         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1211         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
1212 };
1213
1214 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_up = {
1215         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1216         proto_hint_ipv6_dst }
1217 };
1218
1219 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_up = {
1220         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1221         proto_hint_ipv6 }
1222 };
1223
1224 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_up = {
1225         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1226         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
1227 };
1228
1229 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_up = {
1230         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1231         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
1232 };
1233
1234 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_up = {
1235         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1236         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
1237 };
1238
1239 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_up = {
1240         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1241         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
1242 };
1243
1244 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_up = {
1245         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1246         proto_hint_ipv6_prot, proto_hint_udp}
1247 };
1248
1249 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_up = {
1250         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1251         proto_hint_ipv6_prot, proto_hint_tcp}
1252 };
1253
1254 /* IPv4 GTPU DWN */
1255
1256 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_dwn = {
1257         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1258         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
1259 };
1260
1261 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_dwn = {
1262         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1263         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
1264 };
1265
1266 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_dwn = {
1267         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1268         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
1269 };
1270
1271 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_dwn = {
1272         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1273         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
1274 };
1275
1276 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_dwn = {
1277         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1278         proto_hint_ipv4_src }
1279 };
1280
1281 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_dwn = {
1282         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1283         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
1284 };
1285
1286 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_dwn = {
1287         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1288         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
1289 };
1290
1291 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_dwn = {
1292         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1293         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
1294 };
1295
1296 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn = {
1297         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1298         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
1299 };
1300
1301 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_dwn = {
1302         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1303         proto_hint_ipv4_dst }
1304 };
1305
1306 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_dwn = {
1307         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1308         proto_hint_ipv4 }
1309 };
1310
1311 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_dwn = {
1312         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1313         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
1314 };
1315
1316 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn = {
1317         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1318         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
1319 };
1320
1321 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn = {
1322         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1323         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
1324 };
1325
1326 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn = {
1327         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1328         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
1329 };
1330
1331 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_dwn = {
1332         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1333         proto_hint_ipv4_prot, proto_hint_udp}
1334 };
1335
1336 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_dwn = {
1337         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1338         proto_hint_ipv4_prot, proto_hint_tcp}
1339 };
1340
1341 /* IPv6 GTPU DWN */
1342
1343 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_dwn = {
1344         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1345         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
1346 };
1347
1348 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_dwn = {
1349         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1350         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
1351 };
1352
1353 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_dwn = {
1354         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1355         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
1356 };
1357
1358 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_dwn = {
1359         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1360         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
1361 };
1362
1363 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_dwn = {
1364         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1365         proto_hint_ipv6_src }
1366 };
1367
1368 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_dwn = {
1369         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1370         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
1371 };
1372
1373 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_dwn = {
1374         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1375         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
1376 };
1377
1378 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_dwn = {
1379         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1380         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
1381 };
1382
1383 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn = {
1384         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1385         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
1386 };
1387
1388 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_dwn = {
1389         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1390         proto_hint_ipv6_dst }
1391 };
1392
1393 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_dwn = {
1394         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1395         proto_hint_ipv6 }
1396 };
1397
1398 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_dwn = {
1399         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1400         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
1401 };
1402
1403 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn = {
1404         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1405         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
1406 };
1407
1408 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn = {
1409         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1410         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
1411 };
1412
1413 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn = {
1414         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1415         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
1416 };
1417
1418 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_dwn = {
1419         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1420         proto_hint_ipv6_prot, proto_hint_udp}
1421 };
1422
1423 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_dwn = {
1424         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1425         proto_hint_ipv6_prot, proto_hint_tcp}
1426 };
1427
1428 /* IPV6 */
1429
1430 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6 = {
1431         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth_src,
1432         proto_hint_ipv6_only }
1433 };
1434
1435 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6_udp = {
1436         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
1437         proto_hint_ipv6_only, proto_hint_udp_only }
1438 };
1439
1440 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6_tcp = {
1441         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
1442         proto_hint_ipv6_only, proto_hint_tcp_only }
1443 };
1444
1445 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6_sctp = {
1446         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
1447         proto_hint_ipv6_only, proto_hint_sctp_only }
1448 };
1449
1450 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6 = {
1451         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth_dst,
1452         proto_hint_ipv6_only }
1453 };
1454
1455 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6_udp = {
1456         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
1457         proto_hint_ipv6_only, proto_hint_udp_only }
1458 };
1459
1460 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6_tcp = {
1461         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
1462         proto_hint_ipv6_only, proto_hint_tcp_only }
1463 };
1464
1465 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6_sctp = {
1466         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
1467         proto_hint_ipv6_only, proto_hint_sctp_only }
1468 };
1469
1470 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6 = {
1471         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth,
1472         proto_hint_ipv6_only }
1473 };
1474
1475 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6_udp = {
1476         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
1477         proto_hint_ipv6_only, proto_hint_udp_only }
1478 };
1479
1480 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6_tcp = {
1481         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
1482         proto_hint_ipv6_only, proto_hint_tcp_only }
1483 };
1484
1485 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6_sctp = {
1486         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
1487         proto_hint_ipv6_only, proto_hint_sctp_only }
1488 };
1489
1490 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6 = {
1491         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_svlan,
1492         proto_hint_ipv6_only}
1493 };
1494
1495 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6_udp = {
1496         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
1497         proto_hint_ipv6_only, proto_hint_udp_only}
1498 };
1499
1500 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6_tcp = {
1501         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
1502         proto_hint_ipv6_only, proto_hint_tcp_only}
1503 };
1504
1505 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6_sctp = {
1506         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
1507         proto_hint_ipv6_only, proto_hint_sctp_only}
1508 };
1509
1510 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6 = {
1511         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_cvlan,
1512         proto_hint_ipv6_only}
1513 };
1514
1515 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6_udp = {
1516         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
1517         proto_hint_ipv6_only, proto_hint_udp_only}
1518 };
1519
1520 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6_tcp = {
1521         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
1522         proto_hint_ipv6_only, proto_hint_tcp_only}
1523 };
1524
1525 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6_sctp = {
1526         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
1527         proto_hint_ipv6_only, proto_hint_sctp_only}
1528 };
1529
1530 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src = {
1531         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_src }
1532 };
1533
1534 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst = {
1535         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_dst }
1536 };
1537
1538 struct virtchnl_proto_hdrs hdrs_hint_ipv6 = {
1539         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6 }
1540 };
1541
1542 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_port = {
1543         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1544         proto_hint_udp_src_port }
1545 };
1546
1547 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_port = {
1548         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1549         proto_hint_udp_dst_port }
1550 };
1551
1552 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_port = {
1553         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1554         proto_hint_udp_src_port }
1555 };
1556
1557 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_port = {
1558         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1559         proto_hint_udp_dst_port }
1560 };
1561
1562 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_port = {
1563         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1564         proto_hint_udp_src_port }
1565 };
1566
1567 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_port = {
1568         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1569         proto_hint_udp_dst_port }
1570 };
1571
1572 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp = {
1573         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1574         proto_hint_udp }
1575 };
1576
1577 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_port = {
1578         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1579         proto_hint_tcp_src_port }
1580 };
1581
1582 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_port = {
1583         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1584         proto_hint_tcp_dst_port }
1585 };
1586
1587 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_port = {
1588         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1589         proto_hint_tcp_src_port }
1590 };
1591
1592 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_port = {
1593         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1594         proto_hint_tcp_dst_port }
1595 };
1596
1597 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_port = {
1598         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1599         proto_hint_tcp_src_port }
1600 };
1601
1602 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_port = {
1603         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1604         proto_hint_tcp_dst_port }
1605 };
1606
1607 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp = {
1608         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1609         proto_hint_tcp }
1610 };
1611
1612 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_sctp_src_port = {
1613         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src,
1614         proto_hint_sctp_src_port }
1615 };
1616
1617 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_sctp_dst_port = {
1618         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src,
1619         proto_hint_sctp_dst_port }
1620 };
1621
1622 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_sctp_src_port = {
1623         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst,
1624         proto_hint_sctp_src_port }
1625 };
1626
1627 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_sctp_dst_port = {
1628         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst,
1629         proto_hint_sctp_dst_port }
1630 };
1631
1632 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_src_port = {
1633         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1634         proto_hint_sctp_src_port }
1635 };
1636
1637 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_dst_port = {
1638         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1639         proto_hint_sctp_dst_port }
1640 };
1641
1642 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp = {
1643         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6,
1644         proto_hint_sctp }
1645 };
1646
1647 struct virtchnl_proto_hdrs hdrs_hint_ipv6_esp = {
1648         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1649         proto_hint_esp }
1650 };
1651
1652 struct virtchnl_proto_hdrs hdrs_hint_ipv6_ah = {
1653         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1654         proto_hint_ah }
1655 };
1656
1657 struct virtchnl_proto_hdrs hdrs_hint_ipv6_l2tpv3 = {
1658         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1659         proto_hint_l2tpv3 }
1660 };
1661
1662 struct virtchnl_proto_hdrs hdrs_hint_ipv6_pfcp = {
1663         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1664         proto_hint_pfcp }
1665 };
1666
1667 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_esp = {
1668         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_ipv6_only,
1669         proto_hint_udp_only, proto_hint_esp }
1670 };
1671
1672 struct iavf_hash_match_type iavf_hash_map_list[] = {
1673         /* IPV4 */
1674         {ETH_RSS_L2_SRC_ONLY,
1675                 &hdrs_hint_eth_src_ipv4, IAVF_PHINT_IPV4},
1676         {ETH_RSS_L2_DST_ONLY,
1677                 &hdrs_hint_eth_dst_ipv4, IAVF_PHINT_IPV4},
1678         {ETH_RSS_ETH,
1679                 &hdrs_hint_eth_ipv4, IAVF_PHINT_IPV4},
1680         {ETH_RSS_L3_SRC_ONLY,
1681                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4},
1682         {ETH_RSS_L3_DST_ONLY,
1683                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4},
1684         {ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY,
1685                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4},
1686         {ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY,
1687                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4},
1688         {ETH_RSS_IPV4,
1689                 &hdrs_hint_ipv4, IAVF_PHINT_IPV4},
1690         {ETH_RSS_ESP,
1691                 &hdrs_hint_ipv4_esp, IAVF_PHINT_IPV4},
1692         {ETH_RSS_AH,
1693                 &hdrs_hint_ipv4_ah, IAVF_PHINT_IPV4},
1694         {ETH_RSS_L2TPV3,
1695                 &hdrs_hint_ipv4_l2tpv3, IAVF_PHINT_IPV4},
1696         {ETH_RSS_S_VLAN,
1697                 &hdrs_hint_svlan_ipv4, IAVF_PHINT_IPV4},
1698         {ETH_RSS_S_VLAN,
1699                 &hdrs_hint_svlan_ipv4_udp, IAVF_PHINT_IPV4_UDP},
1700         {ETH_RSS_S_VLAN,
1701                 &hdrs_hint_svlan_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
1702         {ETH_RSS_S_VLAN,
1703                 &hdrs_hint_svlan_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
1704         {ETH_RSS_C_VLAN,
1705                 &hdrs_hint_cvlan_ipv4, IAVF_PHINT_IPV4},
1706         {ETH_RSS_C_VLAN,
1707                 &hdrs_hint_cvlan_ipv4_udp, IAVF_PHINT_IPV4_UDP},
1708         {ETH_RSS_C_VLAN,
1709                 &hdrs_hint_cvlan_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
1710         {ETH_RSS_C_VLAN,
1711                 &hdrs_hint_cvlan_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
1712         /* IPV4 UDP */
1713         {ETH_RSS_L2_SRC_ONLY,
1714                 &hdrs_hint_eth_src_ipv4_udp, IAVF_PHINT_IPV4_UDP},
1715         {ETH_RSS_L2_DST_ONLY,
1716                 &hdrs_hint_eth_dst_ipv4_udp, IAVF_PHINT_IPV4_UDP},
1717         {ETH_RSS_ETH,
1718                 &hdrs_hint_eth_ipv4_udp, IAVF_PHINT_IPV4_UDP},
1719         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1720                 &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP},
1721         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1722                 &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP},
1723         {ETH_RSS_L3_SRC_ONLY,
1724                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4_UDP},
1725         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1726                 &hdrs_hint_ipv4_dst_udp_src_port, IAVF_PHINT_IPV4_UDP},
1727         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1728                 &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP},
1729         {ETH_RSS_L3_DST_ONLY,
1730                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4_UDP},
1731         {ETH_RSS_NONFRAG_IPV4_UDP |
1732                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1733                 &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP},
1734         {ETH_RSS_NONFRAG_IPV4_UDP |
1735                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1736                 &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP},
1737         {ETH_RSS_NONFRAG_IPV4_UDP |
1738                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,
1739                 IAVF_PHINT_IPV4_UDP},
1740         {ETH_RSS_NONFRAG_IPV4_UDP |
1741                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1742                 &hdrs_hint_ipv4_dst_udp_src_port, IAVF_PHINT_IPV4_UDP},
1743         {ETH_RSS_NONFRAG_IPV4_UDP |
1744                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1745                 &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP},
1746         {ETH_RSS_NONFRAG_IPV4_UDP |
1747                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,
1748                 IAVF_PHINT_IPV4_UDP},
1749         {ETH_RSS_L4_SRC_ONLY,
1750                 &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP},
1751         {ETH_RSS_L4_DST_ONLY,
1752                 &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP},
1753         {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY,
1754                 &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP},
1755         {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY,
1756                 &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP},
1757         {ETH_RSS_PFCP,
1758                 &hdrs_hint_ipv4_pfcp, IAVF_PHINT_IPV4_UDP},
1759         {ETH_RSS_ESP,
1760                 &hdrs_hint_ipv4_udp_esp, IAVF_PHINT_IPV4_UDP},
1761         {ETH_RSS_NONFRAG_IPV4_UDP,
1762                 &hdrs_hint_ipv4_udp, IAVF_PHINT_IPV4_UDP},
1763         /* IPV4 TCP */
1764         {ETH_RSS_L2_SRC_ONLY,
1765                 &hdrs_hint_eth_src_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
1766         {ETH_RSS_L2_DST_ONLY,
1767                 &hdrs_hint_eth_dst_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
1768         {ETH_RSS_ETH,
1769                 &hdrs_hint_eth_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
1770         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1771                 &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP},
1772         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1773                 &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
1774         {ETH_RSS_L3_SRC_ONLY,
1775                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4_TCP},
1776         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1777                 &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP},
1778         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1779                 &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
1780         {ETH_RSS_L3_DST_ONLY,
1781                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4_TCP},
1782         {ETH_RSS_NONFRAG_IPV4_TCP |
1783                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1784                 &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP},
1785         {ETH_RSS_NONFRAG_IPV4_TCP |
1786                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1787                 &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
1788         {ETH_RSS_NONFRAG_IPV4_TCP |
1789                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,
1790                 IAVF_PHINT_IPV4_TCP},
1791         {ETH_RSS_NONFRAG_IPV4_TCP |
1792                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1793                 &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP},
1794         {ETH_RSS_NONFRAG_IPV4_TCP |
1795                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1796                 &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
1797         {ETH_RSS_NONFRAG_IPV4_TCP |
1798                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,
1799                 IAVF_PHINT_IPV4_TCP},
1800         {ETH_RSS_L4_SRC_ONLY,
1801                 &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP},
1802         {ETH_RSS_L4_DST_ONLY,
1803                 &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
1804         {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY,
1805                 &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP},
1806         {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY,
1807                 &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
1808         {ETH_RSS_NONFRAG_IPV4_TCP,
1809                 &hdrs_hint_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
1810         /* IPV4 SCTP */
1811         {ETH_RSS_L2_SRC_ONLY,
1812                 &hdrs_hint_eth_src_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
1813         {ETH_RSS_L2_DST_ONLY,
1814                 &hdrs_hint_eth_dst_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
1815         {ETH_RSS_ETH,
1816                 &hdrs_hint_eth_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
1817         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1818                 &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
1819         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1820                 &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
1821         {ETH_RSS_L3_SRC_ONLY,
1822                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4_SCTP},
1823         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1824                 &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
1825         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1826                 &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
1827         {ETH_RSS_L3_DST_ONLY,
1828                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4_SCTP},
1829         {ETH_RSS_NONFRAG_IPV4_SCTP |
1830                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1831                 &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
1832         {ETH_RSS_NONFRAG_IPV4_SCTP |
1833                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1834                 &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
1835         {ETH_RSS_NONFRAG_IPV4_SCTP |
1836                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,
1837                 IAVF_PHINT_IPV4_SCTP},
1838         {ETH_RSS_NONFRAG_IPV4_SCTP |
1839                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1840                 &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
1841         {ETH_RSS_NONFRAG_IPV4_SCTP |
1842                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1843                 &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
1844         {ETH_RSS_NONFRAG_IPV4_SCTP |
1845                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,
1846                 IAVF_PHINT_IPV4_SCTP},
1847         {ETH_RSS_L4_SRC_ONLY,
1848                 &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
1849         {ETH_RSS_L4_DST_ONLY,
1850                 &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
1851         {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY,
1852                 &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
1853         {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY,
1854                 &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
1855         {ETH_RSS_NONFRAG_IPV4_SCTP,
1856                 &hdrs_hint_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
1857         /* IPV6 */
1858         {ETH_RSS_L2_SRC_ONLY,
1859                 &hdrs_hint_eth_src_ipv6, IAVF_PHINT_IPV6},
1860         {ETH_RSS_L2_DST_ONLY,
1861                 &hdrs_hint_eth_dst_ipv6, IAVF_PHINT_IPV6},
1862         {ETH_RSS_ETH,
1863                 &hdrs_hint_eth_ipv6, IAVF_PHINT_IPV6},
1864         {ETH_RSS_L3_SRC_ONLY,
1865                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6},
1866         {ETH_RSS_L3_DST_ONLY,
1867                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6},
1868         {ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY,
1869                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6},
1870         {ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY,
1871                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6},
1872         {ETH_RSS_IPV6,
1873                 &hdrs_hint_ipv6, IAVF_PHINT_IPV6},
1874         {ETH_RSS_ESP,
1875                 &hdrs_hint_ipv6_esp, IAVF_PHINT_IPV6},
1876         {ETH_RSS_AH,
1877                 &hdrs_hint_ipv6_ah, IAVF_PHINT_IPV6},
1878         {ETH_RSS_L2TPV3,
1879                 &hdrs_hint_ipv6_l2tpv3, IAVF_PHINT_IPV6},
1880         /* IPV6 UDP */
1881         {ETH_RSS_L2_SRC_ONLY,
1882                 &hdrs_hint_eth_src_ipv6_udp, IAVF_PHINT_IPV6_UDP},
1883         {ETH_RSS_L2_DST_ONLY,
1884                 &hdrs_hint_eth_dst_ipv6_udp, IAVF_PHINT_IPV6_UDP},
1885         {ETH_RSS_ETH,
1886                 &hdrs_hint_eth_ipv6_udp, IAVF_PHINT_IPV6_UDP},
1887         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1888                 &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
1889         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1890                 &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
1891         {ETH_RSS_L3_SRC_ONLY,
1892                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6_UDP},
1893         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1894                 &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
1895         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1896                 &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
1897         {ETH_RSS_L3_DST_ONLY,
1898                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6_UDP},
1899         {ETH_RSS_NONFRAG_IPV6_UDP |
1900                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1901                 &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
1902         {ETH_RSS_NONFRAG_IPV6_UDP |
1903                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1904                 &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
1905         {ETH_RSS_NONFRAG_IPV6_UDP |
1906                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src,
1907                 IAVF_PHINT_IPV6_UDP},
1908         {ETH_RSS_NONFRAG_IPV6_UDP |
1909                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1910                 &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
1911         {ETH_RSS_NONFRAG_IPV6_UDP |
1912                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1913                 &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
1914         {ETH_RSS_NONFRAG_IPV6_UDP |
1915                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst,
1916                 IAVF_PHINT_IPV6_UDP},
1917         {ETH_RSS_L4_SRC_ONLY,
1918                 &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP},
1919         {ETH_RSS_L4_DST_ONLY,
1920                 &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP},
1921         {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY,
1922                 &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP},
1923         {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY,
1924                 &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP},
1925         {ETH_RSS_PFCP,
1926                 &hdrs_hint_ipv6_pfcp, IAVF_PHINT_IPV6_UDP},
1927         {ETH_RSS_ESP,
1928                 &hdrs_hint_ipv6_udp_esp, IAVF_PHINT_IPV6_UDP},
1929         {ETH_RSS_NONFRAG_IPV6_UDP,
1930                 &hdrs_hint_ipv6_udp, IAVF_PHINT_IPV6_UDP},
1931         /* IPV6 TCP */
1932         {ETH_RSS_L2_SRC_ONLY,
1933                 &hdrs_hint_eth_src_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
1934         {ETH_RSS_L2_DST_ONLY,
1935                 &hdrs_hint_eth_dst_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
1936         {ETH_RSS_ETH,
1937                 &hdrs_hint_eth_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
1938         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1939                 &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
1940         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1941                 &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
1942         {ETH_RSS_L3_SRC_ONLY,
1943                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6_TCP},
1944         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1945                 &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
1946         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1947                 &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
1948         {ETH_RSS_L3_DST_ONLY,
1949                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6_TCP},
1950         {ETH_RSS_NONFRAG_IPV6_TCP |
1951                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1952                 &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
1953         {ETH_RSS_NONFRAG_IPV6_TCP |
1954                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1955                 &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
1956         {ETH_RSS_NONFRAG_IPV6_TCP |
1957                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src,
1958                 IAVF_PHINT_IPV6_TCP},
1959         {ETH_RSS_NONFRAG_IPV6_TCP |
1960                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1961                 &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
1962         {ETH_RSS_NONFRAG_IPV6_TCP |
1963                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1964                 &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
1965         {ETH_RSS_NONFRAG_IPV6_TCP |
1966                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst,
1967                 IAVF_PHINT_IPV6_TCP},
1968         {ETH_RSS_L4_SRC_ONLY,
1969                 &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP},
1970         {ETH_RSS_L4_DST_ONLY,
1971                 &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
1972         {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY,
1973                 &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP},
1974         {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY,
1975                 &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
1976         {ETH_RSS_NONFRAG_IPV6_TCP,
1977                 &hdrs_hint_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
1978         /* IPV6 SCTP */
1979         {ETH_RSS_L2_SRC_ONLY,
1980                 &hdrs_hint_eth_src_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
1981         {ETH_RSS_L2_DST_ONLY,
1982                 &hdrs_hint_eth_dst_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
1983         {ETH_RSS_ETH,
1984                 &hdrs_hint_eth_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
1985         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1986                 &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
1987         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
1988                 &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
1989         {ETH_RSS_L3_SRC_ONLY,
1990                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6_SCTP},
1991         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
1992                 &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
1993         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
1994                 &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
1995         {ETH_RSS_L3_DST_ONLY,
1996                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6_SCTP},
1997         {ETH_RSS_NONFRAG_IPV6_SCTP |
1998                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
1999                 &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2000         {ETH_RSS_NONFRAG_IPV6_SCTP |
2001                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2002                 &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2003         {ETH_RSS_NONFRAG_IPV6_SCTP |
2004                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src,
2005                 IAVF_PHINT_IPV6_SCTP},
2006         {ETH_RSS_NONFRAG_IPV6_SCTP |
2007                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2008                 &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2009         {ETH_RSS_NONFRAG_IPV6_SCTP |
2010                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2011                 &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2012         {ETH_RSS_NONFRAG_IPV6_SCTP |
2013                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst,
2014                 IAVF_PHINT_IPV6_SCTP},
2015         {ETH_RSS_L4_SRC_ONLY,
2016                 &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2017         {ETH_RSS_L4_DST_ONLY,
2018                 &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2019         {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY,
2020                 &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2021         {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY,
2022                 &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2023         {ETH_RSS_NONFRAG_IPV6_SCTP,
2024                 &hdrs_hint_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2025         {ETH_RSS_S_VLAN,
2026                 &hdrs_hint_svlan_ipv6, IAVF_PHINT_IPV6},
2027         {ETH_RSS_S_VLAN,
2028                 &hdrs_hint_svlan_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2029         {ETH_RSS_S_VLAN,
2030                 &hdrs_hint_svlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2031         {ETH_RSS_S_VLAN,
2032                 &hdrs_hint_svlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2033         {ETH_RSS_C_VLAN,
2034                 &hdrs_hint_cvlan_ipv6, IAVF_PHINT_IPV6},
2035         {ETH_RSS_C_VLAN,
2036                 &hdrs_hint_cvlan_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2037         {ETH_RSS_C_VLAN,
2038                 &hdrs_hint_cvlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2039         {ETH_RSS_C_VLAN,
2040                 &hdrs_hint_cvlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2041 };
2042
2043 struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
2044         /* GTPU */
2045         /* GTPU IP */
2046         /* IPv4 GTPU IP IPv4*/
2047         {ETH_RSS_L3_SRC_ONLY,
2048                 &hdrs_hint_ipv4_src_gtpu_ip,
2049                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2050         {ETH_RSS_L3_DST_ONLY,
2051                 &hdrs_hint_ipv4_dst_gtpu_ip,
2052                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2053         {ETH_RSS_IPV4 |
2054                 ETH_RSS_L3_SRC_ONLY,
2055                 &hdrs_hint_ipv4_src_gtpu_ip,
2056                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2057         {ETH_RSS_IPV4 |
2058                 ETH_RSS_L3_DST_ONLY,
2059                 &hdrs_hint_ipv4_dst_gtpu_ip,
2060                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2061         {ETH_RSS_IPV4,
2062                 &hdrs_hint_ipv4_gtpu_ip,
2063                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2064         {ETH_RSS_GTPU,
2065                 &hdrs_hint_teid_gtpu_ip,
2066                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2067         /* IPv4 GTPU IP IPv6*/
2068         {ETH_RSS_IPV6 |
2069                 ETH_RSS_L3_SRC_ONLY,
2070                 &hdrs_hint_ipv6_src_gtpu_ip,
2071                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2072         {ETH_RSS_IPV6 |
2073                 ETH_RSS_L3_DST_ONLY,
2074                 &hdrs_hint_ipv6_dst_gtpu_ip,
2075                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2076         {ETH_RSS_IPV6,
2077                 &hdrs_hint_ipv6_gtpu_ip,
2078                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2079         {ETH_RSS_GTPU,
2080                 &hdrs_hint_teid_gtpu_ip,
2081                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2082         /* IPv6 GTPU IP IPv4*/
2083         {ETH_RSS_IPV4 |
2084                 ETH_RSS_L3_SRC_ONLY,
2085                 &hdrs_hint_ipv4_src_gtpu_ip,
2086                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2087         {ETH_RSS_IPV4 |
2088                 ETH_RSS_L3_DST_ONLY,
2089                 &hdrs_hint_ipv4_dst_gtpu_ip,
2090                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2091         {ETH_RSS_IPV4,
2092                 &hdrs_hint_ipv4_gtpu_ip,
2093                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2094         {ETH_RSS_GTPU,
2095                 &hdrs_hint_teid_gtpu_ip,
2096                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2097         /* IPv6 GTPU IP IPv6*/
2098         {ETH_RSS_IPV6 |
2099                 ETH_RSS_L3_SRC_ONLY,
2100                 &hdrs_hint_ipv6_src_gtpu_ip,
2101                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2102         {ETH_RSS_IPV6 |
2103                 ETH_RSS_L3_DST_ONLY,
2104                 &hdrs_hint_ipv6_dst_gtpu_ip,
2105                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2106         {ETH_RSS_IPV6,
2107                 &hdrs_hint_ipv6_gtpu_ip,
2108                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2109         {ETH_RSS_GTPU,
2110                 &hdrs_hint_teid_gtpu_ip,
2111                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2112         /* IPv4 GTPU IP IPv4 UDP */
2113         {ETH_RSS_L3_SRC_ONLY |
2114                 ETH_RSS_L4_SRC_ONLY,
2115                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2116                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2117         {ETH_RSS_L3_SRC_ONLY |
2118                 ETH_RSS_L4_DST_ONLY,
2119                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2120                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2121         {ETH_RSS_L3_SRC_ONLY,
2122                 &hdrs_hint_ipv4_src_gtpu_ip,
2123                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2124         {ETH_RSS_L4_SRC_ONLY,
2125                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2126                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2127         {ETH_RSS_L3_DST_ONLY |
2128                 ETH_RSS_L4_SRC_ONLY,
2129                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2130                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2131         {ETH_RSS_L3_DST_ONLY |
2132                 ETH_RSS_L4_DST_ONLY,
2133                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2134                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2135         {ETH_RSS_L3_DST_ONLY,
2136                 &hdrs_hint_ipv4_dst_gtpu_ip,
2137                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2138         {ETH_RSS_L4_DST_ONLY,
2139                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2140                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2141         {ETH_RSS_NONFRAG_IPV4_UDP |
2142                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2143                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2144                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2145         {ETH_RSS_NONFRAG_IPV4_UDP |
2146                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2147                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2148                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2149         {ETH_RSS_NONFRAG_IPV4_UDP |
2150                 ETH_RSS_L3_SRC_ONLY,
2151                 &hdrs_hint_ipv4_src_gtpu_ip,
2152                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2153         {ETH_RSS_NONFRAG_IPV4_UDP |
2154                 ETH_RSS_L4_SRC_ONLY,
2155                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2156                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2157         {ETH_RSS_NONFRAG_IPV4_UDP |
2158                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2159                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2160                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2161         {ETH_RSS_NONFRAG_IPV4_UDP |
2162                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2163                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2164                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2165         {ETH_RSS_NONFRAG_IPV4_UDP |
2166                 ETH_RSS_L3_DST_ONLY,
2167                 &hdrs_hint_ipv4_dst_gtpu_ip,
2168                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2169         {ETH_RSS_NONFRAG_IPV4_UDP |
2170                 ETH_RSS_L4_DST_ONLY,
2171                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2172                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2173         {ETH_RSS_NONFRAG_IPV4_UDP,
2174                 &hdrs_hint_ipv4_udp_gtpu_ip,
2175                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2176         /* IPv4 GTPU IP IPv6 UDP */
2177         {ETH_RSS_NONFRAG_IPV6_UDP |
2178                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2179                 &hdrs_hint_ipv6_src_udp_src_gtpu_ip,
2180                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2181         {ETH_RSS_NONFRAG_IPV6_UDP |
2182                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2183                 &hdrs_hint_ipv6_src_udp_dst_gtpu_ip,
2184                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2185         {ETH_RSS_NONFRAG_IPV6_UDP |
2186                 ETH_RSS_L3_SRC_ONLY,
2187                 &hdrs_hint_ipv6_src_gtpu_ip,
2188                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2189         {ETH_RSS_NONFRAG_IPV6_UDP |
2190                 ETH_RSS_L4_SRC_ONLY,
2191                 &hdrs_hint_ipv6_udp_src_gtpu_ip,
2192                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2193         {ETH_RSS_NONFRAG_IPV6_UDP |
2194                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2195                 &hdrs_hint_ipv6_dst_udp_src_gtpu_ip,
2196                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2197         {ETH_RSS_NONFRAG_IPV6_UDP |
2198                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2199                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_ip,
2200                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2201         {ETH_RSS_NONFRAG_IPV6_UDP |
2202                 ETH_RSS_L3_DST_ONLY,
2203                 &hdrs_hint_ipv6_dst_gtpu_ip,
2204                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2205         {ETH_RSS_NONFRAG_IPV6_UDP |
2206                 ETH_RSS_L4_DST_ONLY,
2207                 &hdrs_hint_ipv6_udp_dst_gtpu_ip,
2208                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2209         {ETH_RSS_NONFRAG_IPV6_UDP,
2210                 &hdrs_hint_ipv6_udp_gtpu_ip,
2211                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2212         /* IPv6 GTPU IP IPv4 UDP */
2213         {ETH_RSS_NONFRAG_IPV4_UDP |
2214                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2215                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2216                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2217         {ETH_RSS_NONFRAG_IPV4_UDP |
2218                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2219                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2220                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2221         {ETH_RSS_NONFRAG_IPV4_UDP |
2222                 ETH_RSS_L3_SRC_ONLY,
2223                 &hdrs_hint_ipv4_src_gtpu_ip,
2224                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2225         {ETH_RSS_NONFRAG_IPV4_UDP |
2226                 ETH_RSS_L4_SRC_ONLY,
2227                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2228                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2229         {ETH_RSS_NONFRAG_IPV4_UDP |
2230                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2231                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2232                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2233         {ETH_RSS_NONFRAG_IPV4_UDP |
2234                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2235                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2236                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2237         {ETH_RSS_NONFRAG_IPV4_UDP |
2238                 ETH_RSS_L3_DST_ONLY,
2239                 &hdrs_hint_ipv4_dst_gtpu_ip,
2240                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2241         {ETH_RSS_NONFRAG_IPV4_UDP |
2242                 ETH_RSS_L4_DST_ONLY,
2243                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2244                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2245         {ETH_RSS_NONFRAG_IPV4_UDP,
2246                 &hdrs_hint_ipv4_udp_gtpu_ip,
2247                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2248         /* IPv6 GTPU IP IPv6 UDP */
2249         {ETH_RSS_NONFRAG_IPV6_UDP |
2250                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2251                 &hdrs_hint_ipv6_src_udp_src_gtpu_ip,
2252                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2253         {ETH_RSS_NONFRAG_IPV6_UDP |
2254                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2255                 &hdrs_hint_ipv6_src_udp_dst_gtpu_ip,
2256                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2257         {ETH_RSS_NONFRAG_IPV6_UDP |
2258                 ETH_RSS_L3_SRC_ONLY,
2259                 &hdrs_hint_ipv6_src_gtpu_ip,
2260                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2261         {ETH_RSS_NONFRAG_IPV6_UDP |
2262                 ETH_RSS_L4_SRC_ONLY,
2263                 &hdrs_hint_ipv6_udp_src_gtpu_ip,
2264                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2265         {ETH_RSS_NONFRAG_IPV6_UDP |
2266                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2267                 &hdrs_hint_ipv6_dst_udp_src_gtpu_ip,
2268                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2269         {ETH_RSS_NONFRAG_IPV6_UDP |
2270                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2271                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_ip,
2272                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2273         {ETH_RSS_NONFRAG_IPV6_UDP |
2274                 ETH_RSS_L3_DST_ONLY,
2275                 &hdrs_hint_ipv6_dst_gtpu_ip,
2276                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2277         {ETH_RSS_NONFRAG_IPV6_UDP |
2278                 ETH_RSS_L4_DST_ONLY,
2279                 &hdrs_hint_ipv6_udp_dst_gtpu_ip,
2280                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2281         {ETH_RSS_NONFRAG_IPV6_UDP,
2282                 &hdrs_hint_ipv6_udp_gtpu_ip,
2283                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2284         /* IPv4 GTPU IP IPv4 TCP */
2285         {ETH_RSS_L3_SRC_ONLY |
2286                 ETH_RSS_L4_SRC_ONLY,
2287                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2288                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2289         {ETH_RSS_L3_SRC_ONLY |
2290                 ETH_RSS_L4_DST_ONLY,
2291                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2292                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2293         {ETH_RSS_L3_SRC_ONLY,
2294                 &hdrs_hint_ipv4_src_gtpu_ip,
2295                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2296         {ETH_RSS_L4_SRC_ONLY,
2297                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2298                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2299         {ETH_RSS_L3_DST_ONLY |
2300                 ETH_RSS_L4_SRC_ONLY,
2301                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2302                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2303         {ETH_RSS_L3_DST_ONLY |
2304                 ETH_RSS_L4_DST_ONLY,
2305                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2306                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2307         {ETH_RSS_L3_DST_ONLY,
2308                 &hdrs_hint_ipv4_dst_gtpu_ip,
2309                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2310         {ETH_RSS_L4_DST_ONLY,
2311                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2312                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2313         {ETH_RSS_NONFRAG_IPV4_TCP |
2314                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2315                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2316                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2317         {ETH_RSS_NONFRAG_IPV4_TCP |
2318                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2319                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2320                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2321         {ETH_RSS_NONFRAG_IPV4_TCP |
2322                 ETH_RSS_L3_SRC_ONLY,
2323                 &hdrs_hint_ipv4_src_gtpu_ip,
2324                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2325         {ETH_RSS_NONFRAG_IPV4_TCP |
2326                 ETH_RSS_L4_SRC_ONLY,
2327                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2328                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2329         {ETH_RSS_NONFRAG_IPV4_TCP |
2330                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2331                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2332                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2333         {ETH_RSS_NONFRAG_IPV4_TCP |
2334                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2335                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2336                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2337         {ETH_RSS_NONFRAG_IPV4_TCP |
2338                 ETH_RSS_L3_DST_ONLY,
2339                 &hdrs_hint_ipv4_dst_gtpu_ip,
2340                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2341         {ETH_RSS_NONFRAG_IPV4_TCP |
2342                 ETH_RSS_L4_DST_ONLY,
2343                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2344                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2345         {ETH_RSS_NONFRAG_IPV4_TCP,
2346                 &hdrs_hint_ipv4_tcp_gtpu_ip,
2347                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2348         /* IPv4 GTPU IP IPv6 TCP */
2349         {ETH_RSS_NONFRAG_IPV6_TCP |
2350                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2351                 &hdrs_hint_ipv6_src_tcp_src_gtpu_ip,
2352                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2353         {ETH_RSS_NONFRAG_IPV6_TCP |
2354                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2355                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_ip,
2356                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2357         {ETH_RSS_NONFRAG_IPV6_TCP |
2358                 ETH_RSS_L3_SRC_ONLY,
2359                 &hdrs_hint_ipv6_src_gtpu_ip,
2360                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2361         {ETH_RSS_NONFRAG_IPV6_TCP |
2362                 ETH_RSS_L4_SRC_ONLY,
2363                 &hdrs_hint_ipv6_tcp_src_gtpu_ip,
2364                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2365         {ETH_RSS_NONFRAG_IPV6_TCP |
2366                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2367                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_ip,
2368                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2369         {ETH_RSS_NONFRAG_IPV6_TCP |
2370                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2371                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip,
2372                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2373         {ETH_RSS_NONFRAG_IPV6_TCP |
2374                 ETH_RSS_L3_DST_ONLY,
2375                 &hdrs_hint_ipv6_dst_gtpu_ip,
2376                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2377         {ETH_RSS_NONFRAG_IPV6_TCP |
2378                 ETH_RSS_L4_DST_ONLY,
2379                 &hdrs_hint_ipv6_tcp_dst_gtpu_ip,
2380                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2381         {ETH_RSS_NONFRAG_IPV6_TCP,
2382                 &hdrs_hint_ipv6_tcp_gtpu_ip,
2383                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2384         /* IPv6 GTPU IP IPv4 TCP */
2385         {ETH_RSS_NONFRAG_IPV4_TCP |
2386                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2387                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2388                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2389         {ETH_RSS_NONFRAG_IPV4_TCP |
2390                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2391                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2392                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2393         {ETH_RSS_NONFRAG_IPV4_TCP |
2394                 ETH_RSS_L3_SRC_ONLY,
2395                 &hdrs_hint_ipv4_src_gtpu_ip,
2396                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2397         {ETH_RSS_NONFRAG_IPV4_TCP |
2398                 ETH_RSS_L4_SRC_ONLY,
2399                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2400                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2401         {ETH_RSS_NONFRAG_IPV4_TCP |
2402                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2403                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2404                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2405         {ETH_RSS_NONFRAG_IPV4_TCP |
2406                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2407                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2408                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2409         {ETH_RSS_NONFRAG_IPV4_TCP |
2410                 ETH_RSS_L3_DST_ONLY,
2411                 &hdrs_hint_ipv4_dst_gtpu_ip,
2412                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2413         {ETH_RSS_NONFRAG_IPV4_TCP |
2414                 ETH_RSS_L4_DST_ONLY,
2415                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2416                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2417         {ETH_RSS_NONFRAG_IPV4_TCP,
2418                 &hdrs_hint_ipv4_tcp_gtpu_ip,
2419                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2420         /* IPv6 GTPU IP IPv6 TCP */
2421         {ETH_RSS_NONFRAG_IPV6_TCP |
2422                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2423                 &hdrs_hint_ipv6_src_tcp_src_gtpu_ip,
2424                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2425         {ETH_RSS_NONFRAG_IPV6_TCP |
2426                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2427                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_ip,
2428                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2429         {ETH_RSS_NONFRAG_IPV6_TCP |
2430                 ETH_RSS_L3_SRC_ONLY,
2431                 &hdrs_hint_ipv6_src_gtpu_ip,
2432                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2433         {ETH_RSS_NONFRAG_IPV6_TCP |
2434                 ETH_RSS_L4_SRC_ONLY,
2435                 &hdrs_hint_ipv6_tcp_src_gtpu_ip,
2436                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2437         {ETH_RSS_NONFRAG_IPV6_TCP |
2438                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2439                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_ip,
2440                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2441         {ETH_RSS_NONFRAG_IPV6_TCP |
2442                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2443                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip,
2444                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2445         {ETH_RSS_NONFRAG_IPV6_TCP |
2446                 ETH_RSS_L3_DST_ONLY,
2447                 &hdrs_hint_ipv6_dst_gtpu_ip,
2448                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2449         {ETH_RSS_NONFRAG_IPV6_TCP |
2450                 ETH_RSS_L4_DST_ONLY,
2451                 &hdrs_hint_ipv6_tcp_dst_gtpu_ip,
2452                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2453         {ETH_RSS_NONFRAG_IPV6_TCP,
2454                 &hdrs_hint_ipv6_tcp_gtpu_ip,
2455                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2456         /* GTPU EH */
2457         /* IPv4 GTPU EH IPv4 */
2458         {ETH_RSS_L3_SRC_ONLY,
2459                 &hdrs_hint_ipv4_src_gtpu_eh,
2460                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2461         {ETH_RSS_L3_DST_ONLY,
2462                 &hdrs_hint_ipv4_dst_gtpu_eh,
2463                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2464         {ETH_RSS_IPV4 |
2465                 ETH_RSS_L3_SRC_ONLY,
2466                 &hdrs_hint_ipv4_src_gtpu_eh,
2467                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2468         {ETH_RSS_IPV4 |
2469                 ETH_RSS_L3_DST_ONLY,
2470                 &hdrs_hint_ipv4_dst_gtpu_eh,
2471                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2472         {ETH_RSS_IPV4,
2473                 &hdrs_hint_ipv4_gtpu_eh,
2474                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2475         /* IPv4 GTPU EH IPv6 */
2476         {ETH_RSS_IPV6 |
2477                 ETH_RSS_L3_SRC_ONLY,
2478                 &hdrs_hint_ipv6_src_gtpu_eh,
2479                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2480         {ETH_RSS_IPV6 |
2481                 ETH_RSS_L3_DST_ONLY,
2482                 &hdrs_hint_ipv6_dst_gtpu_eh,
2483                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2484         {ETH_RSS_IPV6,
2485                 &hdrs_hint_ipv6_gtpu_eh,
2486                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2487         /* IPv6 GTPU EH IPv4 */
2488         {ETH_RSS_IPV4 |
2489                 ETH_RSS_L3_SRC_ONLY,
2490                 &hdrs_hint_ipv4_src_gtpu_eh,
2491                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2492         {ETH_RSS_IPV4 |
2493                 ETH_RSS_L3_DST_ONLY,
2494                 &hdrs_hint_ipv4_dst_gtpu_eh,
2495                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2496         {ETH_RSS_IPV4,
2497                 &hdrs_hint_ipv4_gtpu_eh,
2498                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2499         /* IPv6 GTPU EH IPv6 */
2500         {ETH_RSS_IPV6 |
2501                 ETH_RSS_L3_SRC_ONLY,
2502                 &hdrs_hint_ipv6_src_gtpu_eh,
2503                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2504         {ETH_RSS_IPV6 |
2505                 ETH_RSS_L3_DST_ONLY,
2506                 &hdrs_hint_ipv6_dst_gtpu_eh,
2507                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2508         {ETH_RSS_IPV6,
2509                 &hdrs_hint_ipv6_gtpu_eh,
2510                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2511         /* IPv4 GTPU EH IPv4 UDP */
2512         {ETH_RSS_L3_SRC_ONLY |
2513                 ETH_RSS_L4_SRC_ONLY,
2514                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2515                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2516         {ETH_RSS_L3_SRC_ONLY |
2517                 ETH_RSS_L4_DST_ONLY,
2518                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2519                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2520         {ETH_RSS_L3_SRC_ONLY,
2521                 &hdrs_hint_ipv4_src_gtpu_eh,
2522                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2523         {ETH_RSS_L4_SRC_ONLY,
2524                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2525                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2526         {ETH_RSS_L3_DST_ONLY |
2527                 ETH_RSS_L4_SRC_ONLY,
2528                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2529                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2530         {ETH_RSS_L3_DST_ONLY |
2531                 ETH_RSS_L4_DST_ONLY,
2532                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2533                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2534         {ETH_RSS_L3_DST_ONLY,
2535                 &hdrs_hint_ipv4_dst_gtpu_eh,
2536                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2537         {ETH_RSS_L4_DST_ONLY,
2538                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2539                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2540         {ETH_RSS_NONFRAG_IPV4_UDP |
2541                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2542                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2543                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2544         {ETH_RSS_NONFRAG_IPV4_UDP |
2545                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2546                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2547                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2548         {ETH_RSS_NONFRAG_IPV4_UDP |
2549                 ETH_RSS_L3_SRC_ONLY,
2550                 &hdrs_hint_ipv4_src_gtpu_eh,
2551                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2552         {ETH_RSS_NONFRAG_IPV4_UDP |
2553                 ETH_RSS_L4_SRC_ONLY,
2554                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2555                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2556         {ETH_RSS_NONFRAG_IPV4_UDP |
2557                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2558                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2559                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2560         {ETH_RSS_NONFRAG_IPV4_UDP |
2561                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2562                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2563                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2564         {ETH_RSS_NONFRAG_IPV4_UDP |
2565                 ETH_RSS_L3_DST_ONLY,
2566                 &hdrs_hint_ipv4_dst_gtpu_eh,
2567                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2568         {ETH_RSS_NONFRAG_IPV4_UDP |
2569                 ETH_RSS_L4_DST_ONLY,
2570                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2571                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2572         {ETH_RSS_NONFRAG_IPV4_UDP,
2573                 &hdrs_hint_ipv4_udp_gtpu_eh,
2574                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2575         /* IPv4 GTPU EH IPv6 UDP */
2576         {ETH_RSS_NONFRAG_IPV6_UDP |
2577                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2578                 &hdrs_hint_ipv6_src_udp_src_gtpu_eh,
2579                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2580         {ETH_RSS_NONFRAG_IPV6_UDP |
2581                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2582                 &hdrs_hint_ipv6_src_udp_dst_gtpu_eh,
2583                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2584         {ETH_RSS_NONFRAG_IPV6_UDP |
2585                 ETH_RSS_L3_SRC_ONLY,
2586                 &hdrs_hint_ipv6_src_gtpu_eh,
2587                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2588         {ETH_RSS_NONFRAG_IPV6_UDP |
2589                 ETH_RSS_L4_SRC_ONLY,
2590                 &hdrs_hint_ipv6_udp_src_gtpu_eh,
2591                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2592         {ETH_RSS_NONFRAG_IPV6_UDP |
2593                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2594                 &hdrs_hint_ipv6_dst_udp_src_gtpu_eh,
2595                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2596         {ETH_RSS_NONFRAG_IPV6_UDP |
2597                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2598                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_eh,
2599                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2600         {ETH_RSS_NONFRAG_IPV6_UDP |
2601                 ETH_RSS_L3_DST_ONLY,
2602                 &hdrs_hint_ipv6_dst_gtpu_eh,
2603                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2604         {ETH_RSS_NONFRAG_IPV6_UDP |
2605                 ETH_RSS_L4_DST_ONLY,
2606                 &hdrs_hint_ipv6_udp_dst_gtpu_eh,
2607                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2608         {ETH_RSS_NONFRAG_IPV6_UDP,
2609                 &hdrs_hint_ipv6_udp_gtpu_eh,
2610                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2611         /* IPv6 GTPU EH IPv4 UDP */
2612         {ETH_RSS_NONFRAG_IPV4_UDP |
2613                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2614                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2615                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2616         {ETH_RSS_NONFRAG_IPV4_UDP |
2617                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2618                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2619                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2620         {ETH_RSS_NONFRAG_IPV4_UDP |
2621                 ETH_RSS_L3_SRC_ONLY,
2622                 &hdrs_hint_ipv4_src_gtpu_eh,
2623                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2624         {ETH_RSS_NONFRAG_IPV4_UDP |
2625                 ETH_RSS_L4_SRC_ONLY,
2626                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2627                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2628         {ETH_RSS_NONFRAG_IPV4_UDP |
2629                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2630                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2631                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2632         {ETH_RSS_NONFRAG_IPV4_UDP |
2633                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2634                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2635                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2636         {ETH_RSS_NONFRAG_IPV4_UDP |
2637                 ETH_RSS_L3_DST_ONLY,
2638                 &hdrs_hint_ipv4_dst_gtpu_eh,
2639                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2640         {ETH_RSS_NONFRAG_IPV4_UDP |
2641                 ETH_RSS_L4_DST_ONLY,
2642                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2643                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2644         {ETH_RSS_NONFRAG_IPV4_UDP,
2645                 &hdrs_hint_ipv4_udp_gtpu_eh,
2646                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2647         /* IPv6 GTPU EH IPv6 UDP */
2648         {ETH_RSS_NONFRAG_IPV6_UDP |
2649                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2650                 &hdrs_hint_ipv6_src_udp_src_gtpu_eh,
2651                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2652         {ETH_RSS_NONFRAG_IPV6_UDP |
2653                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2654                 &hdrs_hint_ipv6_src_udp_dst_gtpu_eh,
2655                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2656         {ETH_RSS_NONFRAG_IPV6_UDP |
2657                 ETH_RSS_L3_SRC_ONLY,
2658                 &hdrs_hint_ipv6_src_gtpu_eh,
2659                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2660         {ETH_RSS_NONFRAG_IPV6_UDP |
2661                 ETH_RSS_L4_SRC_ONLY,
2662                 &hdrs_hint_ipv6_udp_src_gtpu_eh,
2663                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2664         {ETH_RSS_NONFRAG_IPV6_UDP |
2665                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2666                 &hdrs_hint_ipv6_dst_udp_src_gtpu_eh,
2667                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2668         {ETH_RSS_NONFRAG_IPV6_UDP |
2669                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2670                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_eh,
2671                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2672         {ETH_RSS_NONFRAG_IPV6_UDP |
2673                 ETH_RSS_L3_DST_ONLY,
2674                 &hdrs_hint_ipv6_dst_gtpu_eh,
2675                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2676         {ETH_RSS_NONFRAG_IPV6_UDP |
2677                 ETH_RSS_L4_DST_ONLY,
2678                 &hdrs_hint_ipv6_udp_dst_gtpu_eh,
2679                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2680         {ETH_RSS_NONFRAG_IPV6_UDP,
2681                 &hdrs_hint_ipv6_udp_gtpu_eh,
2682                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2683         /* IPv4 GTPU EH IPv4 TCP */
2684         {ETH_RSS_L3_SRC_ONLY |
2685                 ETH_RSS_L4_SRC_ONLY,
2686                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
2687                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2688         {ETH_RSS_L3_SRC_ONLY |
2689                 ETH_RSS_L4_DST_ONLY,
2690                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
2691                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2692         {ETH_RSS_L3_SRC_ONLY,
2693                 &hdrs_hint_ipv4_src_gtpu_eh,
2694                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2695         {ETH_RSS_L4_SRC_ONLY,
2696                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
2697                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2698         {ETH_RSS_L3_DST_ONLY |
2699                 ETH_RSS_L4_SRC_ONLY,
2700                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
2701                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2702         {ETH_RSS_L3_DST_ONLY |
2703                 ETH_RSS_L4_DST_ONLY,
2704                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
2705                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2706         {ETH_RSS_L3_DST_ONLY,
2707                 &hdrs_hint_ipv4_dst_gtpu_eh,
2708                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2709         {ETH_RSS_L4_DST_ONLY,
2710                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
2711                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2712         {ETH_RSS_NONFRAG_IPV4_TCP |
2713                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2714                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
2715                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2716         {ETH_RSS_NONFRAG_IPV4_TCP |
2717                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2718                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
2719                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2720         {ETH_RSS_NONFRAG_IPV4_TCP |
2721                 ETH_RSS_L3_SRC_ONLY,
2722                 &hdrs_hint_ipv4_src_gtpu_eh,
2723                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2724         {ETH_RSS_NONFRAG_IPV4_TCP |
2725                 ETH_RSS_L4_SRC_ONLY,
2726                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
2727                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2728         {ETH_RSS_NONFRAG_IPV4_TCP |
2729                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2730                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
2731                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2732         {ETH_RSS_NONFRAG_IPV4_TCP |
2733                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2734                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
2735                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2736         {ETH_RSS_NONFRAG_IPV4_TCP |
2737                 ETH_RSS_L3_DST_ONLY,
2738                 &hdrs_hint_ipv4_dst_gtpu_eh,
2739                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2740         {ETH_RSS_NONFRAG_IPV4_TCP |
2741                 ETH_RSS_L4_DST_ONLY,
2742                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
2743                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2744         {ETH_RSS_NONFRAG_IPV4_TCP,
2745                 &hdrs_hint_ipv4_tcp_gtpu_eh,
2746                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2747         /* IPv4 GTPU EH IPv6 TCP */
2748         {ETH_RSS_NONFRAG_IPV6_TCP |
2749                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2750                 &hdrs_hint_ipv6_src_tcp_src_gtpu_eh,
2751                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2752         {ETH_RSS_NONFRAG_IPV6_TCP |
2753                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2754                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_eh,
2755                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2756         {ETH_RSS_NONFRAG_IPV6_TCP |
2757                 ETH_RSS_L3_SRC_ONLY,
2758                 &hdrs_hint_ipv6_src_gtpu_eh,
2759                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2760         {ETH_RSS_NONFRAG_IPV6_TCP |
2761                 ETH_RSS_L4_SRC_ONLY,
2762                 &hdrs_hint_ipv6_tcp_src_gtpu_eh,
2763                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2764         {ETH_RSS_NONFRAG_IPV6_TCP |
2765                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2766                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_eh,
2767                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2768         {ETH_RSS_NONFRAG_IPV6_TCP |
2769                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2770                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh,
2771                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2772         {ETH_RSS_NONFRAG_IPV6_TCP |
2773                 ETH_RSS_L3_DST_ONLY,
2774                 &hdrs_hint_ipv6_dst_gtpu_eh,
2775                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2776         {ETH_RSS_NONFRAG_IPV6_TCP |
2777                 ETH_RSS_L4_DST_ONLY,
2778                 &hdrs_hint_ipv6_tcp_dst_gtpu_eh,
2779                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2780         {ETH_RSS_NONFRAG_IPV6_TCP,
2781                 &hdrs_hint_ipv6_tcp_gtpu_eh,
2782                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2783         /* IPv6 GTPU EH IPv4 TCP */
2784         {ETH_RSS_NONFRAG_IPV4_TCP |
2785                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2786                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
2787                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2788         {ETH_RSS_NONFRAG_IPV4_TCP |
2789                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2790                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
2791                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2792         {ETH_RSS_NONFRAG_IPV4_TCP |
2793                 ETH_RSS_L3_SRC_ONLY,
2794                 &hdrs_hint_ipv4_src_gtpu_eh,
2795                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2796         {ETH_RSS_NONFRAG_IPV4_TCP |
2797                 ETH_RSS_L4_SRC_ONLY,
2798                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
2799                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2800         {ETH_RSS_NONFRAG_IPV4_TCP |
2801                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2802                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
2803                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2804         {ETH_RSS_NONFRAG_IPV4_TCP |
2805                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2806                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
2807                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2808         {ETH_RSS_NONFRAG_IPV4_TCP |
2809                 ETH_RSS_L3_DST_ONLY,
2810                 &hdrs_hint_ipv4_dst_gtpu_eh,
2811                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2812         {ETH_RSS_NONFRAG_IPV4_TCP |
2813                 ETH_RSS_L4_DST_ONLY,
2814                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
2815                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2816         {ETH_RSS_NONFRAG_IPV4_TCP,
2817                 &hdrs_hint_ipv4_tcp_gtpu_eh,
2818                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2819         /* IPv6 GTPU EH IPv6 TCP */
2820         {ETH_RSS_NONFRAG_IPV6_TCP |
2821                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2822                 &hdrs_hint_ipv6_src_tcp_src_gtpu_eh,
2823                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2824         {ETH_RSS_NONFRAG_IPV6_TCP |
2825                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2826                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_eh,
2827                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2828         {ETH_RSS_NONFRAG_IPV6_TCP |
2829                 ETH_RSS_L3_SRC_ONLY,
2830                 &hdrs_hint_ipv6_src_gtpu_eh,
2831                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2832         {ETH_RSS_NONFRAG_IPV6_TCP |
2833                 ETH_RSS_L4_SRC_ONLY,
2834                 &hdrs_hint_ipv6_tcp_src_gtpu_eh,
2835                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2836         {ETH_RSS_NONFRAG_IPV6_TCP |
2837                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2838                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_eh,
2839                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2840         {ETH_RSS_NONFRAG_IPV6_TCP |
2841                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2842                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh,
2843                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2844         {ETH_RSS_NONFRAG_IPV6_TCP |
2845                 ETH_RSS_L3_DST_ONLY,
2846                 &hdrs_hint_ipv6_dst_gtpu_eh,
2847                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2848         {ETH_RSS_NONFRAG_IPV6_TCP |
2849                 ETH_RSS_L4_DST_ONLY,
2850                 &hdrs_hint_ipv6_tcp_dst_gtpu_eh,
2851                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2852         {ETH_RSS_NONFRAG_IPV6_TCP,
2853                 &hdrs_hint_ipv6_tcp_gtpu_eh,
2854                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2855         /* GTPU EH UP */
2856         /* IPv4 GTPU EH UP IPv4 */
2857         {ETH_RSS_L3_SRC_ONLY,
2858                 &hdrs_hint_ipv4_src_gtpu_up,
2859                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2860         {ETH_RSS_L3_DST_ONLY,
2861                 &hdrs_hint_ipv4_dst_gtpu_up,
2862                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2863         {ETH_RSS_IPV4 |
2864                 ETH_RSS_L3_SRC_ONLY,
2865                 &hdrs_hint_ipv4_src_gtpu_up,
2866                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2867         {ETH_RSS_IPV4 |
2868                 ETH_RSS_L3_DST_ONLY,
2869                 &hdrs_hint_ipv4_dst_gtpu_up,
2870                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2871         {ETH_RSS_IPV4,
2872                 &hdrs_hint_ipv4_gtpu_up,
2873                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2874         /* IPv4 GTPU EH UP IPv6 */
2875         {ETH_RSS_IPV6 |
2876                 ETH_RSS_L3_SRC_ONLY,
2877                 &hdrs_hint_ipv6_src_gtpu_up,
2878                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2879         {ETH_RSS_IPV6 |
2880                 ETH_RSS_L3_DST_ONLY,
2881                 &hdrs_hint_ipv6_dst_gtpu_up,
2882                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2883         {ETH_RSS_IPV6,
2884                 &hdrs_hint_ipv6_gtpu_up,
2885                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2886         /* IPv6 GTPU EH UP IPv4 */
2887         {ETH_RSS_IPV4 |
2888                 ETH_RSS_L3_SRC_ONLY,
2889                 &hdrs_hint_ipv4_src_gtpu_up,
2890                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2891         {ETH_RSS_IPV4 |
2892                 ETH_RSS_L3_DST_ONLY,
2893                 &hdrs_hint_ipv4_dst_gtpu_up,
2894                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2895         {ETH_RSS_IPV4,
2896                 &hdrs_hint_ipv4_gtpu_up,
2897                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2898         /* IPv6 GTPU EH UP IPv6 */
2899         {ETH_RSS_IPV6 |
2900                 ETH_RSS_L3_SRC_ONLY,
2901                 &hdrs_hint_ipv6_src_gtpu_up,
2902                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2903         {ETH_RSS_IPV6 |
2904                 ETH_RSS_L3_DST_ONLY,
2905                 &hdrs_hint_ipv6_dst_gtpu_up,
2906                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2907         {ETH_RSS_IPV6,
2908                 &hdrs_hint_ipv6_gtpu_up,
2909                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2910         /* IPv4 GTPU EH UP IPv4 UDP */
2911         {ETH_RSS_L3_SRC_ONLY |
2912                 ETH_RSS_L4_SRC_ONLY,
2913                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
2914                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2915         {ETH_RSS_L3_SRC_ONLY |
2916                 ETH_RSS_L4_DST_ONLY,
2917                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
2918                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2919         {ETH_RSS_L3_SRC_ONLY,
2920                 &hdrs_hint_ipv4_src_gtpu_up,
2921                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2922         {ETH_RSS_L4_SRC_ONLY,
2923                 &hdrs_hint_ipv4_udp_src_gtpu_up,
2924                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2925         {ETH_RSS_L3_DST_ONLY |
2926                 ETH_RSS_L4_SRC_ONLY,
2927                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
2928                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2929         {ETH_RSS_L3_DST_ONLY |
2930                 ETH_RSS_L4_DST_ONLY,
2931                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
2932                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2933         {ETH_RSS_L3_DST_ONLY,
2934                 &hdrs_hint_ipv4_dst_gtpu_up,
2935                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2936         {ETH_RSS_L4_DST_ONLY,
2937                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
2938                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2939         {ETH_RSS_NONFRAG_IPV4_UDP |
2940                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2941                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
2942                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2943         {ETH_RSS_NONFRAG_IPV4_UDP |
2944                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2945                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
2946                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2947         {ETH_RSS_NONFRAG_IPV4_UDP |
2948                 ETH_RSS_L3_SRC_ONLY,
2949                 &hdrs_hint_ipv4_src_gtpu_up,
2950                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2951         {ETH_RSS_NONFRAG_IPV4_UDP |
2952                 ETH_RSS_L4_SRC_ONLY,
2953                 &hdrs_hint_ipv4_udp_src_gtpu_up,
2954                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2955         {ETH_RSS_NONFRAG_IPV4_UDP |
2956                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2957                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
2958                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2959         {ETH_RSS_NONFRAG_IPV4_UDP |
2960                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2961                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
2962                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2963         {ETH_RSS_NONFRAG_IPV4_UDP |
2964                 ETH_RSS_L3_DST_ONLY,
2965                 &hdrs_hint_ipv4_dst_gtpu_up,
2966                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2967         {ETH_RSS_NONFRAG_IPV4_UDP |
2968                 ETH_RSS_L4_DST_ONLY,
2969                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
2970                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2971         {ETH_RSS_NONFRAG_IPV4_UDP,
2972                 &hdrs_hint_ipv4_udp_gtpu_up,
2973                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
2974         /* IPv4 GTPU EH UP IPv6 UDP */
2975         {ETH_RSS_NONFRAG_IPV6_UDP |
2976                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2977                 &hdrs_hint_ipv6_src_udp_src_gtpu_up,
2978                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
2979         {ETH_RSS_NONFRAG_IPV6_UDP |
2980                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2981                 &hdrs_hint_ipv6_src_udp_dst_gtpu_up,
2982                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
2983         {ETH_RSS_NONFRAG_IPV6_UDP |
2984                 ETH_RSS_L3_SRC_ONLY,
2985                 &hdrs_hint_ipv6_src_gtpu_up,
2986                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
2987         {ETH_RSS_NONFRAG_IPV6_UDP |
2988                 ETH_RSS_L4_SRC_ONLY,
2989                 &hdrs_hint_ipv6_udp_src_gtpu_up,
2990                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
2991         {ETH_RSS_NONFRAG_IPV6_UDP |
2992                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2993                 &hdrs_hint_ipv6_dst_udp_src_gtpu_up,
2994                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
2995         {ETH_RSS_NONFRAG_IPV6_UDP |
2996                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2997                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_up,
2998                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
2999         {ETH_RSS_NONFRAG_IPV6_UDP |
3000                 ETH_RSS_L3_DST_ONLY,
3001                 &hdrs_hint_ipv6_dst_gtpu_up,
3002                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3003         {ETH_RSS_NONFRAG_IPV6_UDP |
3004                 ETH_RSS_L4_DST_ONLY,
3005                 &hdrs_hint_ipv6_udp_dst_gtpu_up,
3006                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3007         {ETH_RSS_NONFRAG_IPV6_UDP,
3008                 &hdrs_hint_ipv6_udp_gtpu_up,
3009                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3010         /* IPv6 GTPU EH UP IPv4 UDP */
3011         {ETH_RSS_NONFRAG_IPV4_UDP |
3012                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3013                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
3014                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3015         {ETH_RSS_NONFRAG_IPV4_UDP |
3016                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3017                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
3018                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3019         {ETH_RSS_NONFRAG_IPV4_UDP |
3020                 ETH_RSS_L3_SRC_ONLY,
3021                 &hdrs_hint_ipv4_src_gtpu_up,
3022                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3023         {ETH_RSS_NONFRAG_IPV4_UDP |
3024                 ETH_RSS_L4_SRC_ONLY,
3025                 &hdrs_hint_ipv4_udp_src_gtpu_up,
3026                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3027         {ETH_RSS_NONFRAG_IPV4_UDP |
3028                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3029                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
3030                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3031         {ETH_RSS_NONFRAG_IPV4_UDP |
3032                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3033                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
3034                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3035         {ETH_RSS_NONFRAG_IPV4_UDP |
3036                 ETH_RSS_L3_DST_ONLY,
3037                 &hdrs_hint_ipv4_dst_gtpu_up,
3038                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3039         {ETH_RSS_NONFRAG_IPV4_UDP |
3040                 ETH_RSS_L4_DST_ONLY,
3041                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
3042                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3043         {ETH_RSS_NONFRAG_IPV4_UDP,
3044                 &hdrs_hint_ipv4_udp_gtpu_up,
3045                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3046         /* IPv6 GTPU EH UP IPv6 UDP */
3047         {ETH_RSS_NONFRAG_IPV6_UDP |
3048                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3049                 &hdrs_hint_ipv6_src_udp_src_gtpu_up,
3050                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3051         {ETH_RSS_NONFRAG_IPV6_UDP |
3052                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3053                 &hdrs_hint_ipv6_src_udp_dst_gtpu_up,
3054                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3055         {ETH_RSS_NONFRAG_IPV6_UDP |
3056                 ETH_RSS_L3_SRC_ONLY,
3057                 &hdrs_hint_ipv6_src_gtpu_up,
3058                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3059         {ETH_RSS_NONFRAG_IPV6_UDP |
3060                 ETH_RSS_L4_SRC_ONLY,
3061                 &hdrs_hint_ipv6_udp_src_gtpu_up,
3062                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3063         {ETH_RSS_NONFRAG_IPV6_UDP |
3064                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3065                 &hdrs_hint_ipv6_dst_udp_src_gtpu_up,
3066                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3067         {ETH_RSS_NONFRAG_IPV6_UDP |
3068                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3069                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_up,
3070                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3071         {ETH_RSS_NONFRAG_IPV6_UDP |
3072                 ETH_RSS_L3_DST_ONLY,
3073                 &hdrs_hint_ipv6_dst_gtpu_up,
3074                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3075         {ETH_RSS_NONFRAG_IPV6_UDP |
3076                 ETH_RSS_L4_DST_ONLY,
3077                 &hdrs_hint_ipv6_udp_dst_gtpu_up,
3078                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3079         {ETH_RSS_NONFRAG_IPV6_UDP,
3080                 &hdrs_hint_ipv6_udp_gtpu_up,
3081                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3082         /* IPv4 GTPU EH UP IPv4 TCP */
3083         {ETH_RSS_L3_SRC_ONLY |
3084                 ETH_RSS_L4_SRC_ONLY,
3085                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3086                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3087         {ETH_RSS_L3_SRC_ONLY |
3088                 ETH_RSS_L4_DST_ONLY,
3089                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3090                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3091         {ETH_RSS_L3_SRC_ONLY,
3092                 &hdrs_hint_ipv4_src_gtpu_up,
3093                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3094         {ETH_RSS_L4_SRC_ONLY,
3095                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3096                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3097         {ETH_RSS_L3_DST_ONLY |
3098                 ETH_RSS_L4_SRC_ONLY,
3099                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3100                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3101         {ETH_RSS_L3_DST_ONLY |
3102                 ETH_RSS_L4_DST_ONLY,
3103                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3104                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3105         {ETH_RSS_L3_DST_ONLY,
3106                 &hdrs_hint_ipv4_dst_gtpu_up,
3107                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3108         {ETH_RSS_L4_DST_ONLY,
3109                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3110                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3111         {ETH_RSS_NONFRAG_IPV4_TCP |
3112                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3113                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3114                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3115         {ETH_RSS_NONFRAG_IPV4_TCP |
3116                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3117                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3118                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3119         {ETH_RSS_NONFRAG_IPV4_TCP |
3120                 ETH_RSS_L3_SRC_ONLY,
3121                 &hdrs_hint_ipv4_src_gtpu_up,
3122                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3123         {ETH_RSS_NONFRAG_IPV4_TCP |
3124                 ETH_RSS_L4_SRC_ONLY,
3125                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3126                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3127         {ETH_RSS_NONFRAG_IPV4_TCP |
3128                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3129                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3130                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3131         {ETH_RSS_NONFRAG_IPV4_TCP |
3132                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3133                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3134                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3135         {ETH_RSS_NONFRAG_IPV4_TCP |
3136                 ETH_RSS_L3_DST_ONLY,
3137                 &hdrs_hint_ipv4_dst_gtpu_up,
3138                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3139         {ETH_RSS_NONFRAG_IPV4_TCP |
3140                 ETH_RSS_L4_DST_ONLY,
3141                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3142                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3143         {ETH_RSS_NONFRAG_IPV4_TCP,
3144                 &hdrs_hint_ipv4_tcp_gtpu_up,
3145                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3146         /* IPv4 GTPU EH UP IPv6 TCP */
3147         {ETH_RSS_NONFRAG_IPV6_TCP |
3148                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3149                 &hdrs_hint_ipv6_src_tcp_src_gtpu_up,
3150                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3151         {ETH_RSS_NONFRAG_IPV6_TCP |
3152                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3153                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_up,
3154                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3155         {ETH_RSS_NONFRAG_IPV6_TCP |
3156                 ETH_RSS_L3_SRC_ONLY,
3157                 &hdrs_hint_ipv6_src_gtpu_up,
3158                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3159         {ETH_RSS_NONFRAG_IPV6_TCP |
3160                 ETH_RSS_L4_SRC_ONLY,
3161                 &hdrs_hint_ipv6_tcp_src_gtpu_up,
3162                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3163         {ETH_RSS_NONFRAG_IPV6_TCP |
3164                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3165                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_up,
3166                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3167         {ETH_RSS_NONFRAG_IPV6_TCP |
3168                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3169                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_up,
3170                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3171         {ETH_RSS_NONFRAG_IPV6_TCP |
3172                 ETH_RSS_L3_DST_ONLY,
3173                 &hdrs_hint_ipv6_dst_gtpu_up,
3174                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3175         {ETH_RSS_NONFRAG_IPV6_TCP |
3176                 ETH_RSS_L4_DST_ONLY,
3177                 &hdrs_hint_ipv6_tcp_dst_gtpu_up,
3178                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3179         {ETH_RSS_NONFRAG_IPV6_TCP,
3180                 &hdrs_hint_ipv6_tcp_gtpu_up,
3181                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3182         /* IPv6 GTPU EH UP IPv4 TCP */
3183         {ETH_RSS_NONFRAG_IPV4_TCP |
3184                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3185                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3186                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3187         {ETH_RSS_NONFRAG_IPV4_TCP |
3188                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3189                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3190                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3191         {ETH_RSS_NONFRAG_IPV4_TCP |
3192                 ETH_RSS_L3_SRC_ONLY,
3193                 &hdrs_hint_ipv4_src_gtpu_up,
3194                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3195         {ETH_RSS_NONFRAG_IPV4_TCP |
3196                 ETH_RSS_L4_SRC_ONLY,
3197                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3198                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3199         {ETH_RSS_NONFRAG_IPV4_TCP |
3200                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3201                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3202                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3203         {ETH_RSS_NONFRAG_IPV4_TCP |
3204                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3205                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3206                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3207         {ETH_RSS_NONFRAG_IPV4_TCP |
3208                 ETH_RSS_L3_DST_ONLY,
3209                 &hdrs_hint_ipv4_dst_gtpu_up,
3210                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3211         {ETH_RSS_NONFRAG_IPV4_TCP |
3212                 ETH_RSS_L4_DST_ONLY,
3213                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3214                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3215         {ETH_RSS_NONFRAG_IPV4_TCP,
3216                 &hdrs_hint_ipv4_tcp_gtpu_up,
3217                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3218         /* IPv6 GTPU EH UP IPv6 TCP */
3219         {ETH_RSS_NONFRAG_IPV6_TCP |
3220                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3221                 &hdrs_hint_ipv6_src_tcp_src_gtpu_up,
3222                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3223         {ETH_RSS_NONFRAG_IPV6_TCP |
3224                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3225                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_up,
3226                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3227         {ETH_RSS_NONFRAG_IPV6_TCP |
3228                 ETH_RSS_L3_SRC_ONLY,
3229                 &hdrs_hint_ipv6_src_gtpu_up,
3230                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3231         {ETH_RSS_NONFRAG_IPV6_TCP |
3232                 ETH_RSS_L4_SRC_ONLY,
3233                 &hdrs_hint_ipv6_tcp_src_gtpu_up,
3234                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3235         {ETH_RSS_NONFRAG_IPV6_TCP |
3236                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3237                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_up,
3238                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3239         {ETH_RSS_NONFRAG_IPV6_TCP |
3240                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3241                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_up,
3242                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3243         {ETH_RSS_NONFRAG_IPV6_TCP |
3244                 ETH_RSS_L3_DST_ONLY,
3245                 &hdrs_hint_ipv6_dst_gtpu_up,
3246                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3247         {ETH_RSS_NONFRAG_IPV6_TCP |
3248                 ETH_RSS_L4_DST_ONLY,
3249                 &hdrs_hint_ipv6_tcp_dst_gtpu_up,
3250                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3251         {ETH_RSS_NONFRAG_IPV6_TCP,
3252                 &hdrs_hint_ipv6_tcp_gtpu_up,
3253                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3254         /* GTPU EH DWN */
3255         /* IPv4 GTPU EH DWN IPv4 */
3256         {ETH_RSS_L3_SRC_ONLY,
3257                 &hdrs_hint_ipv4_src_gtpu_dwn,
3258                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3259         {ETH_RSS_L3_DST_ONLY,
3260                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3261                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3262         {ETH_RSS_IPV4 |
3263                 ETH_RSS_L3_SRC_ONLY,
3264                 &hdrs_hint_ipv4_src_gtpu_dwn,
3265                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3266         {ETH_RSS_IPV4 |
3267                 ETH_RSS_L3_DST_ONLY,
3268                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3269                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3270         {ETH_RSS_IPV4,
3271                 &hdrs_hint_ipv4_gtpu_dwn,
3272                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3273         /* IPv4 GTPU EH DWN IPv6 */
3274         {ETH_RSS_IPV6 |
3275                 ETH_RSS_L3_SRC_ONLY,
3276                 &hdrs_hint_ipv6_src_gtpu_dwn,
3277                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3278         {ETH_RSS_IPV6 |
3279                 ETH_RSS_L3_DST_ONLY,
3280                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3281                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3282         {ETH_RSS_IPV6,
3283                 &hdrs_hint_ipv6_gtpu_dwn,
3284                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3285         /* IPv6 GTPU EH DWN IPv4 */
3286         {ETH_RSS_IPV4 |
3287                 ETH_RSS_L3_SRC_ONLY,
3288                 &hdrs_hint_ipv4_src_gtpu_dwn,
3289                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3290         {ETH_RSS_IPV4 |
3291                 ETH_RSS_L3_DST_ONLY,
3292                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3293                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3294         {ETH_RSS_IPV4,
3295                 &hdrs_hint_ipv4_gtpu_dwn,
3296                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3297         /* IPv6 GTPU EH DWN IPv6 */
3298         {ETH_RSS_IPV6 |
3299                 ETH_RSS_L3_SRC_ONLY,
3300                 &hdrs_hint_ipv6_src_gtpu_dwn,
3301                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3302         {ETH_RSS_IPV6 |
3303                 ETH_RSS_L3_DST_ONLY,
3304                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3305                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3306         {ETH_RSS_IPV6,
3307                 &hdrs_hint_ipv6_gtpu_dwn,
3308                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3309         /* IPv4 GTPU EH DWN IPv4 UDP */
3310         {ETH_RSS_L3_SRC_ONLY |
3311                 ETH_RSS_L4_SRC_ONLY,
3312                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3313                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3314         {ETH_RSS_L3_SRC_ONLY |
3315                 ETH_RSS_L4_DST_ONLY,
3316                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3317                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3318         {ETH_RSS_L3_SRC_ONLY,
3319                 &hdrs_hint_ipv4_src_gtpu_dwn,
3320                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3321         {ETH_RSS_L4_SRC_ONLY,
3322                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3323                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3324         {ETH_RSS_L3_DST_ONLY |
3325                 ETH_RSS_L4_SRC_ONLY,
3326                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3327                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3328         {ETH_RSS_L3_DST_ONLY |
3329                 ETH_RSS_L4_DST_ONLY,
3330                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3331                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3332         {ETH_RSS_L3_DST_ONLY,
3333                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3334                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3335         {ETH_RSS_L4_DST_ONLY,
3336                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3337                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3338         {ETH_RSS_NONFRAG_IPV4_UDP |
3339                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3340                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3341                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3342         {ETH_RSS_NONFRAG_IPV4_UDP |
3343                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3344                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3345                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3346         {ETH_RSS_NONFRAG_IPV4_UDP |
3347                 ETH_RSS_L3_SRC_ONLY,
3348                 &hdrs_hint_ipv4_src_gtpu_dwn,
3349                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3350         {ETH_RSS_NONFRAG_IPV4_UDP |
3351                 ETH_RSS_L4_SRC_ONLY,
3352                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3353                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3354         {ETH_RSS_NONFRAG_IPV4_UDP |
3355                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3356                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3357                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3358         {ETH_RSS_NONFRAG_IPV4_UDP |
3359                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3360                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3361                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3362         {ETH_RSS_NONFRAG_IPV4_UDP |
3363                 ETH_RSS_L3_DST_ONLY,
3364                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3365                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3366         {ETH_RSS_NONFRAG_IPV4_UDP |
3367                 ETH_RSS_L4_DST_ONLY,
3368                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3369                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3370         {ETH_RSS_NONFRAG_IPV4_UDP,
3371                 &hdrs_hint_ipv4_udp_gtpu_dwn,
3372                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3373         /* IPv4 GTPU EH DWN IPv6 UDP */
3374         {ETH_RSS_NONFRAG_IPV6_UDP |
3375                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3376                 &hdrs_hint_ipv6_src_udp_src_gtpu_dwn,
3377                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3378         {ETH_RSS_NONFRAG_IPV6_UDP |
3379                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3380                 &hdrs_hint_ipv6_src_udp_dst_gtpu_dwn,
3381                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3382         {ETH_RSS_NONFRAG_IPV6_UDP |
3383                 ETH_RSS_L3_SRC_ONLY,
3384                 &hdrs_hint_ipv6_src_gtpu_dwn,
3385                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3386         {ETH_RSS_NONFRAG_IPV6_UDP |
3387                 ETH_RSS_L4_SRC_ONLY,
3388                 &hdrs_hint_ipv6_udp_src_gtpu_dwn,
3389                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3390         {ETH_RSS_NONFRAG_IPV6_UDP |
3391                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3392                 &hdrs_hint_ipv6_dst_udp_src_gtpu_dwn,
3393                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3394         {ETH_RSS_NONFRAG_IPV6_UDP |
3395                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3396                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn,
3397                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3398         {ETH_RSS_NONFRAG_IPV6_UDP |
3399                 ETH_RSS_L3_DST_ONLY,
3400                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3401                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3402         {ETH_RSS_NONFRAG_IPV6_UDP |
3403                 ETH_RSS_L4_DST_ONLY,
3404                 &hdrs_hint_ipv6_udp_dst_gtpu_dwn,
3405                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3406         {ETH_RSS_NONFRAG_IPV6_UDP,
3407                 &hdrs_hint_ipv6_udp_gtpu_dwn,
3408                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3409         /* IPv6 GTPU EH DWN IPv4 UDP */
3410         {ETH_RSS_NONFRAG_IPV4_UDP |
3411                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3412                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3413                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3414         {ETH_RSS_NONFRAG_IPV4_UDP |
3415                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3416                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3417                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3418         {ETH_RSS_NONFRAG_IPV4_UDP |
3419                 ETH_RSS_L3_SRC_ONLY,
3420                 &hdrs_hint_ipv4_src_gtpu_dwn,
3421                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3422         {ETH_RSS_NONFRAG_IPV4_UDP |
3423                 ETH_RSS_L4_SRC_ONLY,
3424                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3425                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3426         {ETH_RSS_NONFRAG_IPV4_UDP |
3427                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3428                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3429                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3430         {ETH_RSS_NONFRAG_IPV4_UDP |
3431                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3432                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3433                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3434         {ETH_RSS_NONFRAG_IPV4_UDP |
3435                 ETH_RSS_L3_DST_ONLY,
3436                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3437                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3438         {ETH_RSS_NONFRAG_IPV4_UDP |
3439                 ETH_RSS_L4_DST_ONLY,
3440                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3441                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3442         {ETH_RSS_NONFRAG_IPV4_UDP,
3443                 &hdrs_hint_ipv4_udp_gtpu_dwn,
3444                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3445         /* IPv6 GTPU EH DWN IPv6 UDP */
3446         {ETH_RSS_NONFRAG_IPV6_UDP |
3447                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3448                 &hdrs_hint_ipv6_src_udp_src_gtpu_dwn,
3449                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3450         {ETH_RSS_NONFRAG_IPV6_UDP |
3451                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3452                 &hdrs_hint_ipv6_src_udp_dst_gtpu_dwn,
3453                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3454         {ETH_RSS_NONFRAG_IPV6_UDP |
3455                 ETH_RSS_L3_SRC_ONLY,
3456                 &hdrs_hint_ipv6_src_gtpu_dwn,
3457                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3458         {ETH_RSS_NONFRAG_IPV6_UDP |
3459                 ETH_RSS_L4_SRC_ONLY,
3460                 &hdrs_hint_ipv6_udp_src_gtpu_dwn,
3461                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3462         {ETH_RSS_NONFRAG_IPV6_UDP |
3463                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3464                 &hdrs_hint_ipv6_dst_udp_src_gtpu_dwn,
3465                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3466         {ETH_RSS_NONFRAG_IPV6_UDP |
3467                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3468                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn,
3469                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3470         {ETH_RSS_NONFRAG_IPV6_UDP |
3471                 ETH_RSS_L3_DST_ONLY,
3472                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3473                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3474         {ETH_RSS_NONFRAG_IPV6_UDP |
3475                 ETH_RSS_L4_DST_ONLY,
3476                 &hdrs_hint_ipv6_udp_dst_gtpu_dwn,
3477                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3478         {ETH_RSS_NONFRAG_IPV6_UDP,
3479                 &hdrs_hint_ipv6_udp_gtpu_dwn,
3480                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3481         /* IPv4 GTPU EH DWN IPv4 TCP */
3482         {ETH_RSS_L3_SRC_ONLY |
3483                 ETH_RSS_L4_SRC_ONLY,
3484                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3485                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3486         {ETH_RSS_L3_SRC_ONLY |
3487                 ETH_RSS_L4_DST_ONLY,
3488                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3489                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3490         {ETH_RSS_L3_SRC_ONLY,
3491                 &hdrs_hint_ipv4_src_gtpu_dwn,
3492                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3493         {ETH_RSS_L4_SRC_ONLY,
3494                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3495                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3496         {ETH_RSS_L3_DST_ONLY |
3497                 ETH_RSS_L4_SRC_ONLY,
3498                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3499                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3500         {ETH_RSS_L3_DST_ONLY |
3501                 ETH_RSS_L4_DST_ONLY,
3502                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3503                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3504         {ETH_RSS_L3_DST_ONLY,
3505                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3506                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3507         {ETH_RSS_L4_DST_ONLY,
3508                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3509                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3510         {ETH_RSS_NONFRAG_IPV4_TCP |
3511                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3512                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3513                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3514         {ETH_RSS_NONFRAG_IPV4_TCP |
3515                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3516                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3517                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3518         {ETH_RSS_NONFRAG_IPV4_TCP |
3519                 ETH_RSS_L3_SRC_ONLY,
3520                 &hdrs_hint_ipv4_src_gtpu_dwn,
3521                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3522         {ETH_RSS_NONFRAG_IPV4_TCP |
3523                 ETH_RSS_L4_SRC_ONLY,
3524                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3525                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3526         {ETH_RSS_NONFRAG_IPV4_TCP |
3527                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3528                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3529                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3530         {ETH_RSS_NONFRAG_IPV4_TCP |
3531                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3532                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3533                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3534         {ETH_RSS_NONFRAG_IPV4_TCP |
3535                 ETH_RSS_L3_DST_ONLY,
3536                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3537                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3538         {ETH_RSS_NONFRAG_IPV4_TCP |
3539                 ETH_RSS_L4_DST_ONLY,
3540                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3541                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3542         {ETH_RSS_NONFRAG_IPV4_TCP,
3543                 &hdrs_hint_ipv4_tcp_gtpu_dwn,
3544                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3545         /* IPv4 GTPU EH DWN IPv6 TCP */
3546         {ETH_RSS_NONFRAG_IPV6_TCP |
3547                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3548                 &hdrs_hint_ipv6_src_tcp_src_gtpu_dwn,
3549                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3550         {ETH_RSS_NONFRAG_IPV6_TCP |
3551                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3552                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn,
3553                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3554         {ETH_RSS_NONFRAG_IPV6_TCP |
3555                 ETH_RSS_L3_SRC_ONLY,
3556                 &hdrs_hint_ipv6_src_gtpu_dwn,
3557                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3558         {ETH_RSS_NONFRAG_IPV6_TCP |
3559                 ETH_RSS_L4_SRC_ONLY,
3560                 &hdrs_hint_ipv6_tcp_src_gtpu_dwn,
3561                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3562         {ETH_RSS_NONFRAG_IPV6_TCP |
3563                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3564                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn,
3565                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3566         {ETH_RSS_NONFRAG_IPV6_TCP |
3567                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3568                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn,
3569                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3570         {ETH_RSS_NONFRAG_IPV6_TCP |
3571                 ETH_RSS_L3_DST_ONLY,
3572                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3573                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3574         {ETH_RSS_NONFRAG_IPV6_TCP |
3575                 ETH_RSS_L4_DST_ONLY,
3576                 &hdrs_hint_ipv6_tcp_dst_gtpu_dwn,
3577                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3578         {ETH_RSS_NONFRAG_IPV6_TCP,
3579                 &hdrs_hint_ipv6_tcp_gtpu_dwn,
3580                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3581         /* IPv6 GTPU EH DWN IPv4 TCP */
3582         {ETH_RSS_NONFRAG_IPV4_TCP |
3583                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3584                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3585                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3586         {ETH_RSS_NONFRAG_IPV4_TCP |
3587                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3588                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3589                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3590         {ETH_RSS_NONFRAG_IPV4_TCP |
3591                 ETH_RSS_L3_SRC_ONLY,
3592                 &hdrs_hint_ipv4_src_gtpu_dwn,
3593                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3594         {ETH_RSS_NONFRAG_IPV4_TCP |
3595                 ETH_RSS_L4_SRC_ONLY,
3596                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3597                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3598         {ETH_RSS_NONFRAG_IPV4_TCP |
3599                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3600                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3601                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3602         {ETH_RSS_NONFRAG_IPV4_TCP |
3603                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3604                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3605                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3606         {ETH_RSS_NONFRAG_IPV4_TCP |
3607                 ETH_RSS_L3_DST_ONLY,
3608                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3609                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3610         {ETH_RSS_NONFRAG_IPV4_TCP |
3611                 ETH_RSS_L4_DST_ONLY,
3612                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3613                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3614         {ETH_RSS_NONFRAG_IPV4_TCP,
3615                 &hdrs_hint_ipv4_tcp_gtpu_dwn,
3616                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3617         /* IPv6 GTPU EH DWN IPv6 TCP */
3618         {ETH_RSS_NONFRAG_IPV6_TCP |
3619                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3620                 &hdrs_hint_ipv6_src_tcp_src_gtpu_dwn,
3621                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3622         {ETH_RSS_NONFRAG_IPV6_TCP |
3623                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3624                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn,
3625                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3626         {ETH_RSS_NONFRAG_IPV6_TCP |
3627                 ETH_RSS_L3_SRC_ONLY,
3628                 &hdrs_hint_ipv6_src_gtpu_dwn,
3629                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3630         {ETH_RSS_NONFRAG_IPV6_TCP |
3631                 ETH_RSS_L4_SRC_ONLY,
3632                 &hdrs_hint_ipv6_tcp_src_gtpu_dwn,
3633                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3634         {ETH_RSS_NONFRAG_IPV6_TCP |
3635                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3636                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn,
3637                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3638         {ETH_RSS_NONFRAG_IPV6_TCP |
3639                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3640                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn,
3641                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3642         {ETH_RSS_NONFRAG_IPV6_TCP |
3643                 ETH_RSS_L3_DST_ONLY,
3644                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3645                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3646         {ETH_RSS_NONFRAG_IPV6_TCP |
3647                 ETH_RSS_L4_DST_ONLY,
3648                 &hdrs_hint_ipv6_tcp_dst_gtpu_dwn,
3649                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3650         {ETH_RSS_NONFRAG_IPV6_TCP,
3651                 &hdrs_hint_ipv6_tcp_gtpu_dwn,
3652                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3653 };
3654
3655 struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = {
3656         &hdrs_hint_ipv4,
3657         &hdrs_hint_ipv4_udp,
3658         &hdrs_hint_ipv4_tcp,
3659         &hdrs_hint_ipv4_sctp,
3660         &hdrs_hint_ipv6,
3661         &hdrs_hint_ipv6_udp,
3662         &hdrs_hint_ipv6_tcp,
3663         &hdrs_hint_ipv6_sctp,
3664 };
3665
3666 static struct iavf_flow_engine iavf_hash_engine = {
3667         .init = iavf_hash_init,
3668         .create = iavf_hash_create,
3669         .destroy = iavf_hash_destroy,
3670         .uninit = iavf_hash_uninit,
3671         .free = iavf_hash_free,
3672         .type = IAVF_FLOW_ENGINE_HASH,
3673 };
3674
3675 /* Register parser for comms package. */
3676 static struct iavf_flow_parser iavf_hash_parser = {
3677         .engine = &iavf_hash_engine,
3678         .array = iavf_hash_pattern_list,
3679         .array_len = RTE_DIM(iavf_hash_pattern_list),
3680         .parse_pattern_action = iavf_hash_parse_pattern_action,
3681         .stage = IAVF_FLOW_STAGE_RSS,
3682 };
3683
3684 static int
3685 iavf_hash_default_set(struct iavf_adapter *ad, bool add)
3686 {
3687         struct virtchnl_rss_cfg *rss_cfg;
3688         uint16_t i;
3689         int ret;
3690
3691         rss_cfg = rte_zmalloc("iavf rss rule",
3692                               sizeof(struct virtchnl_rss_cfg), 0);
3693         if (!rss_cfg)
3694                 return -ENOMEM;
3695
3696         for (i = 0; i < RTE_DIM(iavf_hash_default_hdrs); i++) {
3697                 rss_cfg->proto_hdrs = *iavf_hash_default_hdrs[i];
3698                 rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
3699
3700                 ret = iavf_add_del_rss_cfg(ad, rss_cfg, add);
3701                 if (ret) {
3702                         PMD_DRV_LOG(ERR, "fail to %s RSS configure",
3703                                     add ? "add" : "delete");
3704                         rte_free(rss_cfg);
3705                         return ret;
3706                 }
3707         }
3708
3709         return ret;
3710 }
3711
3712 RTE_INIT(iavf_hash_engine_init)
3713 {
3714         struct iavf_flow_engine *engine = &iavf_hash_engine;
3715
3716         iavf_register_flow_engine(engine);
3717 }
3718
3719 static int
3720 iavf_hash_init(struct iavf_adapter *ad)
3721 {
3722         struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad);
3723         struct iavf_flow_parser *parser;
3724         int ret;
3725
3726         if (!vf->vf_res)
3727                 return -EINVAL;
3728
3729         if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF))
3730                 return -ENOTSUP;
3731
3732         parser = &iavf_hash_parser;
3733
3734         ret = iavf_register_parser(parser, ad);
3735         if (ret) {
3736                 PMD_DRV_LOG(ERR, "fail to register hash parser");
3737                 return ret;
3738         }
3739
3740         ret = iavf_hash_default_set(ad, true);
3741         if (ret) {
3742                 PMD_DRV_LOG(ERR, "fail to set default RSS");
3743                 iavf_unregister_parser(parser, ad);
3744         }
3745
3746         return ret;
3747 }
3748
3749 static int
3750 iavf_hash_parse_pattern(struct iavf_pattern_match_item *pattern_match_item,
3751                         const struct rte_flow_item pattern[], uint64_t *phint,
3752                         struct rte_flow_error *error)
3753 {
3754         const struct rte_flow_item *item = pattern;
3755         const struct rte_flow_item_gtp_psc *psc;
3756         u8 outer_ipv6 = 0;
3757
3758         for (item = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) {
3759                 if (item->last) {
3760                         rte_flow_error_set(error, EINVAL,
3761                                            RTE_FLOW_ERROR_TYPE_ITEM, item,
3762                                            "Not support range");
3763                         return -rte_errno;
3764                 }
3765
3766                 switch (item->type) {
3767                 case RTE_FLOW_ITEM_TYPE_IPV6:
3768                         outer_ipv6 = 1;
3769                         break;
3770                 case RTE_FLOW_ITEM_TYPE_GTPU:
3771                         *phint |= (outer_ipv6) ?
3772                                 IAVF_PHINT_IPV6_GTPU_IP :
3773                                 IAVF_PHINT_IPV4_GTPU_IP;
3774                         break;
3775                 case RTE_FLOW_ITEM_TYPE_GTP_PSC:
3776                         psc = item->spec;
3777                         *phint &= (outer_ipv6) ?
3778                                 ~IAVF_PHINT_IPV6_GTPU_IP :
3779                                 ~IAVF_PHINT_IPV4_GTPU_IP;
3780                         if (!psc)
3781                                 *phint |= (outer_ipv6) ?
3782                                         IAVF_PHINT_IPV6_GTPU_EH :
3783                                         IAVF_PHINT_IPV4_GTPU_EH;
3784                         else if (psc->pdu_type == IAVF_GTPU_EH_UPLINK)
3785                                 *phint |= (outer_ipv6) ?
3786                                         IAVF_PHINT_IPV6_GTPU_EH_UPLINK :
3787                                         IAVF_PHINT_IPV4_GTPU_EH_UPLINK;
3788                         else if (psc->pdu_type == IAVF_GTPU_EH_DWNLINK)
3789                                 *phint |= (outer_ipv6) ?
3790                                         IAVF_PHINT_IPV6_GTPU_EH_DWNLINK :
3791                                         IAVF_PHINT_IPV4_GTPU_EH_DWNLINK;
3792                         break;
3793                 default:
3794                         break;
3795                 }
3796         }
3797
3798         /* update and restore pattern hint */
3799         *phint |= ((struct iavf_pattern_match_type *)
3800                                 (pattern_match_item->meta))->pattern_hint;
3801
3802         return 0;
3803 }
3804
3805 static int
3806 iavf_hash_parse_action(const struct rte_flow_action actions[],
3807                        uint64_t pattern_hint, void **meta,
3808                        struct rte_flow_error *error)
3809 {
3810         struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)*meta;
3811         struct iavf_hash_match_type *hash_map_list;
3812         enum rte_flow_action_type action_type;
3813         const struct rte_flow_action_rss *rss;
3814         const struct rte_flow_action *action;
3815         uint32_t mlist_len;
3816         bool item_found = false;
3817         uint64_t rss_type;
3818         uint16_t i;
3819
3820         /* Supported action is RSS. */
3821         for (action = actions; action->type !=
3822                 RTE_FLOW_ACTION_TYPE_END; action++) {
3823                 action_type = action->type;
3824                 switch (action_type) {
3825                 case RTE_FLOW_ACTION_TYPE_RSS:
3826                         rss = action->conf;
3827                         rss_type = rss->types;
3828
3829                         if (rss->func ==
3830                             RTE_ETH_HASH_FUNCTION_SIMPLE_XOR){
3831                                 rss_meta->rss_algorithm =
3832                                         VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC;
3833                         } else if (rss->func ==
3834                                    RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) {
3835                                 rss_meta->rss_algorithm =
3836                                         VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC;
3837                         } else {
3838                                 rss_meta->rss_algorithm =
3839                                         VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
3840                         }
3841
3842                         if (rss->level)
3843                                 return rte_flow_error_set(error, ENOTSUP,
3844                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3845                                         "a nonzero RSS encapsulation level is not supported");
3846
3847                         if (rss->key_len)
3848                                 return rte_flow_error_set(error, ENOTSUP,
3849                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3850                                         "a nonzero RSS key_len is not supported");
3851
3852                         if (rss->queue_num)
3853                                 return rte_flow_error_set(error, ENOTSUP,
3854                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3855                                         "a non-NULL RSS queue is not supported");
3856
3857                         /**
3858                          * Check simultaneous use of SRC_ONLY and DST_ONLY
3859                          * of the same level.
3860                          */
3861                         rss_type = rte_eth_rss_hf_refine(rss_type);
3862
3863                         if ((pattern_hint & IAVF_PHINT_IPV4_GTPU_IP) ||
3864                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH) ||
3865                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_UPLINK) ||
3866                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_DWNLINK) ||
3867                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_IP) ||
3868                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH) ||
3869                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH_UPLINK) ||
3870                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH_DWNLINK)) {
3871                                 hash_map_list = iavf_gtpu_hash_map_list;
3872                                 mlist_len = RTE_DIM(iavf_gtpu_hash_map_list);
3873                         } else {
3874                                 hash_map_list = iavf_hash_map_list;
3875                                 mlist_len = RTE_DIM(iavf_hash_map_list);
3876                         }
3877
3878                         /* Find matched proto hdrs according to hash type. */
3879                         for (i = 0; i < mlist_len; i++) {
3880                                 struct iavf_hash_match_type *ht_map =
3881                                         &hash_map_list[i];
3882                                 if (rss_type == ht_map->hash_type &&
3883                                     pattern_hint == ht_map->pattern_hint) {
3884                                         rss_meta->proto_hdrs =
3885                                                 ht_map->proto_hdrs;
3886                                         item_found = true;
3887                                         break;
3888                                 }
3889                         }
3890
3891                         if (!item_found)
3892                                 return rte_flow_error_set(error, ENOTSUP,
3893                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3894                                         "Not supported flow");
3895                         break;
3896
3897                 case RTE_FLOW_ACTION_TYPE_END:
3898                         break;
3899
3900                 default:
3901                         rte_flow_error_set(error, EINVAL,
3902                                            RTE_FLOW_ERROR_TYPE_ACTION, action,
3903                                            "Invalid action.");
3904                         return -rte_errno;
3905                 }
3906         }
3907
3908         return 0;
3909 }
3910
3911 static int
3912 iavf_hash_parse_pattern_action(__rte_unused struct iavf_adapter *ad,
3913                                struct iavf_pattern_match_item *array,
3914                                uint32_t array_len,
3915                                const struct rte_flow_item pattern[],
3916                                const struct rte_flow_action actions[],
3917                                void **meta,
3918                                struct rte_flow_error *error)
3919 {
3920         struct iavf_pattern_match_item *pattern_match_item;
3921         struct iavf_rss_meta *rss_meta_ptr;
3922         uint64_t phint = IAVF_PHINT_NONE;
3923         int ret = 0;
3924
3925         rss_meta_ptr = rte_zmalloc(NULL, sizeof(*rss_meta_ptr), 0);
3926         if (!rss_meta_ptr) {
3927                 rte_flow_error_set(error, EINVAL,
3928                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
3929                                    "No memory for rss_meta_ptr");
3930                 return -ENOMEM;
3931         }
3932
3933         /* Check rss supported pattern and find matched pattern. */
3934         pattern_match_item =
3935                 iavf_search_pattern_match_item(pattern, array, array_len,
3936                                                error);
3937         if (!pattern_match_item) {
3938                 ret = -rte_errno;
3939                 goto error;
3940         }
3941
3942         ret = iavf_hash_parse_pattern(pattern_match_item, pattern, &phint,
3943                                       error);
3944         if (ret)
3945                 goto error;
3946
3947         ret = iavf_hash_parse_action(actions, phint,
3948                                      (void **)&rss_meta_ptr, error);
3949
3950 error:
3951         if (!ret && meta)
3952                 *meta = rss_meta_ptr;
3953         else
3954                 rte_free(rss_meta_ptr);
3955
3956         rte_free(pattern_match_item);
3957
3958         return ret;
3959 }
3960
3961 static int
3962 iavf_hash_create(__rte_unused struct iavf_adapter *ad,
3963                  __rte_unused struct rte_flow *flow, void *meta,
3964                  __rte_unused struct rte_flow_error *error)
3965 {
3966         struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)meta;
3967         struct virtchnl_rss_cfg *rss_cfg;
3968         int ret = 0;
3969
3970         rss_cfg = rte_zmalloc("iavf rss rule",
3971                               sizeof(struct virtchnl_rss_cfg), 0);
3972         if (!rss_cfg) {
3973                 rte_flow_error_set(error, EINVAL,
3974                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
3975                                    "No memory for rss rule");
3976                 return -ENOMEM;
3977         }
3978
3979         rss_cfg->proto_hdrs = *rss_meta->proto_hdrs;
3980         rss_cfg->rss_algorithm = rss_meta->rss_algorithm;
3981
3982         ret = iavf_add_del_rss_cfg(ad, rss_cfg, true);
3983         if (!ret) {
3984                 flow->rule = rss_cfg;
3985         } else {
3986                 PMD_DRV_LOG(ERR, "fail to add RSS configure");
3987                 rte_flow_error_set(error, -ret,
3988                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
3989                                    "Failed to add rss rule.");
3990                 rte_free(rss_cfg);
3991                 return -rte_errno;
3992         }
3993
3994         rte_free(meta);
3995
3996         return ret;
3997 }
3998
3999 static int
4000 iavf_hash_destroy(__rte_unused struct iavf_adapter *ad,
4001                   struct rte_flow *flow,
4002                   __rte_unused struct rte_flow_error *error)
4003 {
4004         struct virtchnl_rss_cfg *rss_cfg;
4005         int ret = 0;
4006
4007         rss_cfg = (struct virtchnl_rss_cfg *)flow->rule;
4008
4009         ret = iavf_add_del_rss_cfg(ad, rss_cfg, false);
4010         if (ret) {
4011                 PMD_DRV_LOG(ERR, "fail to del RSS configure");
4012                 rte_flow_error_set(error, -ret,
4013                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
4014                                    "Failed to delete rss rule.");
4015                 return -rte_errno;
4016         }
4017         return ret;
4018 }
4019
4020 static void
4021 iavf_hash_uninit(struct iavf_adapter *ad)
4022 {
4023         if (iavf_hash_default_set(ad, false))
4024                 PMD_DRV_LOG(ERR, "fail to delete default RSS");
4025
4026         iavf_unregister_parser(&iavf_hash_parser, ad);
4027 }
4028
4029 static void
4030 iavf_hash_free(struct rte_flow *flow)
4031 {
4032         rte_free(flow->rule);
4033 }