dfc682298426ab383dc5e3b6ee5f1eb7890f084d
[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 = {
599         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
600         proto_hint_udp_only }
601 };
602
603 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp = {
604         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
605         proto_hint_udp_only }
606 };
607
608 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_only = {
609         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
610         proto_hint_udp_only }
611 };
612
613 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp = {
614         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
615         proto_hint_tcp_only }
616 };
617
618 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp = {
619         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
620         proto_hint_tcp_only }
621 };
622
623 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_only = {
624         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
625         proto_hint_tcp_only }
626 };
627
628 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_sctp = {
629         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
630         proto_hint_sctp_only }
631 };
632
633 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_sctp = {
634         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
635         proto_hint_sctp_only }
636 };
637
638 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp_only = {
639         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
640         proto_hint_sctp_only }
641 };
642
643 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_port = {
644         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
645         proto_hint_udp_src_port }
646 };
647
648 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_port = {
649         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
650         proto_hint_udp_dst_port }
651 };
652
653 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_port = {
654         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
655         proto_hint_udp_src_port }
656 };
657
658 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_port = {
659         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
660         proto_hint_udp_dst_port }
661 };
662
663 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_port = {
664         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
665         proto_hint_udp_src_port }
666 };
667
668 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_port = {
669         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
670         proto_hint_udp_dst_port }
671 };
672
673 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp = {
674         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
675         proto_hint_udp }
676 };
677
678 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_port = {
679         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
680         proto_hint_tcp_src_port }
681 };
682
683 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_port = {
684         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src_prot,
685         proto_hint_tcp_dst_port }
686 };
687
688 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_port = {
689         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
690         proto_hint_tcp_src_port }
691 };
692
693 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_port = {
694         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst_prot,
695         proto_hint_tcp_dst_port }
696 };
697
698 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_port = {
699         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
700         proto_hint_tcp_src_port }
701 };
702
703 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_port = {
704         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only_prot,
705         proto_hint_tcp_dst_port }
706 };
707
708 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp = {
709         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_prot,
710         proto_hint_tcp }
711 };
712
713 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_sctp_src_port = {
714         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src,
715         proto_hint_sctp_src_port }
716 };
717
718 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_sctp_dst_port = {
719         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_src,
720         proto_hint_sctp_dst_port }
721 };
722
723 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_sctp_src_port = {
724         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst,
725         proto_hint_sctp_src_port }
726 };
727
728 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_sctp_dst_port = {
729         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_dst,
730         proto_hint_sctp_dst_port }
731 };
732
733 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp_src_port = {
734         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
735         proto_hint_sctp_src_port }
736 };
737
738 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp_dst_port = {
739         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
740         proto_hint_sctp_dst_port }
741 };
742
743 struct virtchnl_proto_hdrs hdrs_hint_ipv4_sctp = {
744         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4,
745         proto_hint_sctp }
746 };
747
748 struct virtchnl_proto_hdrs hdrs_hint_ipv4_esp = {
749         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
750         proto_hint_esp }
751 };
752
753 struct virtchnl_proto_hdrs hdrs_hint_ipv4_ah = {
754         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
755         proto_hint_ah }
756 };
757
758 struct virtchnl_proto_hdrs hdrs_hint_ipv4_l2tpv3 = {
759         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
760         proto_hint_l2tpv3 }
761 };
762
763 struct virtchnl_proto_hdrs hdrs_hint_ipv4_pfcp = {
764         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv4_only,
765         proto_hint_pfcp }
766 };
767
768 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_esp = {
769         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_ipv4_only,
770         proto_hint_udp_only, proto_hint_esp }
771 };
772
773 /* IPv4 GTPU IP */
774
775 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_ip = {
776         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
777         proto_hint_ipv4_src }
778 };
779
780 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_ip = {
781         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
782         proto_hint_ipv4_dst }
783 };
784
785 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_ip = {
786         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
787         proto_hint_ipv4 }
788 };
789
790 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_gtpu_ip = {
791         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
792         proto_hint_ipv4_src_prot, proto_hint_udp_only }
793 };
794
795 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_gtpu_ip = {
796         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
797         proto_hint_ipv4_dst_prot, proto_hint_udp_only }
798 };
799
800 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_udp_ip = {
801         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
802         proto_hint_ipv4_prot, proto_hint_udp_only }
803 };
804
805 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_gtpu_ip = {
806         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
807         proto_hint_ipv4_src_prot, proto_hint_tcp_only }
808 };
809
810 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_gtpu_ip = {
811         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
812         proto_hint_ipv4_dst_prot, proto_hint_tcp_only }
813 };
814
815 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_tcp_ip = {
816         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
817         proto_hint_ipv4_prot, proto_hint_tcp_only }
818 };
819
820 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_ip = {
821         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
822         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
823 };
824
825 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_ip = {
826         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
827         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
828 };
829
830 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_ip = {
831         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
832         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
833 };
834
835 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_ip = {
836         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
837         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
838 };
839
840 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_ip = {
841         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
842         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
843 };
844
845 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_ip = {
846         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
847         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
848 };
849
850 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_ip = {
851         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
852         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
853 };
854
855 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_ip = {
856         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
857         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
858 };
859
860 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_ip = {
861         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
862         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
863 };
864
865 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_ip = {
866         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
867         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
868 };
869
870 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_ip = {
871         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
872         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
873 };
874
875 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip = {
876         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
877         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
878 };
879
880 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_ip = {
881         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
882         proto_hint_ipv4_prot, proto_hint_udp}
883 };
884
885 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_ip = {
886         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
887         proto_hint_ipv4_prot, proto_hint_tcp}
888 };
889
890 struct virtchnl_proto_hdrs hdrs_hint_teid_gtpu_ip = {
891         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_teid}
892 };
893
894 /* IPv6 GTPU IP */
895
896 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_ip = {
897         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
898                 proto_hint_ipv6_src }
899 };
900
901 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_ip = {
902         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
903                 proto_hint_ipv6_dst }
904 };
905
906 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_ip = {
907         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
908                 proto_hint_ipv6 }
909 };
910
911 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_gtpu_ip = {
912         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
913         proto_hint_ipv6_src_prot, proto_hint_udp_only }
914 };
915
916 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_gtpu_ip = {
917         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
918         proto_hint_ipv6_dst_prot, proto_hint_udp_only }
919 };
920
921 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_udp_ip = {
922         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
923         proto_hint_ipv6_prot, proto_hint_udp_only }
924 };
925
926 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_gtpu_ip = {
927         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
928         proto_hint_ipv6_src_prot, proto_hint_tcp_only }
929 };
930
931 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_gtpu_ip = {
932         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
933         proto_hint_ipv6_dst_prot, proto_hint_tcp_only }
934 };
935
936 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_tcp_ip = {
937         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
938         proto_hint_ipv6_prot, proto_hint_tcp_only }
939 };
940
941 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_ip = {
942         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
943         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
944 };
945
946 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_ip = {
947         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
948         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
949 };
950
951 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_ip = {
952         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
953         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
954 };
955
956 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_ip = {
957         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
958         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
959 };
960
961 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_ip = {
962         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
963         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
964 };
965
966 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_ip = {
967         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
968         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
969 };
970
971 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_ip = {
972         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
973         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
974 };
975
976 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_ip = {
977         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
978         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
979 };
980
981 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_ip = {
982         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
983         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
984 };
985
986 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_ip = {
987         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
988         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
989 };
990
991 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_ip = {
992         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
993         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
994 };
995
996 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip = {
997         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
998         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
999 };
1000
1001 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_ip = {
1002         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
1003         proto_hint_ipv6_prot, proto_hint_udp}
1004 };
1005
1006 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_ip = {
1007         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
1008         proto_hint_ipv6_prot, proto_hint_tcp}
1009 };
1010
1011 /* IPv4 GTPU EH */
1012
1013 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_gtpu_eh = {
1014         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1015         proto_hint_ipv4_src_prot, proto_hint_udp_only }
1016 };
1017
1018 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_gtpu_eh = {
1019         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1020         proto_hint_ipv4_dst_prot, proto_hint_udp_only }
1021 };
1022
1023 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_udp_eh = {
1024         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1025         proto_hint_ipv4_prot, proto_hint_udp_only }
1026 };
1027
1028 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_gtpu_eh = {
1029         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1030         proto_hint_ipv4_src_prot, proto_hint_tcp_only }
1031 };
1032
1033 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_gtpu_eh = {
1034         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1035         proto_hint_ipv4_dst_prot, proto_hint_tcp_only }
1036 };
1037
1038 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_tcp_eh = {
1039         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1040         proto_hint_ipv4_prot, proto_hint_tcp_only }
1041 };
1042
1043 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_eh = {
1044         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1045         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
1046 };
1047
1048 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_eh = {
1049         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1050         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
1051 };
1052
1053 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_eh = {
1054         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1055         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
1056 };
1057
1058 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_eh = {
1059         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1060         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
1061 };
1062
1063 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_eh = {
1064         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1065         proto_hint_ipv4_src }
1066 };
1067
1068 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_eh = {
1069         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1070         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
1071 };
1072
1073 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_eh = {
1074         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1075         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
1076 };
1077
1078 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_eh = {
1079         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1080         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
1081 };
1082
1083 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_eh = {
1084         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1085         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
1086 };
1087
1088 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_eh = {
1089         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1090         proto_hint_ipv4_dst }
1091 };
1092
1093 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_eh = {
1094         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1095         proto_hint_ipv4 }
1096 };
1097
1098 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_eh = {
1099         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1100         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
1101 };
1102
1103 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_eh = {
1104         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1105         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
1106 };
1107
1108 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_eh = {
1109         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1110         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
1111 };
1112
1113 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh = {
1114         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1115         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
1116 };
1117
1118 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_eh = {
1119         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1120         proto_hint_ipv4_prot, proto_hint_udp}
1121 };
1122
1123 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_eh = {
1124         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1125         proto_hint_ipv4_prot, proto_hint_tcp}
1126 };
1127
1128 /* IPv6 GTPU EH */
1129
1130 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_gtpu_eh = {
1131         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1132         proto_hint_ipv6_src_prot, proto_hint_udp_only }
1133 };
1134
1135 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_gtpu_eh = {
1136         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1137         proto_hint_ipv6_dst_prot, proto_hint_udp_only }
1138 };
1139
1140 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_udp_eh = {
1141         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1142         proto_hint_ipv6_prot, proto_hint_udp_only }
1143 };
1144
1145 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_gtpu_eh = {
1146         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1147         proto_hint_ipv6_src_prot, proto_hint_tcp_only }
1148 };
1149
1150 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_gtpu_eh = {
1151         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1152         proto_hint_ipv6_dst_prot, proto_hint_tcp_only }
1153 };
1154
1155 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_tcp_eh = {
1156         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1157         proto_hint_ipv6_prot, proto_hint_tcp_only }
1158 };
1159
1160 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_eh = {
1161         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1162         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
1163 };
1164
1165 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_eh = {
1166         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1167         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
1168 };
1169
1170 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_eh = {
1171         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1172         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
1173 };
1174
1175 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_eh = {
1176         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1177         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
1178 };
1179
1180 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_eh = {
1181         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1182         proto_hint_ipv6_src }
1183 };
1184
1185 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_eh = {
1186         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1187         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
1188 };
1189
1190 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_eh = {
1191         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1192         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
1193 };
1194
1195 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_eh = {
1196         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1197         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
1198 };
1199
1200 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_eh = {
1201         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1202         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
1203 };
1204
1205 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_eh = {
1206         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1207         proto_hint_ipv6_dst }
1208 };
1209
1210 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_eh = {
1211         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
1212         proto_hint_ipv6 }
1213 };
1214
1215 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_eh = {
1216         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1217         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
1218 };
1219
1220 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_eh = {
1221         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1222         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
1223 };
1224
1225 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_eh = {
1226         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1227         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
1228 };
1229
1230 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh = {
1231         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1232         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
1233 };
1234
1235 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_eh = {
1236         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1237         proto_hint_ipv6_prot, proto_hint_udp}
1238 };
1239
1240 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_eh = {
1241         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
1242         proto_hint_ipv6_prot, proto_hint_tcp}
1243 };
1244
1245 /* IPv4 GTPU UP */
1246
1247 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_gtpu_up = {
1248         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1249         proto_hint_ipv4_src_prot, proto_hint_udp_only }
1250 };
1251
1252 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_gtpu_up = {
1253         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1254         proto_hint_ipv4_dst_prot, proto_hint_udp_only }
1255 };
1256
1257 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_udp_up = {
1258         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1259         proto_hint_ipv4_prot, proto_hint_udp_only }
1260 };
1261
1262 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_gtpu_up = {
1263         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1264         proto_hint_ipv4_src_prot, proto_hint_tcp_only }
1265 };
1266
1267 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_gtpu_up = {
1268         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1269         proto_hint_ipv4_dst_prot, proto_hint_tcp_only }
1270 };
1271
1272 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_tcp_up = {
1273         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1274         proto_hint_ipv4_prot, proto_hint_tcp_only }
1275 };
1276
1277 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_up = {
1278         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1279         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
1280 };
1281
1282 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_up = {
1283         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1284         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
1285 };
1286
1287 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_up = {
1288         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1289         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
1290 };
1291
1292 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_up = {
1293         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1294         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
1295 };
1296
1297 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_up = {
1298         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1299         proto_hint_ipv4_src }
1300 };
1301
1302 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_up = {
1303         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1304         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
1305 };
1306
1307 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_up = {
1308         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1309         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
1310 };
1311
1312 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_up = {
1313         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1314         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
1315 };
1316
1317 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_up = {
1318         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1319         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
1320 };
1321
1322 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_up = {
1323         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1324         proto_hint_ipv4_dst }
1325 };
1326
1327 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_up = {
1328         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1329         proto_hint_ipv4 }
1330 };
1331
1332 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_up = {
1333         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1334         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
1335 };
1336
1337 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_up = {
1338         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1339         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
1340 };
1341
1342 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_up = {
1343         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1344         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
1345 };
1346
1347 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_up = {
1348         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1349         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
1350 };
1351
1352 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_up = {
1353         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1354         proto_hint_ipv4_prot, proto_hint_udp}
1355 };
1356
1357 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_up = {
1358         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1359         proto_hint_ipv4_prot, proto_hint_tcp}
1360 };
1361
1362 /* IPv6 GTPU UP */
1363
1364 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_gtpu_up = {
1365         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1366         proto_hint_ipv6_src_prot, proto_hint_udp_only }
1367 };
1368
1369 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_gtpu_up = {
1370         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1371         proto_hint_ipv6_dst_prot, proto_hint_udp_only }
1372 };
1373
1374 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_udp_up = {
1375         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1376         proto_hint_ipv6_prot, proto_hint_udp_only }
1377 };
1378
1379 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_gtpu_up = {
1380         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1381         proto_hint_ipv6_src_prot, proto_hint_tcp_only }
1382 };
1383
1384 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_gtpu_up = {
1385         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1386         proto_hint_ipv6_dst_prot, proto_hint_tcp_only }
1387 };
1388
1389 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_tcp_up = {
1390         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1391         proto_hint_ipv6_prot, proto_hint_tcp_only }
1392 };
1393
1394 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_up = {
1395         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1396         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
1397 };
1398
1399 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_up = {
1400         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1401         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
1402 };
1403
1404 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_up = {
1405         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1406         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
1407 };
1408
1409 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_up = {
1410         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1411         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
1412 };
1413
1414 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_up = {
1415         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1416         proto_hint_ipv6_src }
1417 };
1418
1419 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_up = {
1420         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1421         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
1422 };
1423
1424 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_up = {
1425         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1426         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
1427 };
1428
1429 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_up = {
1430         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1431         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
1432 };
1433
1434 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_up = {
1435         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1436         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
1437 };
1438
1439 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_up = {
1440         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1441         proto_hint_ipv6_dst }
1442 };
1443
1444 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_up = {
1445         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
1446         proto_hint_ipv6 }
1447 };
1448
1449 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_up = {
1450         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1451         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
1452 };
1453
1454 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_up = {
1455         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1456         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
1457 };
1458
1459 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_up = {
1460         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1461         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
1462 };
1463
1464 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_up = {
1465         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1466         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
1467 };
1468
1469 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_up = {
1470         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1471         proto_hint_ipv6_prot, proto_hint_udp}
1472 };
1473
1474 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_up = {
1475         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
1476         proto_hint_ipv6_prot, proto_hint_tcp}
1477 };
1478
1479 /* IPv4 GTPU DWN */
1480
1481 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_gtpu_dwn = {
1482         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1483         proto_hint_ipv4_src_prot, proto_hint_udp_only }
1484 };
1485
1486 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_gtpu_dwn = {
1487         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1488         proto_hint_ipv4_dst_prot, proto_hint_udp_only }
1489 };
1490
1491 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_udp_dwn = {
1492         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1493         proto_hint_ipv4_prot, proto_hint_udp_only }
1494 };
1495
1496 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_gtpu_dwn = {
1497         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1498         proto_hint_ipv4_src_prot, proto_hint_tcp_only }
1499 };
1500
1501 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_gtpu_dwn = {
1502         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1503         proto_hint_ipv4_dst_prot, proto_hint_tcp_only }
1504 };
1505
1506 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_tcp_dwn = {
1507         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1508         proto_hint_ipv4_prot, proto_hint_tcp_only }
1509 };
1510
1511 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_src_gtpu_dwn = {
1512         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1513         proto_hint_ipv4_only_prot, proto_hint_udp_src_port}
1514 };
1515
1516 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_dst_gtpu_dwn = {
1517         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1518         proto_hint_ipv4_only_prot, proto_hint_udp_dst_port}
1519 };
1520
1521 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_src_gtpu_dwn = {
1522         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1523         proto_hint_ipv4_only_prot, proto_hint_tcp_src_port}
1524 };
1525
1526 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_dst_gtpu_dwn = {
1527         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1528         proto_hint_ipv4_only_prot, proto_hint_tcp_dst_port}
1529 };
1530
1531 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_dwn = {
1532         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1533         proto_hint_ipv4_src }
1534 };
1535
1536 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_src_gtpu_dwn = {
1537         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1538         proto_hint_ipv4_src_prot, proto_hint_udp_src_port}
1539 };
1540
1541 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_udp_dst_gtpu_dwn = {
1542         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1543         proto_hint_ipv4_src_prot, proto_hint_udp_dst_port}
1544 };
1545
1546 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_src_gtpu_dwn = {
1547         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1548         proto_hint_ipv4_src_prot, proto_hint_tcp_src_port}
1549 };
1550
1551 struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn = {
1552         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1553         proto_hint_ipv4_src_prot, proto_hint_tcp_dst_port}
1554 };
1555
1556 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_dwn = {
1557         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1558         proto_hint_ipv4_dst }
1559 };
1560
1561 struct virtchnl_proto_hdrs hdrs_hint_ipv4_gtpu_dwn = {
1562         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1563         proto_hint_ipv4 }
1564 };
1565
1566 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_src_gtpu_dwn = {
1567         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1568         proto_hint_ipv4_dst_prot, proto_hint_udp_src_port}
1569 };
1570
1571 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn = {
1572         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1573         proto_hint_ipv4_dst_prot, proto_hint_udp_dst_port}
1574 };
1575
1576 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn = {
1577         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1578         proto_hint_ipv4_dst_prot, proto_hint_tcp_src_port}
1579 };
1580
1581 struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn = {
1582         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1583         proto_hint_ipv4_dst_prot, proto_hint_tcp_dst_port}
1584 };
1585
1586 struct virtchnl_proto_hdrs hdrs_hint_ipv4_udp_gtpu_dwn = {
1587         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1588         proto_hint_ipv4_prot, proto_hint_udp}
1589 };
1590
1591 struct virtchnl_proto_hdrs hdrs_hint_ipv4_tcp_gtpu_dwn = {
1592         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1593         proto_hint_ipv4_prot, proto_hint_tcp}
1594 };
1595
1596 /* IPv6 GTPU DWN */
1597
1598 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_gtpu_dwn = {
1599         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1600         proto_hint_ipv6_src_prot, proto_hint_udp_only }
1601 };
1602
1603 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_gtpu_dwn = {
1604         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1605         proto_hint_ipv6_dst_prot, proto_hint_udp_only }
1606 };
1607
1608 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_udp_dwn = {
1609         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1610         proto_hint_ipv6_prot, proto_hint_udp_only }
1611 };
1612
1613 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_gtpu_dwn = {
1614         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1615         proto_hint_ipv6_src_prot, proto_hint_tcp_only }
1616 };
1617
1618 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_gtpu_dwn = {
1619         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1620         proto_hint_ipv6_dst_prot, proto_hint_tcp_only }
1621 };
1622
1623 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_tcp_dwn = {
1624         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1625         proto_hint_ipv6_prot, proto_hint_tcp_only }
1626 };
1627
1628 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_gtpu_dwn = {
1629         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1630         proto_hint_ipv6_only_prot, proto_hint_udp_src_port}
1631 };
1632
1633 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_gtpu_dwn = {
1634         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1635         proto_hint_ipv6_only_prot, proto_hint_udp_dst_port}
1636 };
1637
1638 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_gtpu_dwn = {
1639         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1640         proto_hint_ipv6_only_prot, proto_hint_tcp_src_port}
1641 };
1642
1643 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_gtpu_dwn = {
1644         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1645         proto_hint_ipv6_only_prot, proto_hint_tcp_dst_port}
1646 };
1647
1648 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_gtpu_dwn = {
1649         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1650         proto_hint_ipv6_src }
1651 };
1652
1653 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_gtpu_dwn = {
1654         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1655         proto_hint_ipv6_src_prot, proto_hint_udp_src_port}
1656 };
1657
1658 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_gtpu_dwn = {
1659         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1660         proto_hint_ipv6_src_prot, proto_hint_udp_dst_port}
1661 };
1662
1663 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_gtpu_dwn = {
1664         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1665         proto_hint_ipv6_src_prot, proto_hint_tcp_src_port}
1666 };
1667
1668 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn = {
1669         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1670         proto_hint_ipv6_src_prot, proto_hint_tcp_dst_port}
1671 };
1672
1673 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_gtpu_dwn = {
1674         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1675         proto_hint_ipv6_dst }
1676 };
1677
1678 struct virtchnl_proto_hdrs hdrs_hint_ipv6_gtpu_dwn = {
1679         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
1680         proto_hint_ipv6 }
1681 };
1682
1683 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_gtpu_dwn = {
1684         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1685         proto_hint_ipv6_dst_prot, proto_hint_udp_src_port}
1686 };
1687
1688 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn = {
1689         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1690         proto_hint_ipv6_dst_prot, proto_hint_udp_dst_port}
1691 };
1692
1693 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn = {
1694         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1695         proto_hint_ipv6_dst_prot, proto_hint_tcp_src_port}
1696 };
1697
1698 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn = {
1699         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1700         proto_hint_ipv6_dst_prot, proto_hint_tcp_dst_port}
1701 };
1702
1703 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_gtpu_dwn = {
1704         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1705         proto_hint_ipv6_prot, proto_hint_udp}
1706 };
1707
1708 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_gtpu_dwn = {
1709         TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
1710         proto_hint_ipv6_prot, proto_hint_tcp}
1711 };
1712
1713 /* IPV6 */
1714
1715 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6 = {
1716         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth_src,
1717         proto_hint_ipv6_only }
1718 };
1719
1720 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6_udp = {
1721         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
1722         proto_hint_ipv6_only, proto_hint_udp_only }
1723 };
1724
1725 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6_tcp = {
1726         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
1727         proto_hint_ipv6_only, proto_hint_tcp_only }
1728 };
1729
1730 struct virtchnl_proto_hdrs hdrs_hint_eth_src_ipv6_sctp = {
1731         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_src,
1732         proto_hint_ipv6_only, proto_hint_sctp_only }
1733 };
1734
1735 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6 = {
1736         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth_dst,
1737         proto_hint_ipv6_only }
1738 };
1739
1740 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6_udp = {
1741         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
1742         proto_hint_ipv6_only, proto_hint_udp_only }
1743 };
1744
1745 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6_tcp = {
1746         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
1747         proto_hint_ipv6_only, proto_hint_tcp_only }
1748 };
1749
1750 struct virtchnl_proto_hdrs hdrs_hint_eth_dst_ipv6_sctp = {
1751         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth_dst,
1752         proto_hint_ipv6_only, proto_hint_sctp_only }
1753 };
1754
1755 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6 = {
1756         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_eth,
1757         proto_hint_ipv6_only }
1758 };
1759
1760 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6_udp = {
1761         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
1762         proto_hint_ipv6_only, proto_hint_udp_only }
1763 };
1764
1765 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6_tcp = {
1766         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
1767         proto_hint_ipv6_only, proto_hint_tcp_only }
1768 };
1769
1770 struct virtchnl_proto_hdrs hdrs_hint_eth_ipv6_sctp = {
1771         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_eth,
1772         proto_hint_ipv6_only, proto_hint_sctp_only }
1773 };
1774
1775 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6 = {
1776         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_svlan,
1777         proto_hint_ipv6_only}
1778 };
1779
1780 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6_udp = {
1781         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
1782         proto_hint_ipv6_only, proto_hint_udp_only}
1783 };
1784
1785 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6_tcp = {
1786         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
1787         proto_hint_ipv6_only, proto_hint_tcp_only}
1788 };
1789
1790 struct virtchnl_proto_hdrs hdrs_hint_svlan_ipv6_sctp = {
1791         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_svlan,
1792         proto_hint_ipv6_only, proto_hint_sctp_only}
1793 };
1794
1795 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6 = {
1796         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_cvlan,
1797         proto_hint_ipv6_only}
1798 };
1799
1800 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6_udp = {
1801         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
1802         proto_hint_ipv6_only, proto_hint_udp_only}
1803 };
1804
1805 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6_tcp = {
1806         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
1807         proto_hint_ipv6_only, proto_hint_tcp_only}
1808 };
1809
1810 struct virtchnl_proto_hdrs hdrs_hint_cvlan_ipv6_sctp = {
1811         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_cvlan,
1812         proto_hint_ipv6_only, proto_hint_sctp_only}
1813 };
1814
1815 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src = {
1816         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_src }
1817 };
1818
1819 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst = {
1820         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_dst }
1821 };
1822
1823 struct virtchnl_proto_hdrs hdrs_hint_ipv6 = {
1824         TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6 }
1825 };
1826
1827 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp = {
1828         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1829         proto_hint_udp_only }
1830 };
1831
1832 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp = {
1833         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1834         proto_hint_udp_only }
1835 };
1836
1837 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_only = {
1838         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1839         proto_hint_udp_only }
1840 };
1841
1842 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp = {
1843         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1844         proto_hint_tcp_only }
1845 };
1846
1847 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp = {
1848         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1849         proto_hint_tcp_only }
1850 };
1851
1852 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_only = {
1853         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1854         proto_hint_tcp_only }
1855 };
1856
1857 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_sctp = {
1858         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1859         proto_hint_sctp_only }
1860 };
1861
1862 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_sctp = {
1863         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1864         proto_hint_sctp_only }
1865 };
1866
1867 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_only = {
1868         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1869         proto_hint_sctp_only }
1870 };
1871
1872 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_src_port = {
1873         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1874         proto_hint_udp_src_port }
1875 };
1876
1877 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_udp_dst_port = {
1878         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1879         proto_hint_udp_dst_port }
1880 };
1881
1882 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_src_port = {
1883         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1884         proto_hint_udp_src_port }
1885 };
1886
1887 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_udp_dst_port = {
1888         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1889         proto_hint_udp_dst_port }
1890 };
1891
1892 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_src_port = {
1893         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1894         proto_hint_udp_src_port }
1895 };
1896
1897 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_dst_port = {
1898         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1899         proto_hint_udp_dst_port }
1900 };
1901
1902 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp = {
1903         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1904         proto_hint_udp }
1905 };
1906
1907 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_src_port = {
1908         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1909         proto_hint_tcp_src_port }
1910 };
1911
1912 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_tcp_dst_port = {
1913         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src_prot,
1914         proto_hint_tcp_dst_port }
1915 };
1916
1917 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_src_port = {
1918         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1919         proto_hint_tcp_src_port }
1920 };
1921
1922 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_tcp_dst_port = {
1923         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst_prot,
1924         proto_hint_tcp_dst_port }
1925 };
1926
1927 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_src_port = {
1928         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1929         proto_hint_tcp_src_port }
1930 };
1931
1932 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp_dst_port = {
1933         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only_prot,
1934         proto_hint_tcp_dst_port }
1935 };
1936
1937 struct virtchnl_proto_hdrs hdrs_hint_ipv6_tcp = {
1938         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_prot,
1939         proto_hint_tcp }
1940 };
1941
1942 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_sctp_src_port = {
1943         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src,
1944         proto_hint_sctp_src_port }
1945 };
1946
1947 struct virtchnl_proto_hdrs hdrs_hint_ipv6_src_sctp_dst_port = {
1948         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_src,
1949         proto_hint_sctp_dst_port }
1950 };
1951
1952 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_sctp_src_port = {
1953         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst,
1954         proto_hint_sctp_src_port }
1955 };
1956
1957 struct virtchnl_proto_hdrs hdrs_hint_ipv6_dst_sctp_dst_port = {
1958         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_dst,
1959         proto_hint_sctp_dst_port }
1960 };
1961
1962 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_src_port = {
1963         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1964         proto_hint_sctp_src_port }
1965 };
1966
1967 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp_dst_port = {
1968         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1969         proto_hint_sctp_dst_port }
1970 };
1971
1972 struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp = {
1973         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6,
1974         proto_hint_sctp }
1975 };
1976
1977 struct virtchnl_proto_hdrs hdrs_hint_ipv6_esp = {
1978         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1979         proto_hint_esp }
1980 };
1981
1982 struct virtchnl_proto_hdrs hdrs_hint_ipv6_ah = {
1983         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1984         proto_hint_ah }
1985 };
1986
1987 struct virtchnl_proto_hdrs hdrs_hint_ipv6_l2tpv3 = {
1988         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1989         proto_hint_l2tpv3 }
1990 };
1991
1992 struct virtchnl_proto_hdrs hdrs_hint_ipv6_pfcp = {
1993         TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_only,
1994         proto_hint_pfcp }
1995 };
1996
1997 struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_esp = {
1998         TUNNEL_LEVEL_OUTER, PROTO_COUNT_THREE, {proto_hint_ipv6_only,
1999         proto_hint_udp_only, proto_hint_esp }
2000 };
2001
2002 struct iavf_hash_match_type iavf_hash_map_list[] = {
2003         /* IPV4 */
2004         {ETH_RSS_L2_SRC_ONLY,
2005                 &hdrs_hint_eth_src_ipv4, IAVF_PHINT_IPV4},
2006         {ETH_RSS_L2_DST_ONLY,
2007                 &hdrs_hint_eth_dst_ipv4, IAVF_PHINT_IPV4},
2008         {ETH_RSS_ETH,
2009                 &hdrs_hint_eth_ipv4, IAVF_PHINT_IPV4},
2010         {ETH_RSS_L3_SRC_ONLY,
2011                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4},
2012         {ETH_RSS_L3_DST_ONLY,
2013                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4},
2014         {ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY,
2015                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4},
2016         {ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY,
2017                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4},
2018         {ETH_RSS_IPV4,
2019                 &hdrs_hint_ipv4, IAVF_PHINT_IPV4},
2020         {ETH_RSS_ESP,
2021                 &hdrs_hint_ipv4_esp, IAVF_PHINT_IPV4},
2022         {ETH_RSS_AH,
2023                 &hdrs_hint_ipv4_ah, IAVF_PHINT_IPV4},
2024         {ETH_RSS_L2TPV3,
2025                 &hdrs_hint_ipv4_l2tpv3, IAVF_PHINT_IPV4},
2026         {ETH_RSS_S_VLAN,
2027                 &hdrs_hint_svlan_ipv4, IAVF_PHINT_IPV4},
2028         {ETH_RSS_S_VLAN,
2029                 &hdrs_hint_svlan_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2030         {ETH_RSS_S_VLAN,
2031                 &hdrs_hint_svlan_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2032         {ETH_RSS_S_VLAN,
2033                 &hdrs_hint_svlan_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2034         {ETH_RSS_C_VLAN,
2035                 &hdrs_hint_cvlan_ipv4, IAVF_PHINT_IPV4},
2036         {ETH_RSS_C_VLAN,
2037                 &hdrs_hint_cvlan_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2038         {ETH_RSS_C_VLAN,
2039                 &hdrs_hint_cvlan_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2040         {ETH_RSS_C_VLAN,
2041                 &hdrs_hint_cvlan_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2042         /* IPV4 UDP */
2043         {ETH_RSS_L2_SRC_ONLY,
2044                 &hdrs_hint_eth_src_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2045         {ETH_RSS_L2_DST_ONLY,
2046                 &hdrs_hint_eth_dst_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2047         {ETH_RSS_ETH,
2048                 &hdrs_hint_eth_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2049         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2050                 &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP},
2051         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2052                 &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2053         {ETH_RSS_L3_SRC_ONLY,
2054                 &hdrs_hint_ipv4_src_udp, IAVF_PHINT_IPV4_UDP},
2055         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2056                 &hdrs_hint_ipv4_dst_udp_src_port, IAVF_PHINT_IPV4_UDP},
2057         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2058                 &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2059         {ETH_RSS_L3_DST_ONLY,
2060                 &hdrs_hint_ipv4_dst_udp, IAVF_PHINT_IPV4_UDP},
2061         {ETH_RSS_NONFRAG_IPV4_UDP |
2062                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2063                 &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP},
2064         {ETH_RSS_NONFRAG_IPV4_UDP |
2065                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2066                 &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2067         {ETH_RSS_NONFRAG_IPV4_UDP |
2068                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src_udp,
2069                 IAVF_PHINT_IPV4_UDP},
2070         {ETH_RSS_NONFRAG_IPV4_UDP |
2071                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2072                 &hdrs_hint_ipv4_dst_udp_src_port, IAVF_PHINT_IPV4_UDP},
2073         {ETH_RSS_NONFRAG_IPV4_UDP |
2074                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2075                 &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2076         {ETH_RSS_NONFRAG_IPV4_UDP |
2077                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst_udp,
2078                 IAVF_PHINT_IPV4_UDP},
2079         {ETH_RSS_L4_SRC_ONLY,
2080                 &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP},
2081         {ETH_RSS_L4_DST_ONLY,
2082                 &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2083         {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY,
2084                 &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP},
2085         {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY,
2086                 &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2087         {ETH_RSS_PFCP,
2088                 &hdrs_hint_ipv4_pfcp, IAVF_PHINT_IPV4_UDP},
2089         {ETH_RSS_ESP,
2090                 &hdrs_hint_ipv4_udp_esp, IAVF_PHINT_IPV4_UDP},
2091         {ETH_RSS_NONFRAG_IPV4_UDP,
2092                 &hdrs_hint_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2093         /* IPV4 TCP */
2094         {ETH_RSS_L2_SRC_ONLY,
2095                 &hdrs_hint_eth_src_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2096         {ETH_RSS_L2_DST_ONLY,
2097                 &hdrs_hint_eth_dst_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2098         {ETH_RSS_ETH,
2099                 &hdrs_hint_eth_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2100         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2101                 &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2102         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2103                 &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2104         {ETH_RSS_L3_SRC_ONLY,
2105                 &hdrs_hint_ipv4_src_tcp, IAVF_PHINT_IPV4_TCP},
2106         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2107                 &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2108         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2109                 &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2110         {ETH_RSS_L3_DST_ONLY,
2111                 &hdrs_hint_ipv4_dst_tcp, IAVF_PHINT_IPV4_TCP},
2112         {ETH_RSS_NONFRAG_IPV4_TCP |
2113                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2114                 &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2115         {ETH_RSS_NONFRAG_IPV4_TCP |
2116                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2117                 &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2118         {ETH_RSS_NONFRAG_IPV4_TCP |
2119                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src_tcp,
2120                 IAVF_PHINT_IPV4_TCP},
2121         {ETH_RSS_NONFRAG_IPV4_TCP |
2122                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2123                 &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2124         {ETH_RSS_NONFRAG_IPV4_TCP |
2125                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2126                 &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2127         {ETH_RSS_NONFRAG_IPV4_TCP |
2128                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst_tcp,
2129                 IAVF_PHINT_IPV4_TCP},
2130         {ETH_RSS_L4_SRC_ONLY,
2131                 &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2132         {ETH_RSS_L4_DST_ONLY,
2133                 &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2134         {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY,
2135                 &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2136         {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY,
2137                 &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2138         {ETH_RSS_NONFRAG_IPV4_TCP,
2139                 &hdrs_hint_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2140         /* IPV4 SCTP */
2141         {ETH_RSS_L2_SRC_ONLY,
2142                 &hdrs_hint_eth_src_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2143         {ETH_RSS_L2_DST_ONLY,
2144                 &hdrs_hint_eth_dst_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2145         {ETH_RSS_ETH,
2146                 &hdrs_hint_eth_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2147         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2148                 &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2149         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2150                 &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2151         {ETH_RSS_L3_SRC_ONLY,
2152                 &hdrs_hint_ipv4_src_sctp, IAVF_PHINT_IPV4_SCTP},
2153         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2154                 &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2155         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2156                 &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2157         {ETH_RSS_L3_DST_ONLY,
2158                 &hdrs_hint_ipv4_dst_sctp, IAVF_PHINT_IPV4_SCTP},
2159         {ETH_RSS_NONFRAG_IPV4_SCTP |
2160                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2161                 &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2162         {ETH_RSS_NONFRAG_IPV4_SCTP |
2163                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2164                 &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2165         {ETH_RSS_NONFRAG_IPV4_SCTP |
2166                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src_sctp,
2167                 IAVF_PHINT_IPV4_SCTP},
2168         {ETH_RSS_NONFRAG_IPV4_SCTP |
2169                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2170                 &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2171         {ETH_RSS_NONFRAG_IPV4_SCTP |
2172                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2173                 &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2174         {ETH_RSS_NONFRAG_IPV4_SCTP |
2175                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst_sctp,
2176                 IAVF_PHINT_IPV4_SCTP},
2177         {ETH_RSS_L4_SRC_ONLY,
2178                 &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2179         {ETH_RSS_L4_DST_ONLY,
2180                 &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2181         {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY,
2182                 &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2183         {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY,
2184                 &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2185         {ETH_RSS_NONFRAG_IPV4_SCTP,
2186                 &hdrs_hint_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2187         /* IPV6 */
2188         {ETH_RSS_L2_SRC_ONLY,
2189                 &hdrs_hint_eth_src_ipv6, IAVF_PHINT_IPV6},
2190         {ETH_RSS_L2_DST_ONLY,
2191                 &hdrs_hint_eth_dst_ipv6, IAVF_PHINT_IPV6},
2192         {ETH_RSS_ETH,
2193                 &hdrs_hint_eth_ipv6, IAVF_PHINT_IPV6},
2194         {ETH_RSS_L3_SRC_ONLY,
2195                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6},
2196         {ETH_RSS_L3_DST_ONLY,
2197                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6},
2198         {ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY,
2199                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6},
2200         {ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY,
2201                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6},
2202         {ETH_RSS_IPV6,
2203                 &hdrs_hint_ipv6, IAVF_PHINT_IPV6},
2204         {ETH_RSS_ESP,
2205                 &hdrs_hint_ipv6_esp, IAVF_PHINT_IPV6},
2206         {ETH_RSS_AH,
2207                 &hdrs_hint_ipv6_ah, IAVF_PHINT_IPV6},
2208         {ETH_RSS_L2TPV3,
2209                 &hdrs_hint_ipv6_l2tpv3, IAVF_PHINT_IPV6},
2210         /* IPV6 UDP */
2211         {ETH_RSS_L2_SRC_ONLY,
2212                 &hdrs_hint_eth_src_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2213         {ETH_RSS_L2_DST_ONLY,
2214                 &hdrs_hint_eth_dst_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2215         {ETH_RSS_ETH,
2216                 &hdrs_hint_eth_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2217         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2218                 &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
2219         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2220                 &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2221         {ETH_RSS_L3_SRC_ONLY,
2222                 &hdrs_hint_ipv6_src_udp, IAVF_PHINT_IPV6_UDP},
2223         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2224                 &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
2225         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2226                 &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2227         {ETH_RSS_L3_DST_ONLY,
2228                 &hdrs_hint_ipv6_dst_udp, IAVF_PHINT_IPV6_UDP},
2229         {ETH_RSS_NONFRAG_IPV6_UDP |
2230                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2231                 &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
2232         {ETH_RSS_NONFRAG_IPV6_UDP |
2233                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2234                 &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2235         {ETH_RSS_NONFRAG_IPV6_UDP |
2236                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src_udp,
2237                 IAVF_PHINT_IPV6_UDP},
2238         {ETH_RSS_NONFRAG_IPV6_UDP |
2239                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2240                 &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
2241         {ETH_RSS_NONFRAG_IPV6_UDP |
2242                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2243                 &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2244         {ETH_RSS_NONFRAG_IPV6_UDP |
2245                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst_udp,
2246                 IAVF_PHINT_IPV6_UDP},
2247         {ETH_RSS_L4_SRC_ONLY,
2248                 &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP},
2249         {ETH_RSS_L4_DST_ONLY,
2250                 &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2251         {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY,
2252                 &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP},
2253         {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY,
2254                 &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2255         {ETH_RSS_PFCP,
2256                 &hdrs_hint_ipv6_pfcp, IAVF_PHINT_IPV6_UDP},
2257         {ETH_RSS_ESP,
2258                 &hdrs_hint_ipv6_udp_esp, IAVF_PHINT_IPV6_UDP},
2259         {ETH_RSS_NONFRAG_IPV6_UDP,
2260                 &hdrs_hint_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2261         /* IPV6 TCP */
2262         {ETH_RSS_L2_SRC_ONLY,
2263                 &hdrs_hint_eth_src_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2264         {ETH_RSS_L2_DST_ONLY,
2265                 &hdrs_hint_eth_dst_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2266         {ETH_RSS_ETH,
2267                 &hdrs_hint_eth_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2268         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2269                 &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2270         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2271                 &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2272         {ETH_RSS_L3_SRC_ONLY,
2273                 &hdrs_hint_ipv6_src_tcp, IAVF_PHINT_IPV6_TCP},
2274         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2275                 &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2276         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2277                 &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2278         {ETH_RSS_L3_DST_ONLY,
2279                 &hdrs_hint_ipv6_dst_tcp, IAVF_PHINT_IPV6_TCP},
2280         {ETH_RSS_NONFRAG_IPV6_TCP |
2281                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2282                 &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2283         {ETH_RSS_NONFRAG_IPV6_TCP |
2284                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2285                 &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2286         {ETH_RSS_NONFRAG_IPV6_TCP |
2287                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src_tcp,
2288                 IAVF_PHINT_IPV6_TCP},
2289         {ETH_RSS_NONFRAG_IPV6_TCP |
2290                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2291                 &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2292         {ETH_RSS_NONFRAG_IPV6_TCP |
2293                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2294                 &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2295         {ETH_RSS_NONFRAG_IPV6_TCP |
2296                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst_tcp,
2297                 IAVF_PHINT_IPV6_TCP},
2298         {ETH_RSS_L4_SRC_ONLY,
2299                 &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2300         {ETH_RSS_L4_DST_ONLY,
2301                 &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2302         {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY,
2303                 &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2304         {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY,
2305                 &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2306         {ETH_RSS_NONFRAG_IPV6_TCP,
2307                 &hdrs_hint_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2308         /* IPV6 SCTP */
2309         {ETH_RSS_L2_SRC_ONLY,
2310                 &hdrs_hint_eth_src_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2311         {ETH_RSS_L2_DST_ONLY,
2312                 &hdrs_hint_eth_dst_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2313         {ETH_RSS_ETH,
2314                 &hdrs_hint_eth_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2315         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2316                 &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2317         {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2318                 &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2319         {ETH_RSS_L3_SRC_ONLY,
2320                 &hdrs_hint_ipv6_src_sctp, IAVF_PHINT_IPV6_SCTP},
2321         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2322                 &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2323         {ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2324                 &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2325         {ETH_RSS_L3_DST_ONLY,
2326                 &hdrs_hint_ipv6_dst_sctp, IAVF_PHINT_IPV6_SCTP},
2327         {ETH_RSS_NONFRAG_IPV6_SCTP |
2328                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2329                 &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2330         {ETH_RSS_NONFRAG_IPV6_SCTP |
2331                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2332                 &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2333         {ETH_RSS_NONFRAG_IPV6_SCTP |
2334                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src_sctp,
2335                 IAVF_PHINT_IPV6_SCTP},
2336         {ETH_RSS_NONFRAG_IPV6_SCTP |
2337                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2338                 &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2339         {ETH_RSS_NONFRAG_IPV6_SCTP |
2340                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2341                 &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2342         {ETH_RSS_NONFRAG_IPV6_SCTP |
2343                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst_sctp,
2344                 IAVF_PHINT_IPV6_SCTP},
2345         {ETH_RSS_L4_SRC_ONLY,
2346                 &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2347         {ETH_RSS_L4_DST_ONLY,
2348                 &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2349         {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY,
2350                 &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2351         {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY,
2352                 &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2353         {ETH_RSS_NONFRAG_IPV6_SCTP,
2354                 &hdrs_hint_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2355         {ETH_RSS_S_VLAN,
2356                 &hdrs_hint_svlan_ipv6, IAVF_PHINT_IPV6},
2357         {ETH_RSS_S_VLAN,
2358                 &hdrs_hint_svlan_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2359         {ETH_RSS_S_VLAN,
2360                 &hdrs_hint_svlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2361         {ETH_RSS_S_VLAN,
2362                 &hdrs_hint_svlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2363         {ETH_RSS_C_VLAN,
2364                 &hdrs_hint_cvlan_ipv6, IAVF_PHINT_IPV6},
2365         {ETH_RSS_C_VLAN,
2366                 &hdrs_hint_cvlan_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2367         {ETH_RSS_C_VLAN,
2368                 &hdrs_hint_cvlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2369         {ETH_RSS_C_VLAN,
2370                 &hdrs_hint_cvlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2371 };
2372
2373 struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
2374         /* GTPU */
2375         /* GTPU IP */
2376         /* IPv4 GTPU IP IPv4*/
2377         {ETH_RSS_L3_SRC_ONLY,
2378                 &hdrs_hint_ipv4_src_gtpu_ip,
2379                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2380         {ETH_RSS_L3_DST_ONLY,
2381                 &hdrs_hint_ipv4_dst_gtpu_ip,
2382                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2383         {ETH_RSS_IPV4 |
2384                 ETH_RSS_L3_SRC_ONLY,
2385                 &hdrs_hint_ipv4_src_gtpu_ip,
2386                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2387         {ETH_RSS_IPV4 |
2388                 ETH_RSS_L3_DST_ONLY,
2389                 &hdrs_hint_ipv4_dst_gtpu_ip,
2390                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2391         {ETH_RSS_IPV4,
2392                 &hdrs_hint_ipv4_gtpu_ip,
2393                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2394         {ETH_RSS_GTPU,
2395                 &hdrs_hint_teid_gtpu_ip,
2396                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2397         /* IPv4 GTPU IP IPv6*/
2398         {ETH_RSS_IPV6 |
2399                 ETH_RSS_L3_SRC_ONLY,
2400                 &hdrs_hint_ipv6_src_gtpu_ip,
2401                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2402         {ETH_RSS_IPV6 |
2403                 ETH_RSS_L3_DST_ONLY,
2404                 &hdrs_hint_ipv6_dst_gtpu_ip,
2405                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2406         {ETH_RSS_IPV6,
2407                 &hdrs_hint_ipv6_gtpu_ip,
2408                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2409         {ETH_RSS_GTPU,
2410                 &hdrs_hint_teid_gtpu_ip,
2411                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2412         /* IPv6 GTPU IP IPv4*/
2413         {ETH_RSS_IPV4 |
2414                 ETH_RSS_L3_SRC_ONLY,
2415                 &hdrs_hint_ipv4_src_gtpu_ip,
2416                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2417         {ETH_RSS_IPV4 |
2418                 ETH_RSS_L3_DST_ONLY,
2419                 &hdrs_hint_ipv4_dst_gtpu_ip,
2420                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2421         {ETH_RSS_IPV4,
2422                 &hdrs_hint_ipv4_gtpu_ip,
2423                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2424         {ETH_RSS_GTPU,
2425                 &hdrs_hint_teid_gtpu_ip,
2426                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2427         /* IPv6 GTPU IP IPv6*/
2428         {ETH_RSS_IPV6 |
2429                 ETH_RSS_L3_SRC_ONLY,
2430                 &hdrs_hint_ipv6_src_gtpu_ip,
2431                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2432         {ETH_RSS_IPV6 |
2433                 ETH_RSS_L3_DST_ONLY,
2434                 &hdrs_hint_ipv6_dst_gtpu_ip,
2435                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2436         {ETH_RSS_IPV6,
2437                 &hdrs_hint_ipv6_gtpu_ip,
2438                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2439         {ETH_RSS_GTPU,
2440                 &hdrs_hint_teid_gtpu_ip,
2441                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2442         /* IPv4 GTPU IP IPv4 UDP */
2443         {ETH_RSS_L3_SRC_ONLY |
2444                 ETH_RSS_L4_SRC_ONLY,
2445                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2446                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2447         {ETH_RSS_L3_SRC_ONLY |
2448                 ETH_RSS_L4_DST_ONLY,
2449                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2450                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2451         {ETH_RSS_L3_SRC_ONLY,
2452                 &hdrs_hint_ipv4_src_udp_gtpu_ip,
2453                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2454         {ETH_RSS_L4_SRC_ONLY,
2455                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2456                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2457         {ETH_RSS_L3_DST_ONLY |
2458                 ETH_RSS_L4_SRC_ONLY,
2459                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2460                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2461         {ETH_RSS_L3_DST_ONLY |
2462                 ETH_RSS_L4_DST_ONLY,
2463                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2464                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2465         {ETH_RSS_L3_DST_ONLY,
2466                 &hdrs_hint_ipv4_dst_udp_gtpu_ip,
2467                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2468         {ETH_RSS_L4_DST_ONLY,
2469                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2470                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2471         {ETH_RSS_NONFRAG_IPV4_UDP |
2472                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2473                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2474                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2475         {ETH_RSS_NONFRAG_IPV4_UDP |
2476                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2477                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2478                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2479         {ETH_RSS_NONFRAG_IPV4_UDP |
2480                 ETH_RSS_L3_SRC_ONLY,
2481                 &hdrs_hint_ipv4_src_udp_gtpu_ip,
2482                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2483         {ETH_RSS_NONFRAG_IPV4_UDP |
2484                 ETH_RSS_L4_SRC_ONLY,
2485                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2486                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2487         {ETH_RSS_NONFRAG_IPV4_UDP |
2488                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2489                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2490                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2491         {ETH_RSS_NONFRAG_IPV4_UDP |
2492                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2493                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2494                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2495         {ETH_RSS_NONFRAG_IPV4_UDP |
2496                 ETH_RSS_L3_DST_ONLY,
2497                 &hdrs_hint_ipv4_dst_udp_gtpu_ip,
2498                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2499         {ETH_RSS_NONFRAG_IPV4_UDP |
2500                 ETH_RSS_L4_DST_ONLY,
2501                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2502                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2503         {ETH_RSS_NONFRAG_IPV4_UDP,
2504                 &hdrs_hint_ipv4_udp_gtpu_ip,
2505                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2506         /* IPv4 GTPU IP IPv6 UDP */
2507         {ETH_RSS_NONFRAG_IPV6_UDP |
2508                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2509                 &hdrs_hint_ipv6_src_udp_src_gtpu_ip,
2510                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2511         {ETH_RSS_NONFRAG_IPV6_UDP |
2512                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2513                 &hdrs_hint_ipv6_src_udp_dst_gtpu_ip,
2514                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2515         {ETH_RSS_NONFRAG_IPV6_UDP |
2516                 ETH_RSS_L3_SRC_ONLY,
2517                 &hdrs_hint_ipv6_src_udp_gtpu_ip,
2518                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2519         {ETH_RSS_NONFRAG_IPV6_UDP |
2520                 ETH_RSS_L4_SRC_ONLY,
2521                 &hdrs_hint_ipv6_udp_src_gtpu_ip,
2522                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2523         {ETH_RSS_NONFRAG_IPV6_UDP |
2524                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2525                 &hdrs_hint_ipv6_dst_udp_src_gtpu_ip,
2526                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2527         {ETH_RSS_NONFRAG_IPV6_UDP |
2528                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2529                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_ip,
2530                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2531         {ETH_RSS_NONFRAG_IPV6_UDP |
2532                 ETH_RSS_L3_DST_ONLY,
2533                 &hdrs_hint_ipv6_dst_udp_gtpu_ip,
2534                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2535         {ETH_RSS_NONFRAG_IPV6_UDP |
2536                 ETH_RSS_L4_DST_ONLY,
2537                 &hdrs_hint_ipv6_udp_dst_gtpu_ip,
2538                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2539         {ETH_RSS_NONFRAG_IPV6_UDP,
2540                 &hdrs_hint_ipv6_udp_gtpu_ip,
2541                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2542         /* IPv6 GTPU IP IPv4 UDP */
2543         {ETH_RSS_NONFRAG_IPV4_UDP |
2544                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2545                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2546                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2547         {ETH_RSS_NONFRAG_IPV4_UDP |
2548                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2549                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2550                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2551         {ETH_RSS_NONFRAG_IPV4_UDP |
2552                 ETH_RSS_L3_SRC_ONLY,
2553                 &hdrs_hint_ipv4_src_udp_gtpu_ip,
2554                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2555         {ETH_RSS_NONFRAG_IPV4_UDP |
2556                 ETH_RSS_L4_SRC_ONLY,
2557                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2558                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2559         {ETH_RSS_NONFRAG_IPV4_UDP |
2560                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2561                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2562                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2563         {ETH_RSS_NONFRAG_IPV4_UDP |
2564                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2565                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2566                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2567         {ETH_RSS_NONFRAG_IPV4_UDP |
2568                 ETH_RSS_L3_DST_ONLY,
2569                 &hdrs_hint_ipv4_dst_udp_gtpu_ip,
2570                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2571         {ETH_RSS_NONFRAG_IPV4_UDP |
2572                 ETH_RSS_L4_DST_ONLY,
2573                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2574                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2575         {ETH_RSS_NONFRAG_IPV4_UDP,
2576                 &hdrs_hint_ipv4_udp_gtpu_ip,
2577                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2578         /* IPv6 GTPU IP IPv6 UDP */
2579         {ETH_RSS_NONFRAG_IPV6_UDP |
2580                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2581                 &hdrs_hint_ipv6_src_udp_src_gtpu_ip,
2582                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2583         {ETH_RSS_NONFRAG_IPV6_UDP |
2584                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2585                 &hdrs_hint_ipv6_src_udp_dst_gtpu_ip,
2586                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2587         {ETH_RSS_NONFRAG_IPV6_UDP |
2588                 ETH_RSS_L3_SRC_ONLY,
2589                 &hdrs_hint_ipv6_src_udp_gtpu_ip,
2590                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2591         {ETH_RSS_NONFRAG_IPV6_UDP |
2592                 ETH_RSS_L4_SRC_ONLY,
2593                 &hdrs_hint_ipv6_udp_src_gtpu_ip,
2594                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2595         {ETH_RSS_NONFRAG_IPV6_UDP |
2596                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2597                 &hdrs_hint_ipv6_dst_udp_src_gtpu_ip,
2598                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2599         {ETH_RSS_NONFRAG_IPV6_UDP |
2600                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2601                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_ip,
2602                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2603         {ETH_RSS_NONFRAG_IPV6_UDP |
2604                 ETH_RSS_L3_DST_ONLY,
2605                 &hdrs_hint_ipv6_dst_udp_gtpu_ip,
2606                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2607         {ETH_RSS_NONFRAG_IPV6_UDP |
2608                 ETH_RSS_L4_DST_ONLY,
2609                 &hdrs_hint_ipv6_udp_dst_gtpu_ip,
2610                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2611         {ETH_RSS_NONFRAG_IPV6_UDP,
2612                 &hdrs_hint_ipv6_udp_gtpu_ip,
2613                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2614         /* IPv4 GTPU IP IPv4 TCP */
2615         {ETH_RSS_L3_SRC_ONLY |
2616                 ETH_RSS_L4_SRC_ONLY,
2617                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2618                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2619         {ETH_RSS_L3_SRC_ONLY |
2620                 ETH_RSS_L4_DST_ONLY,
2621                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2622                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2623         {ETH_RSS_L3_SRC_ONLY,
2624                 &hdrs_hint_ipv4_src_tcp_gtpu_ip,
2625                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2626         {ETH_RSS_L4_SRC_ONLY,
2627                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2628                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2629         {ETH_RSS_L3_DST_ONLY |
2630                 ETH_RSS_L4_SRC_ONLY,
2631                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2632                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2633         {ETH_RSS_L3_DST_ONLY |
2634                 ETH_RSS_L4_DST_ONLY,
2635                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2636                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2637         {ETH_RSS_L3_DST_ONLY,
2638                 &hdrs_hint_ipv4_dst_tcp_gtpu_ip,
2639                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2640         {ETH_RSS_L4_DST_ONLY,
2641                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2642                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2643         {ETH_RSS_NONFRAG_IPV4_TCP |
2644                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2645                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2646                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2647         {ETH_RSS_NONFRAG_IPV4_TCP |
2648                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2649                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2650                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2651         {ETH_RSS_NONFRAG_IPV4_TCP |
2652                 ETH_RSS_L3_SRC_ONLY,
2653                 &hdrs_hint_ipv4_src_tcp_gtpu_ip,
2654                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2655         {ETH_RSS_NONFRAG_IPV4_TCP |
2656                 ETH_RSS_L4_SRC_ONLY,
2657                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2658                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2659         {ETH_RSS_NONFRAG_IPV4_TCP |
2660                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2661                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2662                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2663         {ETH_RSS_NONFRAG_IPV4_TCP |
2664                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2665                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2666                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2667         {ETH_RSS_NONFRAG_IPV4_TCP |
2668                 ETH_RSS_L3_DST_ONLY,
2669                 &hdrs_hint_ipv4_dst_tcp_gtpu_ip,
2670                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2671         {ETH_RSS_NONFRAG_IPV4_TCP |
2672                 ETH_RSS_L4_DST_ONLY,
2673                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2674                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2675         {ETH_RSS_NONFRAG_IPV4_TCP,
2676                 &hdrs_hint_ipv4_tcp_gtpu_ip,
2677                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2678         /* IPv4 GTPU IP IPv6 TCP */
2679         {ETH_RSS_NONFRAG_IPV6_TCP |
2680                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2681                 &hdrs_hint_ipv6_src_tcp_src_gtpu_ip,
2682                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2683         {ETH_RSS_NONFRAG_IPV6_TCP |
2684                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2685                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_ip,
2686                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2687         {ETH_RSS_NONFRAG_IPV6_TCP |
2688                 ETH_RSS_L3_SRC_ONLY,
2689                 &hdrs_hint_ipv6_src_tcp_gtpu_ip,
2690                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2691         {ETH_RSS_NONFRAG_IPV6_TCP |
2692                 ETH_RSS_L4_SRC_ONLY,
2693                 &hdrs_hint_ipv6_tcp_src_gtpu_ip,
2694                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2695         {ETH_RSS_NONFRAG_IPV6_TCP |
2696                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2697                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_ip,
2698                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2699         {ETH_RSS_NONFRAG_IPV6_TCP |
2700                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2701                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip,
2702                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2703         {ETH_RSS_NONFRAG_IPV6_TCP |
2704                 ETH_RSS_L3_DST_ONLY,
2705                 &hdrs_hint_ipv6_dst_tcp_gtpu_ip,
2706                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2707         {ETH_RSS_NONFRAG_IPV6_TCP |
2708                 ETH_RSS_L4_DST_ONLY,
2709                 &hdrs_hint_ipv6_tcp_dst_gtpu_ip,
2710                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2711         {ETH_RSS_NONFRAG_IPV6_TCP,
2712                 &hdrs_hint_ipv6_tcp_gtpu_ip,
2713                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2714         /* IPv6 GTPU IP IPv4 TCP */
2715         {ETH_RSS_NONFRAG_IPV4_TCP |
2716                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2717                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2718                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2719         {ETH_RSS_NONFRAG_IPV4_TCP |
2720                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2721                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2722                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2723         {ETH_RSS_NONFRAG_IPV4_TCP |
2724                 ETH_RSS_L3_SRC_ONLY,
2725                 &hdrs_hint_ipv4_src_tcp_gtpu_ip,
2726                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2727         {ETH_RSS_NONFRAG_IPV4_TCP |
2728                 ETH_RSS_L4_SRC_ONLY,
2729                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2730                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2731         {ETH_RSS_NONFRAG_IPV4_TCP |
2732                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2733                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2734                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2735         {ETH_RSS_NONFRAG_IPV4_TCP |
2736                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2737                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2738                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2739         {ETH_RSS_NONFRAG_IPV4_TCP |
2740                 ETH_RSS_L3_DST_ONLY,
2741                 &hdrs_hint_ipv4_dst_tcp_gtpu_ip,
2742                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2743         {ETH_RSS_NONFRAG_IPV4_TCP |
2744                 ETH_RSS_L4_DST_ONLY,
2745                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2746                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2747         {ETH_RSS_NONFRAG_IPV4_TCP,
2748                 &hdrs_hint_ipv4_tcp_gtpu_ip,
2749                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2750         /* IPv6 GTPU IP IPv6 TCP */
2751         {ETH_RSS_NONFRAG_IPV6_TCP |
2752                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2753                 &hdrs_hint_ipv6_src_tcp_src_gtpu_ip,
2754                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2755         {ETH_RSS_NONFRAG_IPV6_TCP |
2756                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2757                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_ip,
2758                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2759         {ETH_RSS_NONFRAG_IPV6_TCP |
2760                 ETH_RSS_L3_SRC_ONLY,
2761                 &hdrs_hint_ipv6_src_tcp_gtpu_ip,
2762                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2763         {ETH_RSS_NONFRAG_IPV6_TCP |
2764                 ETH_RSS_L4_SRC_ONLY,
2765                 &hdrs_hint_ipv6_tcp_src_gtpu_ip,
2766                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2767         {ETH_RSS_NONFRAG_IPV6_TCP |
2768                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2769                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_ip,
2770                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2771         {ETH_RSS_NONFRAG_IPV6_TCP |
2772                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2773                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip,
2774                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2775         {ETH_RSS_NONFRAG_IPV6_TCP |
2776                 ETH_RSS_L3_DST_ONLY,
2777                 &hdrs_hint_ipv6_dst_tcp_gtpu_ip,
2778                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2779         {ETH_RSS_NONFRAG_IPV6_TCP |
2780                 ETH_RSS_L4_DST_ONLY,
2781                 &hdrs_hint_ipv6_tcp_dst_gtpu_ip,
2782                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2783         {ETH_RSS_NONFRAG_IPV6_TCP,
2784                 &hdrs_hint_ipv6_tcp_gtpu_ip,
2785                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2786         /* GTPU EH */
2787         /* IPv4 GTPU EH IPv4 */
2788         {ETH_RSS_L3_SRC_ONLY,
2789                 &hdrs_hint_ipv4_src_gtpu_eh,
2790                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2791         {ETH_RSS_L3_DST_ONLY,
2792                 &hdrs_hint_ipv4_dst_gtpu_eh,
2793                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2794         {ETH_RSS_IPV4 |
2795                 ETH_RSS_L3_SRC_ONLY,
2796                 &hdrs_hint_ipv4_src_gtpu_eh,
2797                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2798         {ETH_RSS_IPV4 |
2799                 ETH_RSS_L3_DST_ONLY,
2800                 &hdrs_hint_ipv4_dst_gtpu_eh,
2801                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2802         {ETH_RSS_IPV4,
2803                 &hdrs_hint_ipv4_gtpu_eh,
2804                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2805         /* IPv4 GTPU EH IPv6 */
2806         {ETH_RSS_IPV6 |
2807                 ETH_RSS_L3_SRC_ONLY,
2808                 &hdrs_hint_ipv6_src_gtpu_eh,
2809                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2810         {ETH_RSS_IPV6 |
2811                 ETH_RSS_L3_DST_ONLY,
2812                 &hdrs_hint_ipv6_dst_gtpu_eh,
2813                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2814         {ETH_RSS_IPV6,
2815                 &hdrs_hint_ipv6_gtpu_eh,
2816                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2817         /* IPv6 GTPU EH IPv4 */
2818         {ETH_RSS_IPV4 |
2819                 ETH_RSS_L3_SRC_ONLY,
2820                 &hdrs_hint_ipv4_src_gtpu_eh,
2821                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2822         {ETH_RSS_IPV4 |
2823                 ETH_RSS_L3_DST_ONLY,
2824                 &hdrs_hint_ipv4_dst_gtpu_eh,
2825                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2826         {ETH_RSS_IPV4,
2827                 &hdrs_hint_ipv4_gtpu_eh,
2828                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2829         /* IPv6 GTPU EH IPv6 */
2830         {ETH_RSS_IPV6 |
2831                 ETH_RSS_L3_SRC_ONLY,
2832                 &hdrs_hint_ipv6_src_gtpu_eh,
2833                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2834         {ETH_RSS_IPV6 |
2835                 ETH_RSS_L3_DST_ONLY,
2836                 &hdrs_hint_ipv6_dst_gtpu_eh,
2837                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2838         {ETH_RSS_IPV6,
2839                 &hdrs_hint_ipv6_gtpu_eh,
2840                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2841         /* IPv4 GTPU EH IPv4 UDP */
2842         {ETH_RSS_L3_SRC_ONLY |
2843                 ETH_RSS_L4_SRC_ONLY,
2844                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2845                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2846         {ETH_RSS_L3_SRC_ONLY |
2847                 ETH_RSS_L4_DST_ONLY,
2848                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2849                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2850         {ETH_RSS_L3_SRC_ONLY,
2851                 &hdrs_hint_ipv4_src_udp_gtpu_eh,
2852                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2853         {ETH_RSS_L4_SRC_ONLY,
2854                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2855                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2856         {ETH_RSS_L3_DST_ONLY |
2857                 ETH_RSS_L4_SRC_ONLY,
2858                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2859                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2860         {ETH_RSS_L3_DST_ONLY |
2861                 ETH_RSS_L4_DST_ONLY,
2862                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2863                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2864         {ETH_RSS_L3_DST_ONLY,
2865                 &hdrs_hint_ipv4_dst_udp_gtpu_eh,
2866                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2867         {ETH_RSS_L4_DST_ONLY,
2868                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2869                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2870         {ETH_RSS_NONFRAG_IPV4_UDP |
2871                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2872                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2873                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2874         {ETH_RSS_NONFRAG_IPV4_UDP |
2875                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2876                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2877                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2878         {ETH_RSS_NONFRAG_IPV4_UDP |
2879                 ETH_RSS_L3_SRC_ONLY,
2880                 &hdrs_hint_ipv4_src_udp_gtpu_eh,
2881                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2882         {ETH_RSS_NONFRAG_IPV4_UDP |
2883                 ETH_RSS_L4_SRC_ONLY,
2884                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2885                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2886         {ETH_RSS_NONFRAG_IPV4_UDP |
2887                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2888                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2889                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2890         {ETH_RSS_NONFRAG_IPV4_UDP |
2891                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2892                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2893                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2894         {ETH_RSS_NONFRAG_IPV4_UDP |
2895                 ETH_RSS_L3_DST_ONLY,
2896                 &hdrs_hint_ipv4_dst_udp_gtpu_eh,
2897                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2898         {ETH_RSS_NONFRAG_IPV4_UDP |
2899                 ETH_RSS_L4_DST_ONLY,
2900                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2901                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2902         {ETH_RSS_NONFRAG_IPV4_UDP,
2903                 &hdrs_hint_ipv4_udp_gtpu_eh,
2904                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2905         /* IPv4 GTPU EH IPv6 UDP */
2906         {ETH_RSS_NONFRAG_IPV6_UDP |
2907                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2908                 &hdrs_hint_ipv6_src_udp_src_gtpu_eh,
2909                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2910         {ETH_RSS_NONFRAG_IPV6_UDP |
2911                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2912                 &hdrs_hint_ipv6_src_udp_dst_gtpu_eh,
2913                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2914         {ETH_RSS_NONFRAG_IPV6_UDP |
2915                 ETH_RSS_L3_SRC_ONLY,
2916                 &hdrs_hint_ipv6_src_udp_gtpu_eh,
2917                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2918         {ETH_RSS_NONFRAG_IPV6_UDP |
2919                 ETH_RSS_L4_SRC_ONLY,
2920                 &hdrs_hint_ipv6_udp_src_gtpu_eh,
2921                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2922         {ETH_RSS_NONFRAG_IPV6_UDP |
2923                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2924                 &hdrs_hint_ipv6_dst_udp_src_gtpu_eh,
2925                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2926         {ETH_RSS_NONFRAG_IPV6_UDP |
2927                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2928                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_eh,
2929                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2930         {ETH_RSS_NONFRAG_IPV6_UDP |
2931                 ETH_RSS_L3_DST_ONLY,
2932                 &hdrs_hint_ipv6_dst_udp_gtpu_eh,
2933                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2934         {ETH_RSS_NONFRAG_IPV6_UDP |
2935                 ETH_RSS_L4_DST_ONLY,
2936                 &hdrs_hint_ipv6_udp_dst_gtpu_eh,
2937                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2938         {ETH_RSS_NONFRAG_IPV6_UDP,
2939                 &hdrs_hint_ipv6_udp_gtpu_eh,
2940                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2941         /* IPv6 GTPU EH IPv4 UDP */
2942         {ETH_RSS_NONFRAG_IPV4_UDP |
2943                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2944                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2945                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2946         {ETH_RSS_NONFRAG_IPV4_UDP |
2947                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2948                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2949                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2950         {ETH_RSS_NONFRAG_IPV4_UDP |
2951                 ETH_RSS_L3_SRC_ONLY,
2952                 &hdrs_hint_ipv4_src_udp_gtpu_eh,
2953                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2954         {ETH_RSS_NONFRAG_IPV4_UDP |
2955                 ETH_RSS_L4_SRC_ONLY,
2956                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2957                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2958         {ETH_RSS_NONFRAG_IPV4_UDP |
2959                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2960                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2961                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2962         {ETH_RSS_NONFRAG_IPV4_UDP |
2963                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2964                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2965                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2966         {ETH_RSS_NONFRAG_IPV4_UDP |
2967                 ETH_RSS_L3_DST_ONLY,
2968                 &hdrs_hint_ipv4_dst_udp_gtpu_eh,
2969                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2970         {ETH_RSS_NONFRAG_IPV4_UDP |
2971                 ETH_RSS_L4_DST_ONLY,
2972                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2973                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2974         {ETH_RSS_NONFRAG_IPV4_UDP,
2975                 &hdrs_hint_ipv4_udp_gtpu_eh,
2976                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2977         /* IPv6 GTPU EH IPv6 UDP */
2978         {ETH_RSS_NONFRAG_IPV6_UDP |
2979                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2980                 &hdrs_hint_ipv6_src_udp_src_gtpu_eh,
2981                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2982         {ETH_RSS_NONFRAG_IPV6_UDP |
2983                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2984                 &hdrs_hint_ipv6_src_udp_dst_gtpu_eh,
2985                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2986         {ETH_RSS_NONFRAG_IPV6_UDP |
2987                 ETH_RSS_L3_SRC_ONLY,
2988                 &hdrs_hint_ipv6_src_udp_gtpu_eh,
2989                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2990         {ETH_RSS_NONFRAG_IPV6_UDP |
2991                 ETH_RSS_L4_SRC_ONLY,
2992                 &hdrs_hint_ipv6_udp_src_gtpu_eh,
2993                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2994         {ETH_RSS_NONFRAG_IPV6_UDP |
2995                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2996                 &hdrs_hint_ipv6_dst_udp_src_gtpu_eh,
2997                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2998         {ETH_RSS_NONFRAG_IPV6_UDP |
2999                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3000                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_eh,
3001                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
3002         {ETH_RSS_NONFRAG_IPV6_UDP |
3003                 ETH_RSS_L3_DST_ONLY,
3004                 &hdrs_hint_ipv6_dst_udp_gtpu_eh,
3005                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
3006         {ETH_RSS_NONFRAG_IPV6_UDP |
3007                 ETH_RSS_L4_DST_ONLY,
3008                 &hdrs_hint_ipv6_udp_dst_gtpu_eh,
3009                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
3010         {ETH_RSS_NONFRAG_IPV6_UDP,
3011                 &hdrs_hint_ipv6_udp_gtpu_eh,
3012                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
3013         /* IPv4 GTPU EH IPv4 TCP */
3014         {ETH_RSS_L3_SRC_ONLY |
3015                 ETH_RSS_L4_SRC_ONLY,
3016                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
3017                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3018         {ETH_RSS_L3_SRC_ONLY |
3019                 ETH_RSS_L4_DST_ONLY,
3020                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
3021                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3022         {ETH_RSS_L3_SRC_ONLY,
3023                 &hdrs_hint_ipv4_src_tcp_gtpu_eh,
3024                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3025         {ETH_RSS_L4_SRC_ONLY,
3026                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
3027                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3028         {ETH_RSS_L3_DST_ONLY |
3029                 ETH_RSS_L4_SRC_ONLY,
3030                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
3031                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3032         {ETH_RSS_L3_DST_ONLY |
3033                 ETH_RSS_L4_DST_ONLY,
3034                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
3035                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3036         {ETH_RSS_L3_DST_ONLY,
3037                 &hdrs_hint_ipv4_dst_tcp_gtpu_eh,
3038                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3039         {ETH_RSS_L4_DST_ONLY,
3040                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
3041                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3042         {ETH_RSS_NONFRAG_IPV4_TCP |
3043                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3044                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
3045                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3046         {ETH_RSS_NONFRAG_IPV4_TCP |
3047                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3048                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
3049                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3050         {ETH_RSS_NONFRAG_IPV4_TCP |
3051                 ETH_RSS_L3_SRC_ONLY,
3052                 &hdrs_hint_ipv4_src_tcp_gtpu_eh,
3053                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3054         {ETH_RSS_NONFRAG_IPV4_TCP |
3055                 ETH_RSS_L4_SRC_ONLY,
3056                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
3057                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3058         {ETH_RSS_NONFRAG_IPV4_TCP |
3059                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3060                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
3061                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3062         {ETH_RSS_NONFRAG_IPV4_TCP |
3063                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3064                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
3065                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3066         {ETH_RSS_NONFRAG_IPV4_TCP |
3067                 ETH_RSS_L3_DST_ONLY,
3068                 &hdrs_hint_ipv4_dst_tcp_gtpu_eh,
3069                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3070         {ETH_RSS_NONFRAG_IPV4_TCP |
3071                 ETH_RSS_L4_DST_ONLY,
3072                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
3073                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3074         {ETH_RSS_NONFRAG_IPV4_TCP,
3075                 &hdrs_hint_ipv4_tcp_gtpu_eh,
3076                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3077         /* IPv4 GTPU EH IPv6 TCP */
3078         {ETH_RSS_NONFRAG_IPV6_TCP |
3079                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3080                 &hdrs_hint_ipv6_src_tcp_src_gtpu_eh,
3081                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3082         {ETH_RSS_NONFRAG_IPV6_TCP |
3083                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3084                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_eh,
3085                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3086         {ETH_RSS_NONFRAG_IPV6_TCP |
3087                 ETH_RSS_L3_SRC_ONLY,
3088                 &hdrs_hint_ipv6_src_tcp_gtpu_eh,
3089                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3090         {ETH_RSS_NONFRAG_IPV6_TCP |
3091                 ETH_RSS_L4_SRC_ONLY,
3092                 &hdrs_hint_ipv6_tcp_src_gtpu_eh,
3093                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3094         {ETH_RSS_NONFRAG_IPV6_TCP |
3095                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3096                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_eh,
3097                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3098         {ETH_RSS_NONFRAG_IPV6_TCP |
3099                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3100                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh,
3101                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3102         {ETH_RSS_NONFRAG_IPV6_TCP |
3103                 ETH_RSS_L3_DST_ONLY,
3104                 &hdrs_hint_ipv6_dst_tcp_gtpu_eh,
3105                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3106         {ETH_RSS_NONFRAG_IPV6_TCP |
3107                 ETH_RSS_L4_DST_ONLY,
3108                 &hdrs_hint_ipv6_tcp_dst_gtpu_eh,
3109                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3110         {ETH_RSS_NONFRAG_IPV6_TCP,
3111                 &hdrs_hint_ipv6_tcp_gtpu_eh,
3112                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3113         /* IPv6 GTPU EH IPv4 TCP */
3114         {ETH_RSS_NONFRAG_IPV4_TCP |
3115                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3116                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
3117                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3118         {ETH_RSS_NONFRAG_IPV4_TCP |
3119                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3120                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
3121                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3122         {ETH_RSS_NONFRAG_IPV4_TCP |
3123                 ETH_RSS_L3_SRC_ONLY,
3124                 &hdrs_hint_ipv4_src_tcp_gtpu_eh,
3125                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3126         {ETH_RSS_NONFRAG_IPV4_TCP |
3127                 ETH_RSS_L4_SRC_ONLY,
3128                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
3129                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3130         {ETH_RSS_NONFRAG_IPV4_TCP |
3131                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3132                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
3133                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3134         {ETH_RSS_NONFRAG_IPV4_TCP |
3135                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3136                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
3137                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3138         {ETH_RSS_NONFRAG_IPV4_TCP |
3139                 ETH_RSS_L3_DST_ONLY,
3140                 &hdrs_hint_ipv4_dst_tcp_gtpu_eh,
3141                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3142         {ETH_RSS_NONFRAG_IPV4_TCP |
3143                 ETH_RSS_L4_DST_ONLY,
3144                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
3145                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3146         {ETH_RSS_NONFRAG_IPV4_TCP,
3147                 &hdrs_hint_ipv4_tcp_gtpu_eh,
3148                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
3149         /* IPv6 GTPU EH IPv6 TCP */
3150         {ETH_RSS_NONFRAG_IPV6_TCP |
3151                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3152                 &hdrs_hint_ipv6_src_tcp_src_gtpu_eh,
3153                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3154         {ETH_RSS_NONFRAG_IPV6_TCP |
3155                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3156                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_eh,
3157                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3158         {ETH_RSS_NONFRAG_IPV6_TCP |
3159                 ETH_RSS_L3_SRC_ONLY,
3160                 &hdrs_hint_ipv6_src_tcp_gtpu_eh,
3161                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3162         {ETH_RSS_NONFRAG_IPV6_TCP |
3163                 ETH_RSS_L4_SRC_ONLY,
3164                 &hdrs_hint_ipv6_tcp_src_gtpu_eh,
3165                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3166         {ETH_RSS_NONFRAG_IPV6_TCP |
3167                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3168                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_eh,
3169                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3170         {ETH_RSS_NONFRAG_IPV6_TCP |
3171                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3172                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh,
3173                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3174         {ETH_RSS_NONFRAG_IPV6_TCP |
3175                 ETH_RSS_L3_DST_ONLY,
3176                 &hdrs_hint_ipv6_dst_tcp_gtpu_eh,
3177                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3178         {ETH_RSS_NONFRAG_IPV6_TCP |
3179                 ETH_RSS_L4_DST_ONLY,
3180                 &hdrs_hint_ipv6_tcp_dst_gtpu_eh,
3181                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3182         {ETH_RSS_NONFRAG_IPV6_TCP,
3183                 &hdrs_hint_ipv6_tcp_gtpu_eh,
3184                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
3185         /* GTPU EH UP */
3186         /* IPv4 GTPU EH UP IPv4 */
3187         {ETH_RSS_L3_SRC_ONLY,
3188                 &hdrs_hint_ipv4_src_gtpu_up,
3189                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3190         {ETH_RSS_L3_DST_ONLY,
3191                 &hdrs_hint_ipv4_dst_gtpu_up,
3192                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3193         {ETH_RSS_IPV4 |
3194                 ETH_RSS_L3_SRC_ONLY,
3195                 &hdrs_hint_ipv4_src_gtpu_up,
3196                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3197         {ETH_RSS_IPV4 |
3198                 ETH_RSS_L3_DST_ONLY,
3199                 &hdrs_hint_ipv4_dst_gtpu_up,
3200                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3201         {ETH_RSS_IPV4,
3202                 &hdrs_hint_ipv4_gtpu_up,
3203                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3204         /* IPv4 GTPU EH UP IPv6 */
3205         {ETH_RSS_IPV6 |
3206                 ETH_RSS_L3_SRC_ONLY,
3207                 &hdrs_hint_ipv6_src_gtpu_up,
3208                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3209         {ETH_RSS_IPV6 |
3210                 ETH_RSS_L3_DST_ONLY,
3211                 &hdrs_hint_ipv6_dst_gtpu_up,
3212                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3213         {ETH_RSS_IPV6,
3214                 &hdrs_hint_ipv6_gtpu_up,
3215                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3216         /* IPv6 GTPU EH UP IPv4 */
3217         {ETH_RSS_IPV4 |
3218                 ETH_RSS_L3_SRC_ONLY,
3219                 &hdrs_hint_ipv4_src_gtpu_up,
3220                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3221         {ETH_RSS_IPV4 |
3222                 ETH_RSS_L3_DST_ONLY,
3223                 &hdrs_hint_ipv4_dst_gtpu_up,
3224                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3225         {ETH_RSS_IPV4,
3226                 &hdrs_hint_ipv4_gtpu_up,
3227                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
3228         /* IPv6 GTPU EH UP IPv6 */
3229         {ETH_RSS_IPV6 |
3230                 ETH_RSS_L3_SRC_ONLY,
3231                 &hdrs_hint_ipv6_src_gtpu_up,
3232                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3233         {ETH_RSS_IPV6 |
3234                 ETH_RSS_L3_DST_ONLY,
3235                 &hdrs_hint_ipv6_dst_gtpu_up,
3236                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3237         {ETH_RSS_IPV6,
3238                 &hdrs_hint_ipv6_gtpu_up,
3239                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3240         /* IPv4 GTPU EH UP IPv4 UDP */
3241         {ETH_RSS_L3_SRC_ONLY |
3242                 ETH_RSS_L4_SRC_ONLY,
3243                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
3244                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3245         {ETH_RSS_L3_SRC_ONLY |
3246                 ETH_RSS_L4_DST_ONLY,
3247                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
3248                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3249         {ETH_RSS_L3_SRC_ONLY,
3250                 &hdrs_hint_ipv4_src_udp_gtpu_up,
3251                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3252         {ETH_RSS_L4_SRC_ONLY,
3253                 &hdrs_hint_ipv4_udp_src_gtpu_up,
3254                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3255         {ETH_RSS_L3_DST_ONLY |
3256                 ETH_RSS_L4_SRC_ONLY,
3257                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
3258                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3259         {ETH_RSS_L3_DST_ONLY |
3260                 ETH_RSS_L4_DST_ONLY,
3261                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
3262                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3263         {ETH_RSS_L3_DST_ONLY,
3264                 &hdrs_hint_ipv4_dst_udp_gtpu_up,
3265                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3266         {ETH_RSS_L4_DST_ONLY,
3267                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
3268                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3269         {ETH_RSS_NONFRAG_IPV4_UDP |
3270                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3271                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
3272                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3273         {ETH_RSS_NONFRAG_IPV4_UDP |
3274                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3275                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
3276                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3277         {ETH_RSS_NONFRAG_IPV4_UDP |
3278                 ETH_RSS_L3_SRC_ONLY,
3279                 &hdrs_hint_ipv4_src_udp_gtpu_up,
3280                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3281         {ETH_RSS_NONFRAG_IPV4_UDP |
3282                 ETH_RSS_L4_SRC_ONLY,
3283                 &hdrs_hint_ipv4_udp_src_gtpu_up,
3284                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3285         {ETH_RSS_NONFRAG_IPV4_UDP |
3286                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3287                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
3288                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3289         {ETH_RSS_NONFRAG_IPV4_UDP |
3290                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3291                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
3292                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3293         {ETH_RSS_NONFRAG_IPV4_UDP |
3294                 ETH_RSS_L3_DST_ONLY,
3295                 &hdrs_hint_ipv4_dst_udp_gtpu_up,
3296                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3297         {ETH_RSS_NONFRAG_IPV4_UDP |
3298                 ETH_RSS_L4_DST_ONLY,
3299                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
3300                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3301         {ETH_RSS_NONFRAG_IPV4_UDP,
3302                 &hdrs_hint_ipv4_udp_gtpu_up,
3303                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3304         /* IPv4 GTPU EH UP IPv6 UDP */
3305         {ETH_RSS_NONFRAG_IPV6_UDP |
3306                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3307                 &hdrs_hint_ipv6_src_udp_src_gtpu_up,
3308                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3309         {ETH_RSS_NONFRAG_IPV6_UDP |
3310                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3311                 &hdrs_hint_ipv6_src_udp_dst_gtpu_up,
3312                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3313         {ETH_RSS_NONFRAG_IPV6_UDP |
3314                 ETH_RSS_L3_SRC_ONLY,
3315                 &hdrs_hint_ipv6_src_udp_gtpu_up,
3316                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3317         {ETH_RSS_NONFRAG_IPV6_UDP |
3318                 ETH_RSS_L4_SRC_ONLY,
3319                 &hdrs_hint_ipv6_udp_src_gtpu_up,
3320                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3321         {ETH_RSS_NONFRAG_IPV6_UDP |
3322                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3323                 &hdrs_hint_ipv6_dst_udp_src_gtpu_up,
3324                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3325         {ETH_RSS_NONFRAG_IPV6_UDP |
3326                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3327                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_up,
3328                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3329         {ETH_RSS_NONFRAG_IPV6_UDP |
3330                 ETH_RSS_L3_DST_ONLY,
3331                 &hdrs_hint_ipv6_dst_udp_gtpu_up,
3332                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3333         {ETH_RSS_NONFRAG_IPV6_UDP |
3334                 ETH_RSS_L4_DST_ONLY,
3335                 &hdrs_hint_ipv6_udp_dst_gtpu_up,
3336                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3337         {ETH_RSS_NONFRAG_IPV6_UDP,
3338                 &hdrs_hint_ipv6_udp_gtpu_up,
3339                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3340         /* IPv6 GTPU EH UP IPv4 UDP */
3341         {ETH_RSS_NONFRAG_IPV4_UDP |
3342                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3343                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
3344                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3345         {ETH_RSS_NONFRAG_IPV4_UDP |
3346                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3347                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
3348                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3349         {ETH_RSS_NONFRAG_IPV4_UDP |
3350                 ETH_RSS_L3_SRC_ONLY,
3351                 &hdrs_hint_ipv4_src_udp_gtpu_up,
3352                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3353         {ETH_RSS_NONFRAG_IPV4_UDP |
3354                 ETH_RSS_L4_SRC_ONLY,
3355                 &hdrs_hint_ipv4_udp_src_gtpu_up,
3356                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3357         {ETH_RSS_NONFRAG_IPV4_UDP |
3358                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3359                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
3360                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3361         {ETH_RSS_NONFRAG_IPV4_UDP |
3362                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3363                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
3364                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3365         {ETH_RSS_NONFRAG_IPV4_UDP |
3366                 ETH_RSS_L3_DST_ONLY,
3367                 &hdrs_hint_ipv4_dst_udp_gtpu_up,
3368                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3369         {ETH_RSS_NONFRAG_IPV4_UDP |
3370                 ETH_RSS_L4_DST_ONLY,
3371                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
3372                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3373         {ETH_RSS_NONFRAG_IPV4_UDP,
3374                 &hdrs_hint_ipv4_udp_gtpu_up,
3375                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3376         /* IPv6 GTPU EH UP IPv6 UDP */
3377         {ETH_RSS_NONFRAG_IPV6_UDP |
3378                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3379                 &hdrs_hint_ipv6_src_udp_src_gtpu_up,
3380                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3381         {ETH_RSS_NONFRAG_IPV6_UDP |
3382                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3383                 &hdrs_hint_ipv6_src_udp_dst_gtpu_up,
3384                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3385         {ETH_RSS_NONFRAG_IPV6_UDP |
3386                 ETH_RSS_L3_SRC_ONLY,
3387                 &hdrs_hint_ipv6_src_udp_gtpu_up,
3388                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3389         {ETH_RSS_NONFRAG_IPV6_UDP |
3390                 ETH_RSS_L4_SRC_ONLY,
3391                 &hdrs_hint_ipv6_udp_src_gtpu_up,
3392                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3393         {ETH_RSS_NONFRAG_IPV6_UDP |
3394                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3395                 &hdrs_hint_ipv6_dst_udp_src_gtpu_up,
3396                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3397         {ETH_RSS_NONFRAG_IPV6_UDP |
3398                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3399                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_up,
3400                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3401         {ETH_RSS_NONFRAG_IPV6_UDP |
3402                 ETH_RSS_L3_DST_ONLY,
3403                 &hdrs_hint_ipv6_dst_udp_gtpu_up,
3404                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3405         {ETH_RSS_NONFRAG_IPV6_UDP |
3406                 ETH_RSS_L4_DST_ONLY,
3407                 &hdrs_hint_ipv6_udp_dst_gtpu_up,
3408                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3409         {ETH_RSS_NONFRAG_IPV6_UDP,
3410                 &hdrs_hint_ipv6_udp_gtpu_up,
3411                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3412         /* IPv4 GTPU EH UP IPv4 TCP */
3413         {ETH_RSS_L3_SRC_ONLY |
3414                 ETH_RSS_L4_SRC_ONLY,
3415                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3416                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3417         {ETH_RSS_L3_SRC_ONLY |
3418                 ETH_RSS_L4_DST_ONLY,
3419                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3420                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3421         {ETH_RSS_L3_SRC_ONLY,
3422                 &hdrs_hint_ipv4_src_tcp_gtpu_up,
3423                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3424         {ETH_RSS_L4_SRC_ONLY,
3425                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3426                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3427         {ETH_RSS_L3_DST_ONLY |
3428                 ETH_RSS_L4_SRC_ONLY,
3429                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3430                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3431         {ETH_RSS_L3_DST_ONLY |
3432                 ETH_RSS_L4_DST_ONLY,
3433                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3434                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3435         {ETH_RSS_L3_DST_ONLY,
3436                 &hdrs_hint_ipv4_dst_tcp_gtpu_up,
3437                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3438         {ETH_RSS_L4_DST_ONLY,
3439                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3440                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3441         {ETH_RSS_NONFRAG_IPV4_TCP |
3442                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3443                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3444                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3445         {ETH_RSS_NONFRAG_IPV4_TCP |
3446                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3447                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3448                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3449         {ETH_RSS_NONFRAG_IPV4_TCP |
3450                 ETH_RSS_L3_SRC_ONLY,
3451                 &hdrs_hint_ipv4_src_tcp_gtpu_up,
3452                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3453         {ETH_RSS_NONFRAG_IPV4_TCP |
3454                 ETH_RSS_L4_SRC_ONLY,
3455                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3456                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3457         {ETH_RSS_NONFRAG_IPV4_TCP |
3458                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3459                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3460                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3461         {ETH_RSS_NONFRAG_IPV4_TCP |
3462                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3463                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3464                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3465         {ETH_RSS_NONFRAG_IPV4_TCP |
3466                 ETH_RSS_L3_DST_ONLY,
3467                 &hdrs_hint_ipv4_dst_tcp_gtpu_up,
3468                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3469         {ETH_RSS_NONFRAG_IPV4_TCP |
3470                 ETH_RSS_L4_DST_ONLY,
3471                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3472                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3473         {ETH_RSS_NONFRAG_IPV4_TCP,
3474                 &hdrs_hint_ipv4_tcp_gtpu_up,
3475                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3476         /* IPv4 GTPU EH UP IPv6 TCP */
3477         {ETH_RSS_NONFRAG_IPV6_TCP |
3478                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3479                 &hdrs_hint_ipv6_src_tcp_src_gtpu_up,
3480                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3481         {ETH_RSS_NONFRAG_IPV6_TCP |
3482                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3483                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_up,
3484                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3485         {ETH_RSS_NONFRAG_IPV6_TCP |
3486                 ETH_RSS_L3_SRC_ONLY,
3487                 &hdrs_hint_ipv6_src_tcp_gtpu_up,
3488                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3489         {ETH_RSS_NONFRAG_IPV6_TCP |
3490                 ETH_RSS_L4_SRC_ONLY,
3491                 &hdrs_hint_ipv6_tcp_src_gtpu_up,
3492                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3493         {ETH_RSS_NONFRAG_IPV6_TCP |
3494                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3495                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_up,
3496                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3497         {ETH_RSS_NONFRAG_IPV6_TCP |
3498                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3499                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_up,
3500                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3501         {ETH_RSS_NONFRAG_IPV6_TCP |
3502                 ETH_RSS_L3_DST_ONLY,
3503                 &hdrs_hint_ipv6_dst_tcp_gtpu_up,
3504                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3505         {ETH_RSS_NONFRAG_IPV6_TCP |
3506                 ETH_RSS_L4_DST_ONLY,
3507                 &hdrs_hint_ipv6_tcp_dst_gtpu_up,
3508                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3509         {ETH_RSS_NONFRAG_IPV6_TCP,
3510                 &hdrs_hint_ipv6_tcp_gtpu_up,
3511                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3512         /* IPv6 GTPU EH UP IPv4 TCP */
3513         {ETH_RSS_NONFRAG_IPV4_TCP |
3514                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3515                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3516                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3517         {ETH_RSS_NONFRAG_IPV4_TCP |
3518                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3519                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3520                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3521         {ETH_RSS_NONFRAG_IPV4_TCP |
3522                 ETH_RSS_L3_SRC_ONLY,
3523                 &hdrs_hint_ipv4_src_tcp_gtpu_up,
3524                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3525         {ETH_RSS_NONFRAG_IPV4_TCP |
3526                 ETH_RSS_L4_SRC_ONLY,
3527                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3528                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3529         {ETH_RSS_NONFRAG_IPV4_TCP |
3530                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3531                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3532                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3533         {ETH_RSS_NONFRAG_IPV4_TCP |
3534                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3535                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3536                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3537         {ETH_RSS_NONFRAG_IPV4_TCP |
3538                 ETH_RSS_L3_DST_ONLY,
3539                 &hdrs_hint_ipv4_dst_tcp_gtpu_up,
3540                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3541         {ETH_RSS_NONFRAG_IPV4_TCP |
3542                 ETH_RSS_L4_DST_ONLY,
3543                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3544                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3545         {ETH_RSS_NONFRAG_IPV4_TCP,
3546                 &hdrs_hint_ipv4_tcp_gtpu_up,
3547                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3548         /* IPv6 GTPU EH UP IPv6 TCP */
3549         {ETH_RSS_NONFRAG_IPV6_TCP |
3550                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3551                 &hdrs_hint_ipv6_src_tcp_src_gtpu_up,
3552                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3553         {ETH_RSS_NONFRAG_IPV6_TCP |
3554                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3555                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_up,
3556                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3557         {ETH_RSS_NONFRAG_IPV6_TCP |
3558                 ETH_RSS_L3_SRC_ONLY,
3559                 &hdrs_hint_ipv6_src_tcp_gtpu_up,
3560                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3561         {ETH_RSS_NONFRAG_IPV6_TCP |
3562                 ETH_RSS_L4_SRC_ONLY,
3563                 &hdrs_hint_ipv6_tcp_src_gtpu_up,
3564                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3565         {ETH_RSS_NONFRAG_IPV6_TCP |
3566                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3567                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_up,
3568                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3569         {ETH_RSS_NONFRAG_IPV6_TCP |
3570                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3571                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_up,
3572                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3573         {ETH_RSS_NONFRAG_IPV6_TCP |
3574                 ETH_RSS_L3_DST_ONLY,
3575                 &hdrs_hint_ipv6_dst_tcp_gtpu_up,
3576                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3577         {ETH_RSS_NONFRAG_IPV6_TCP |
3578                 ETH_RSS_L4_DST_ONLY,
3579                 &hdrs_hint_ipv6_tcp_dst_gtpu_up,
3580                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3581         {ETH_RSS_NONFRAG_IPV6_TCP,
3582                 &hdrs_hint_ipv6_tcp_gtpu_up,
3583                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3584         /* GTPU EH DWN */
3585         /* IPv4 GTPU EH DWN IPv4 */
3586         {ETH_RSS_L3_SRC_ONLY,
3587                 &hdrs_hint_ipv4_src_gtpu_dwn,
3588                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3589         {ETH_RSS_L3_DST_ONLY,
3590                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3591                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3592         {ETH_RSS_IPV4 |
3593                 ETH_RSS_L3_SRC_ONLY,
3594                 &hdrs_hint_ipv4_src_gtpu_dwn,
3595                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3596         {ETH_RSS_IPV4 |
3597                 ETH_RSS_L3_DST_ONLY,
3598                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3599                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3600         {ETH_RSS_IPV4,
3601                 &hdrs_hint_ipv4_gtpu_dwn,
3602                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3603         /* IPv4 GTPU EH DWN IPv6 */
3604         {ETH_RSS_IPV6 |
3605                 ETH_RSS_L3_SRC_ONLY,
3606                 &hdrs_hint_ipv6_src_gtpu_dwn,
3607                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3608         {ETH_RSS_IPV6 |
3609                 ETH_RSS_L3_DST_ONLY,
3610                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3611                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3612         {ETH_RSS_IPV6,
3613                 &hdrs_hint_ipv6_gtpu_dwn,
3614                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3615         /* IPv6 GTPU EH DWN IPv4 */
3616         {ETH_RSS_IPV4 |
3617                 ETH_RSS_L3_SRC_ONLY,
3618                 &hdrs_hint_ipv4_src_gtpu_dwn,
3619                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3620         {ETH_RSS_IPV4 |
3621                 ETH_RSS_L3_DST_ONLY,
3622                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3623                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3624         {ETH_RSS_IPV4,
3625                 &hdrs_hint_ipv4_gtpu_dwn,
3626                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3627         /* IPv6 GTPU EH DWN IPv6 */
3628         {ETH_RSS_IPV6 |
3629                 ETH_RSS_L3_SRC_ONLY,
3630                 &hdrs_hint_ipv6_src_gtpu_dwn,
3631                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3632         {ETH_RSS_IPV6 |
3633                 ETH_RSS_L3_DST_ONLY,
3634                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3635                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3636         {ETH_RSS_IPV6,
3637                 &hdrs_hint_ipv6_gtpu_dwn,
3638                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3639         /* IPv4 GTPU EH DWN IPv4 UDP */
3640         {ETH_RSS_L3_SRC_ONLY |
3641                 ETH_RSS_L4_SRC_ONLY,
3642                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3643                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3644         {ETH_RSS_L3_SRC_ONLY |
3645                 ETH_RSS_L4_DST_ONLY,
3646                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3647                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3648         {ETH_RSS_L3_SRC_ONLY,
3649                 &hdrs_hint_ipv4_src_udp_gtpu_dwn,
3650                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3651         {ETH_RSS_L4_SRC_ONLY,
3652                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3653                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3654         {ETH_RSS_L3_DST_ONLY |
3655                 ETH_RSS_L4_SRC_ONLY,
3656                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3657                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3658         {ETH_RSS_L3_DST_ONLY |
3659                 ETH_RSS_L4_DST_ONLY,
3660                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3661                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3662         {ETH_RSS_L3_DST_ONLY,
3663                 &hdrs_hint_ipv4_dst_udp_gtpu_dwn,
3664                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3665         {ETH_RSS_L4_DST_ONLY,
3666                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3667                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3668         {ETH_RSS_NONFRAG_IPV4_UDP |
3669                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3670                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3671                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3672         {ETH_RSS_NONFRAG_IPV4_UDP |
3673                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3674                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3675                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3676         {ETH_RSS_NONFRAG_IPV4_UDP |
3677                 ETH_RSS_L3_SRC_ONLY,
3678                 &hdrs_hint_ipv4_src_udp_gtpu_dwn,
3679                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3680         {ETH_RSS_NONFRAG_IPV4_UDP |
3681                 ETH_RSS_L4_SRC_ONLY,
3682                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3683                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3684         {ETH_RSS_NONFRAG_IPV4_UDP |
3685                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3686                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3687                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3688         {ETH_RSS_NONFRAG_IPV4_UDP |
3689                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3690                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3691                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3692         {ETH_RSS_NONFRAG_IPV4_UDP |
3693                 ETH_RSS_L3_DST_ONLY,
3694                 &hdrs_hint_ipv4_dst_udp_gtpu_dwn,
3695                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3696         {ETH_RSS_NONFRAG_IPV4_UDP |
3697                 ETH_RSS_L4_DST_ONLY,
3698                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3699                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3700         {ETH_RSS_NONFRAG_IPV4_UDP,
3701                 &hdrs_hint_ipv4_udp_gtpu_dwn,
3702                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3703         /* IPv4 GTPU EH DWN IPv6 UDP */
3704         {ETH_RSS_NONFRAG_IPV6_UDP |
3705                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3706                 &hdrs_hint_ipv6_src_udp_src_gtpu_dwn,
3707                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3708         {ETH_RSS_NONFRAG_IPV6_UDP |
3709                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3710                 &hdrs_hint_ipv6_src_udp_dst_gtpu_dwn,
3711                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3712         {ETH_RSS_NONFRAG_IPV6_UDP |
3713                 ETH_RSS_L3_SRC_ONLY,
3714                 &hdrs_hint_ipv6_src_udp_gtpu_dwn,
3715                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3716         {ETH_RSS_NONFRAG_IPV6_UDP |
3717                 ETH_RSS_L4_SRC_ONLY,
3718                 &hdrs_hint_ipv6_udp_src_gtpu_dwn,
3719                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3720         {ETH_RSS_NONFRAG_IPV6_UDP |
3721                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3722                 &hdrs_hint_ipv6_dst_udp_src_gtpu_dwn,
3723                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3724         {ETH_RSS_NONFRAG_IPV6_UDP |
3725                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3726                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn,
3727                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3728         {ETH_RSS_NONFRAG_IPV6_UDP |
3729                 ETH_RSS_L3_DST_ONLY,
3730                 &hdrs_hint_ipv6_dst_udp_gtpu_dwn,
3731                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3732         {ETH_RSS_NONFRAG_IPV6_UDP |
3733                 ETH_RSS_L4_DST_ONLY,
3734                 &hdrs_hint_ipv6_udp_dst_gtpu_dwn,
3735                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3736         {ETH_RSS_NONFRAG_IPV6_UDP,
3737                 &hdrs_hint_ipv6_udp_gtpu_dwn,
3738                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3739         /* IPv6 GTPU EH DWN IPv4 UDP */
3740         {ETH_RSS_NONFRAG_IPV4_UDP |
3741                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3742                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3743                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3744         {ETH_RSS_NONFRAG_IPV4_UDP |
3745                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3746                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3747                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3748         {ETH_RSS_NONFRAG_IPV4_UDP |
3749                 ETH_RSS_L3_SRC_ONLY,
3750                 &hdrs_hint_ipv4_src_udp_gtpu_dwn,
3751                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3752         {ETH_RSS_NONFRAG_IPV4_UDP |
3753                 ETH_RSS_L4_SRC_ONLY,
3754                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3755                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3756         {ETH_RSS_NONFRAG_IPV4_UDP |
3757                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3758                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3759                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3760         {ETH_RSS_NONFRAG_IPV4_UDP |
3761                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3762                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3763                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3764         {ETH_RSS_NONFRAG_IPV4_UDP |
3765                 ETH_RSS_L3_DST_ONLY,
3766                 &hdrs_hint_ipv4_dst_udp_gtpu_dwn,
3767                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3768         {ETH_RSS_NONFRAG_IPV4_UDP |
3769                 ETH_RSS_L4_DST_ONLY,
3770                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3771                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3772         {ETH_RSS_NONFRAG_IPV4_UDP,
3773                 &hdrs_hint_ipv4_udp_gtpu_dwn,
3774                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3775         /* IPv6 GTPU EH DWN IPv6 UDP */
3776         {ETH_RSS_NONFRAG_IPV6_UDP |
3777                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3778                 &hdrs_hint_ipv6_src_udp_src_gtpu_dwn,
3779                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3780         {ETH_RSS_NONFRAG_IPV6_UDP |
3781                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3782                 &hdrs_hint_ipv6_src_udp_dst_gtpu_dwn,
3783                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3784         {ETH_RSS_NONFRAG_IPV6_UDP |
3785                 ETH_RSS_L3_SRC_ONLY,
3786                 &hdrs_hint_ipv6_src_udp_gtpu_dwn,
3787                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3788         {ETH_RSS_NONFRAG_IPV6_UDP |
3789                 ETH_RSS_L4_SRC_ONLY,
3790                 &hdrs_hint_ipv6_udp_src_gtpu_dwn,
3791                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3792         {ETH_RSS_NONFRAG_IPV6_UDP |
3793                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3794                 &hdrs_hint_ipv6_dst_udp_src_gtpu_dwn,
3795                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3796         {ETH_RSS_NONFRAG_IPV6_UDP |
3797                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3798                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn,
3799                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3800         {ETH_RSS_NONFRAG_IPV6_UDP |
3801                 ETH_RSS_L3_DST_ONLY,
3802                 &hdrs_hint_ipv6_dst_udp_gtpu_dwn,
3803                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3804         {ETH_RSS_NONFRAG_IPV6_UDP |
3805                 ETH_RSS_L4_DST_ONLY,
3806                 &hdrs_hint_ipv6_udp_dst_gtpu_dwn,
3807                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3808         {ETH_RSS_NONFRAG_IPV6_UDP,
3809                 &hdrs_hint_ipv6_udp_gtpu_dwn,
3810                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3811         /* IPv4 GTPU EH DWN IPv4 TCP */
3812         {ETH_RSS_L3_SRC_ONLY |
3813                 ETH_RSS_L4_SRC_ONLY,
3814                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3815                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3816         {ETH_RSS_L3_SRC_ONLY |
3817                 ETH_RSS_L4_DST_ONLY,
3818                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3819                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3820         {ETH_RSS_L3_SRC_ONLY,
3821                 &hdrs_hint_ipv4_src_tcp_gtpu_dwn,
3822                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3823         {ETH_RSS_L4_SRC_ONLY,
3824                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3825                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3826         {ETH_RSS_L3_DST_ONLY |
3827                 ETH_RSS_L4_SRC_ONLY,
3828                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3829                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3830         {ETH_RSS_L3_DST_ONLY |
3831                 ETH_RSS_L4_DST_ONLY,
3832                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3833                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3834         {ETH_RSS_L3_DST_ONLY,
3835                 &hdrs_hint_ipv4_dst_tcp_gtpu_dwn,
3836                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3837         {ETH_RSS_L4_DST_ONLY,
3838                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3839                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3840         {ETH_RSS_NONFRAG_IPV4_TCP |
3841                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3842                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3843                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3844         {ETH_RSS_NONFRAG_IPV4_TCP |
3845                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3846                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3847                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3848         {ETH_RSS_NONFRAG_IPV4_TCP |
3849                 ETH_RSS_L3_SRC_ONLY,
3850                 &hdrs_hint_ipv4_src_tcp_gtpu_dwn,
3851                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3852         {ETH_RSS_NONFRAG_IPV4_TCP |
3853                 ETH_RSS_L4_SRC_ONLY,
3854                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3855                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3856         {ETH_RSS_NONFRAG_IPV4_TCP |
3857                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3858                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3859                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3860         {ETH_RSS_NONFRAG_IPV4_TCP |
3861                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3862                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3863                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3864         {ETH_RSS_NONFRAG_IPV4_TCP |
3865                 ETH_RSS_L3_DST_ONLY,
3866                 &hdrs_hint_ipv4_dst_tcp_gtpu_dwn,
3867                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3868         {ETH_RSS_NONFRAG_IPV4_TCP |
3869                 ETH_RSS_L4_DST_ONLY,
3870                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3871                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3872         {ETH_RSS_NONFRAG_IPV4_TCP,
3873                 &hdrs_hint_ipv4_tcp_gtpu_dwn,
3874                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3875         /* IPv4 GTPU EH DWN IPv6 TCP */
3876         {ETH_RSS_NONFRAG_IPV6_TCP |
3877                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3878                 &hdrs_hint_ipv6_src_tcp_src_gtpu_dwn,
3879                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3880         {ETH_RSS_NONFRAG_IPV6_TCP |
3881                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3882                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn,
3883                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3884         {ETH_RSS_NONFRAG_IPV6_TCP |
3885                 ETH_RSS_L3_SRC_ONLY,
3886                 &hdrs_hint_ipv6_src_tcp_gtpu_dwn,
3887                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3888         {ETH_RSS_NONFRAG_IPV6_TCP |
3889                 ETH_RSS_L4_SRC_ONLY,
3890                 &hdrs_hint_ipv6_tcp_src_gtpu_dwn,
3891                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3892         {ETH_RSS_NONFRAG_IPV6_TCP |
3893                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3894                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn,
3895                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3896         {ETH_RSS_NONFRAG_IPV6_TCP |
3897                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3898                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn,
3899                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3900         {ETH_RSS_NONFRAG_IPV6_TCP |
3901                 ETH_RSS_L3_DST_ONLY,
3902                 &hdrs_hint_ipv6_dst_tcp_gtpu_dwn,
3903                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3904         {ETH_RSS_NONFRAG_IPV6_TCP |
3905                 ETH_RSS_L4_DST_ONLY,
3906                 &hdrs_hint_ipv6_tcp_dst_gtpu_dwn,
3907                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3908         {ETH_RSS_NONFRAG_IPV6_TCP,
3909                 &hdrs_hint_ipv6_tcp_gtpu_dwn,
3910                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3911         /* IPv6 GTPU EH DWN IPv4 TCP */
3912         {ETH_RSS_NONFRAG_IPV4_TCP |
3913                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3914                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3915                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3916         {ETH_RSS_NONFRAG_IPV4_TCP |
3917                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3918                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3919                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3920         {ETH_RSS_NONFRAG_IPV4_TCP |
3921                 ETH_RSS_L3_SRC_ONLY,
3922                 &hdrs_hint_ipv4_src_tcp_gtpu_dwn,
3923                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3924         {ETH_RSS_NONFRAG_IPV4_TCP |
3925                 ETH_RSS_L4_SRC_ONLY,
3926                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3927                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3928         {ETH_RSS_NONFRAG_IPV4_TCP |
3929                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3930                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3931                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3932         {ETH_RSS_NONFRAG_IPV4_TCP |
3933                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3934                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3935                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3936         {ETH_RSS_NONFRAG_IPV4_TCP |
3937                 ETH_RSS_L3_DST_ONLY,
3938                 &hdrs_hint_ipv4_dst_tcp_gtpu_dwn,
3939                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3940         {ETH_RSS_NONFRAG_IPV4_TCP |
3941                 ETH_RSS_L4_DST_ONLY,
3942                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3943                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3944         {ETH_RSS_NONFRAG_IPV4_TCP,
3945                 &hdrs_hint_ipv4_tcp_gtpu_dwn,
3946                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3947         /* IPv6 GTPU EH DWN IPv6 TCP */
3948         {ETH_RSS_NONFRAG_IPV6_TCP |
3949                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3950                 &hdrs_hint_ipv6_src_tcp_src_gtpu_dwn,
3951                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3952         {ETH_RSS_NONFRAG_IPV6_TCP |
3953                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3954                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn,
3955                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3956         {ETH_RSS_NONFRAG_IPV6_TCP |
3957                 ETH_RSS_L3_SRC_ONLY,
3958                 &hdrs_hint_ipv6_src_tcp_gtpu_dwn,
3959                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3960         {ETH_RSS_NONFRAG_IPV6_TCP |
3961                 ETH_RSS_L4_SRC_ONLY,
3962                 &hdrs_hint_ipv6_tcp_src_gtpu_dwn,
3963                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3964         {ETH_RSS_NONFRAG_IPV6_TCP |
3965                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3966                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn,
3967                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3968         {ETH_RSS_NONFRAG_IPV6_TCP |
3969                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3970                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn,
3971                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3972         {ETH_RSS_NONFRAG_IPV6_TCP |
3973                 ETH_RSS_L3_DST_ONLY,
3974                 &hdrs_hint_ipv6_dst_tcp_gtpu_dwn,
3975                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3976         {ETH_RSS_NONFRAG_IPV6_TCP |
3977                 ETH_RSS_L4_DST_ONLY,
3978                 &hdrs_hint_ipv6_tcp_dst_gtpu_dwn,
3979                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3980         {ETH_RSS_NONFRAG_IPV6_TCP,
3981                 &hdrs_hint_ipv6_tcp_gtpu_dwn,
3982                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3983 };
3984
3985 struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = {
3986         &hdrs_hint_ipv4,
3987         &hdrs_hint_ipv4_udp,
3988         &hdrs_hint_ipv4_tcp,
3989         &hdrs_hint_ipv4_sctp,
3990         &hdrs_hint_ipv6,
3991         &hdrs_hint_ipv6_udp,
3992         &hdrs_hint_ipv6_tcp,
3993         &hdrs_hint_ipv6_sctp,
3994 };
3995
3996 static struct iavf_flow_engine iavf_hash_engine = {
3997         .init = iavf_hash_init,
3998         .create = iavf_hash_create,
3999         .destroy = iavf_hash_destroy,
4000         .uninit = iavf_hash_uninit,
4001         .free = iavf_hash_free,
4002         .type = IAVF_FLOW_ENGINE_HASH,
4003 };
4004
4005 /* Register parser for comms package. */
4006 static struct iavf_flow_parser iavf_hash_parser = {
4007         .engine = &iavf_hash_engine,
4008         .array = iavf_hash_pattern_list,
4009         .array_len = RTE_DIM(iavf_hash_pattern_list),
4010         .parse_pattern_action = iavf_hash_parse_pattern_action,
4011         .stage = IAVF_FLOW_STAGE_RSS,
4012 };
4013
4014 static int
4015 iavf_hash_default_set(struct iavf_adapter *ad, bool add)
4016 {
4017         struct virtchnl_rss_cfg *rss_cfg;
4018         uint16_t i;
4019         int ret;
4020
4021         rss_cfg = rte_zmalloc("iavf rss rule",
4022                               sizeof(struct virtchnl_rss_cfg), 0);
4023         if (!rss_cfg)
4024                 return -ENOMEM;
4025
4026         for (i = 0; i < RTE_DIM(iavf_hash_default_hdrs); i++) {
4027                 rss_cfg->proto_hdrs = *iavf_hash_default_hdrs[i];
4028                 rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
4029
4030                 ret = iavf_add_del_rss_cfg(ad, rss_cfg, add);
4031                 if (ret) {
4032                         PMD_DRV_LOG(ERR, "fail to %s RSS configure",
4033                                     add ? "add" : "delete");
4034                         rte_free(rss_cfg);
4035                         return ret;
4036                 }
4037         }
4038
4039         return ret;
4040 }
4041
4042 RTE_INIT(iavf_hash_engine_init)
4043 {
4044         struct iavf_flow_engine *engine = &iavf_hash_engine;
4045
4046         iavf_register_flow_engine(engine);
4047 }
4048
4049 static int
4050 iavf_hash_init(struct iavf_adapter *ad)
4051 {
4052         struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad);
4053         struct iavf_flow_parser *parser;
4054         int ret;
4055
4056         if (!vf->vf_res)
4057                 return -EINVAL;
4058
4059         if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF))
4060                 return -ENOTSUP;
4061
4062         parser = &iavf_hash_parser;
4063
4064         ret = iavf_register_parser(parser, ad);
4065         if (ret) {
4066                 PMD_DRV_LOG(ERR, "fail to register hash parser");
4067                 return ret;
4068         }
4069
4070         ret = iavf_hash_default_set(ad, true);
4071         if (ret) {
4072                 PMD_DRV_LOG(ERR, "fail to set default RSS");
4073                 iavf_unregister_parser(parser, ad);
4074         }
4075
4076         return ret;
4077 }
4078
4079 static int
4080 iavf_hash_parse_pattern(struct iavf_pattern_match_item *pattern_match_item,
4081                         const struct rte_flow_item pattern[], uint64_t *phint,
4082                         struct rte_flow_error *error)
4083 {
4084         const struct rte_flow_item *item = pattern;
4085         const struct rte_flow_item_gtp_psc *psc;
4086         u8 outer_ipv6 = 0;
4087
4088         for (item = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) {
4089                 if (item->last) {
4090                         rte_flow_error_set(error, EINVAL,
4091                                            RTE_FLOW_ERROR_TYPE_ITEM, item,
4092                                            "Not support range");
4093                         return -rte_errno;
4094                 }
4095
4096                 switch (item->type) {
4097                 case RTE_FLOW_ITEM_TYPE_IPV6:
4098                         outer_ipv6 = 1;
4099                         break;
4100                 case RTE_FLOW_ITEM_TYPE_GTPU:
4101                         *phint |= (outer_ipv6) ?
4102                                 IAVF_PHINT_IPV6_GTPU_IP :
4103                                 IAVF_PHINT_IPV4_GTPU_IP;
4104                         break;
4105                 case RTE_FLOW_ITEM_TYPE_GTP_PSC:
4106                         psc = item->spec;
4107                         *phint &= (outer_ipv6) ?
4108                                 ~IAVF_PHINT_IPV6_GTPU_IP :
4109                                 ~IAVF_PHINT_IPV4_GTPU_IP;
4110                         if (!psc)
4111                                 *phint |= (outer_ipv6) ?
4112                                         IAVF_PHINT_IPV6_GTPU_EH :
4113                                         IAVF_PHINT_IPV4_GTPU_EH;
4114                         else if (psc->pdu_type == IAVF_GTPU_EH_UPLINK)
4115                                 *phint |= (outer_ipv6) ?
4116                                         IAVF_PHINT_IPV6_GTPU_EH_UPLINK :
4117                                         IAVF_PHINT_IPV4_GTPU_EH_UPLINK;
4118                         else if (psc->pdu_type == IAVF_GTPU_EH_DWNLINK)
4119                                 *phint |= (outer_ipv6) ?
4120                                         IAVF_PHINT_IPV6_GTPU_EH_DWNLINK :
4121                                         IAVF_PHINT_IPV4_GTPU_EH_DWNLINK;
4122                         break;
4123                 default:
4124                         break;
4125                 }
4126         }
4127
4128         /* update and restore pattern hint */
4129         *phint |= ((struct iavf_pattern_match_type *)
4130                                 (pattern_match_item->meta))->pattern_hint;
4131
4132         return 0;
4133 }
4134
4135 static int
4136 iavf_hash_parse_action(const struct rte_flow_action actions[],
4137                        uint64_t pattern_hint, void **meta,
4138                        struct rte_flow_error *error)
4139 {
4140         struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)*meta;
4141         struct iavf_hash_match_type *hash_map_list;
4142         enum rte_flow_action_type action_type;
4143         const struct rte_flow_action_rss *rss;
4144         const struct rte_flow_action *action;
4145         uint32_t mlist_len;
4146         bool item_found = false;
4147         uint64_t rss_type;
4148         uint16_t i;
4149
4150         /* Supported action is RSS. */
4151         for (action = actions; action->type !=
4152                 RTE_FLOW_ACTION_TYPE_END; action++) {
4153                 action_type = action->type;
4154                 switch (action_type) {
4155                 case RTE_FLOW_ACTION_TYPE_RSS:
4156                         rss = action->conf;
4157                         rss_type = rss->types;
4158
4159                         if (rss->func ==
4160                             RTE_ETH_HASH_FUNCTION_SIMPLE_XOR){
4161                                 rss_meta->rss_algorithm =
4162                                         VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC;
4163                                 return rte_flow_error_set(error, ENOTSUP,
4164                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
4165                                         "function simple_xor is not supported");
4166                         } else if (rss->func ==
4167                                    RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) {
4168                                 rss_meta->rss_algorithm =
4169                                         VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC;
4170                         } else {
4171                                 rss_meta->rss_algorithm =
4172                                         VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
4173                         }
4174
4175                         if (rss->level)
4176                                 return rte_flow_error_set(error, ENOTSUP,
4177                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
4178                                         "a nonzero RSS encapsulation level is not supported");
4179
4180                         if (rss->key_len)
4181                                 return rte_flow_error_set(error, ENOTSUP,
4182                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
4183                                         "a nonzero RSS key_len is not supported");
4184
4185                         if (rss->queue_num)
4186                                 return rte_flow_error_set(error, ENOTSUP,
4187                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
4188                                         "a non-NULL RSS queue is not supported");
4189
4190                         /**
4191                          * Check simultaneous use of SRC_ONLY and DST_ONLY
4192                          * of the same level.
4193                          */
4194                         rss_type = rte_eth_rss_hf_refine(rss_type);
4195
4196                         if ((pattern_hint & IAVF_PHINT_IPV4_GTPU_IP) ||
4197                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH) ||
4198                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_UPLINK) ||
4199                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_DWNLINK) ||
4200                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_IP) ||
4201                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH) ||
4202                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH_UPLINK) ||
4203                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH_DWNLINK)) {
4204                                 hash_map_list = iavf_gtpu_hash_map_list;
4205                                 mlist_len = RTE_DIM(iavf_gtpu_hash_map_list);
4206                         } else {
4207                                 hash_map_list = iavf_hash_map_list;
4208                                 mlist_len = RTE_DIM(iavf_hash_map_list);
4209                         }
4210
4211                         /* Find matched proto hdrs according to hash type. */
4212                         for (i = 0; i < mlist_len; i++) {
4213                                 struct iavf_hash_match_type *ht_map =
4214                                         &hash_map_list[i];
4215                                 if (rss_type == ht_map->hash_type &&
4216                                     pattern_hint == ht_map->pattern_hint) {
4217                                         rss_meta->proto_hdrs =
4218                                                 ht_map->proto_hdrs;
4219                                         item_found = true;
4220                                         break;
4221                                 }
4222                         }
4223
4224                         if (!item_found)
4225                                 return rte_flow_error_set(error, ENOTSUP,
4226                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
4227                                         "Not supported flow");
4228                         break;
4229
4230                 case RTE_FLOW_ACTION_TYPE_END:
4231                         break;
4232
4233                 default:
4234                         rte_flow_error_set(error, EINVAL,
4235                                            RTE_FLOW_ERROR_TYPE_ACTION, action,
4236                                            "Invalid action.");
4237                         return -rte_errno;
4238                 }
4239         }
4240
4241         return 0;
4242 }
4243
4244 static int
4245 iavf_hash_parse_pattern_action(__rte_unused struct iavf_adapter *ad,
4246                                struct iavf_pattern_match_item *array,
4247                                uint32_t array_len,
4248                                const struct rte_flow_item pattern[],
4249                                const struct rte_flow_action actions[],
4250                                void **meta,
4251                                struct rte_flow_error *error)
4252 {
4253         struct iavf_pattern_match_item *pattern_match_item;
4254         struct iavf_rss_meta *rss_meta_ptr;
4255         uint64_t phint = IAVF_PHINT_NONE;
4256         int ret = 0;
4257
4258         rss_meta_ptr = rte_zmalloc(NULL, sizeof(*rss_meta_ptr), 0);
4259         if (!rss_meta_ptr) {
4260                 rte_flow_error_set(error, EINVAL,
4261                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
4262                                    "No memory for rss_meta_ptr");
4263                 return -ENOMEM;
4264         }
4265
4266         /* Check rss supported pattern and find matched pattern. */
4267         pattern_match_item =
4268                 iavf_search_pattern_match_item(pattern, array, array_len,
4269                                                error);
4270         if (!pattern_match_item) {
4271                 ret = -rte_errno;
4272                 goto error;
4273         }
4274
4275         ret = iavf_hash_parse_pattern(pattern_match_item, pattern, &phint,
4276                                       error);
4277         if (ret)
4278                 goto error;
4279
4280         ret = iavf_hash_parse_action(actions, phint,
4281                                      (void **)&rss_meta_ptr, error);
4282
4283 error:
4284         if (!ret && meta)
4285                 *meta = rss_meta_ptr;
4286         else
4287                 rte_free(rss_meta_ptr);
4288
4289         rte_free(pattern_match_item);
4290
4291         return ret;
4292 }
4293
4294 static int
4295 iavf_hash_create(__rte_unused struct iavf_adapter *ad,
4296                  __rte_unused struct rte_flow *flow, void *meta,
4297                  __rte_unused struct rte_flow_error *error)
4298 {
4299         struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)meta;
4300         struct virtchnl_rss_cfg *rss_cfg;
4301         int ret = 0;
4302
4303         rss_cfg = rte_zmalloc("iavf rss rule",
4304                               sizeof(struct virtchnl_rss_cfg), 0);
4305         if (!rss_cfg) {
4306                 rte_flow_error_set(error, EINVAL,
4307                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
4308                                    "No memory for rss rule");
4309                 return -ENOMEM;
4310         }
4311
4312         rss_cfg->proto_hdrs = *rss_meta->proto_hdrs;
4313         rss_cfg->rss_algorithm = rss_meta->rss_algorithm;
4314
4315         ret = iavf_add_del_rss_cfg(ad, rss_cfg, true);
4316         if (!ret) {
4317                 flow->rule = rss_cfg;
4318         } else {
4319                 PMD_DRV_LOG(ERR, "fail to add RSS configure");
4320                 rte_flow_error_set(error, -ret,
4321                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
4322                                    "Failed to add rss rule.");
4323                 rte_free(rss_cfg);
4324                 return -rte_errno;
4325         }
4326
4327         rte_free(meta);
4328
4329         return ret;
4330 }
4331
4332 static int
4333 iavf_hash_destroy(__rte_unused struct iavf_adapter *ad,
4334                   struct rte_flow *flow,
4335                   __rte_unused struct rte_flow_error *error)
4336 {
4337         struct virtchnl_rss_cfg *rss_cfg;
4338         int ret = 0;
4339
4340         rss_cfg = (struct virtchnl_rss_cfg *)flow->rule;
4341
4342         ret = iavf_add_del_rss_cfg(ad, rss_cfg, false);
4343         if (ret) {
4344                 PMD_DRV_LOG(ERR, "fail to del RSS configure");
4345                 rte_flow_error_set(error, -ret,
4346                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
4347                                    "Failed to delete rss rule.");
4348                 return -rte_errno;
4349         }
4350         return ret;
4351 }
4352
4353 static void
4354 iavf_hash_uninit(struct iavf_adapter *ad)
4355 {
4356         if (iavf_hash_default_set(ad, false))
4357                 PMD_DRV_LOG(ERR, "fail to delete default RSS");
4358
4359         iavf_unregister_parser(&iavf_hash_parser, ad);
4360 }
4361
4362 static void
4363 iavf_hash_free(struct rte_flow *flow)
4364 {
4365         rte_free(flow->rule);
4366 }