net/iavf: delete unsupported RSS types
[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_IPV4 | ETH_RSS_L3_SRC_ONLY,
2011                 &hdrs_hint_ipv4_src, IAVF_PHINT_IPV4},
2012         {ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY,
2013                 &hdrs_hint_ipv4_dst, IAVF_PHINT_IPV4},
2014         {ETH_RSS_IPV4,
2015                 &hdrs_hint_ipv4, IAVF_PHINT_IPV4},
2016         {ETH_RSS_ESP,
2017                 &hdrs_hint_ipv4_esp, IAVF_PHINT_IPV4},
2018         {ETH_RSS_AH,
2019                 &hdrs_hint_ipv4_ah, IAVF_PHINT_IPV4},
2020         {ETH_RSS_L2TPV3,
2021                 &hdrs_hint_ipv4_l2tpv3, IAVF_PHINT_IPV4},
2022         {ETH_RSS_S_VLAN,
2023                 &hdrs_hint_svlan_ipv4, IAVF_PHINT_IPV4},
2024         {ETH_RSS_S_VLAN,
2025                 &hdrs_hint_svlan_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2026         {ETH_RSS_S_VLAN,
2027                 &hdrs_hint_svlan_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2028         {ETH_RSS_S_VLAN,
2029                 &hdrs_hint_svlan_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2030         {ETH_RSS_C_VLAN,
2031                 &hdrs_hint_cvlan_ipv4, IAVF_PHINT_IPV4},
2032         {ETH_RSS_C_VLAN,
2033                 &hdrs_hint_cvlan_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2034         {ETH_RSS_C_VLAN,
2035                 &hdrs_hint_cvlan_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2036         {ETH_RSS_C_VLAN,
2037                 &hdrs_hint_cvlan_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2038         /* IPV4 UDP */
2039         {ETH_RSS_L2_SRC_ONLY,
2040                 &hdrs_hint_eth_src_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2041         {ETH_RSS_L2_DST_ONLY,
2042                 &hdrs_hint_eth_dst_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2043         {ETH_RSS_ETH,
2044                 &hdrs_hint_eth_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2045         {ETH_RSS_NONFRAG_IPV4_UDP |
2046                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2047                 &hdrs_hint_ipv4_src_udp_src_port, IAVF_PHINT_IPV4_UDP},
2048         {ETH_RSS_NONFRAG_IPV4_UDP |
2049                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2050                 &hdrs_hint_ipv4_src_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2051         {ETH_RSS_NONFRAG_IPV4_UDP |
2052                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src_udp,
2053                 IAVF_PHINT_IPV4_UDP},
2054         {ETH_RSS_NONFRAG_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_NONFRAG_IPV4_UDP |
2058                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2059                 &hdrs_hint_ipv4_dst_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2060         {ETH_RSS_NONFRAG_IPV4_UDP |
2061                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst_udp,
2062                 IAVF_PHINT_IPV4_UDP},
2063         {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_SRC_ONLY,
2064                 &hdrs_hint_ipv4_udp_src_port, IAVF_PHINT_IPV4_UDP},
2065         {ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L4_DST_ONLY,
2066                 &hdrs_hint_ipv4_udp_dst_port, IAVF_PHINT_IPV4_UDP},
2067         {ETH_RSS_PFCP,
2068                 &hdrs_hint_ipv4_pfcp, IAVF_PHINT_IPV4_UDP},
2069         {ETH_RSS_ESP,
2070                 &hdrs_hint_ipv4_udp_esp, IAVF_PHINT_IPV4_UDP},
2071         {ETH_RSS_NONFRAG_IPV4_UDP,
2072                 &hdrs_hint_ipv4_udp, IAVF_PHINT_IPV4_UDP},
2073         /* IPV4 TCP */
2074         {ETH_RSS_L2_SRC_ONLY,
2075                 &hdrs_hint_eth_src_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2076         {ETH_RSS_L2_DST_ONLY,
2077                 &hdrs_hint_eth_dst_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2078         {ETH_RSS_ETH,
2079                 &hdrs_hint_eth_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2080         {ETH_RSS_NONFRAG_IPV4_TCP |
2081                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2082                 &hdrs_hint_ipv4_src_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2083         {ETH_RSS_NONFRAG_IPV4_TCP |
2084                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2085                 &hdrs_hint_ipv4_src_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2086         {ETH_RSS_NONFRAG_IPV4_TCP |
2087                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src_tcp,
2088                 IAVF_PHINT_IPV4_TCP},
2089         {ETH_RSS_NONFRAG_IPV4_TCP |
2090                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2091                 &hdrs_hint_ipv4_dst_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2092         {ETH_RSS_NONFRAG_IPV4_TCP |
2093                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2094                 &hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2095         {ETH_RSS_NONFRAG_IPV4_TCP |
2096                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst_tcp,
2097                 IAVF_PHINT_IPV4_TCP},
2098         {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_SRC_ONLY,
2099                 &hdrs_hint_ipv4_tcp_src_port, IAVF_PHINT_IPV4_TCP},
2100         {ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L4_DST_ONLY,
2101                 &hdrs_hint_ipv4_tcp_dst_port, IAVF_PHINT_IPV4_TCP},
2102         {ETH_RSS_NONFRAG_IPV4_TCP,
2103                 &hdrs_hint_ipv4_tcp, IAVF_PHINT_IPV4_TCP},
2104         /* IPV4 SCTP */
2105         {ETH_RSS_L2_SRC_ONLY,
2106                 &hdrs_hint_eth_src_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2107         {ETH_RSS_L2_DST_ONLY,
2108                 &hdrs_hint_eth_dst_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2109         {ETH_RSS_ETH,
2110                 &hdrs_hint_eth_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2111         {ETH_RSS_NONFRAG_IPV4_SCTP |
2112                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2113                 &hdrs_hint_ipv4_src_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2114         {ETH_RSS_NONFRAG_IPV4_SCTP |
2115                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2116                 &hdrs_hint_ipv4_src_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2117         {ETH_RSS_NONFRAG_IPV4_SCTP |
2118                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src_sctp,
2119                 IAVF_PHINT_IPV4_SCTP},
2120         {ETH_RSS_NONFRAG_IPV4_SCTP |
2121                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2122                 &hdrs_hint_ipv4_dst_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2123         {ETH_RSS_NONFRAG_IPV4_SCTP |
2124                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2125                 &hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2126         {ETH_RSS_NONFRAG_IPV4_SCTP |
2127                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst_sctp,
2128                 IAVF_PHINT_IPV4_SCTP},
2129         {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_SRC_ONLY,
2130                 &hdrs_hint_ipv4_sctp_src_port, IAVF_PHINT_IPV4_SCTP},
2131         {ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_L4_DST_ONLY,
2132                 &hdrs_hint_ipv4_sctp_dst_port, IAVF_PHINT_IPV4_SCTP},
2133         {ETH_RSS_NONFRAG_IPV4_SCTP,
2134                 &hdrs_hint_ipv4_sctp, IAVF_PHINT_IPV4_SCTP},
2135         /* IPV6 */
2136         {ETH_RSS_L2_SRC_ONLY,
2137                 &hdrs_hint_eth_src_ipv6, IAVF_PHINT_IPV6},
2138         {ETH_RSS_L2_DST_ONLY,
2139                 &hdrs_hint_eth_dst_ipv6, IAVF_PHINT_IPV6},
2140         {ETH_RSS_ETH,
2141                 &hdrs_hint_eth_ipv6, IAVF_PHINT_IPV6},
2142         {ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY,
2143                 &hdrs_hint_ipv6_src, IAVF_PHINT_IPV6},
2144         {ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY,
2145                 &hdrs_hint_ipv6_dst, IAVF_PHINT_IPV6},
2146         {ETH_RSS_IPV6,
2147                 &hdrs_hint_ipv6, IAVF_PHINT_IPV6},
2148         {ETH_RSS_ESP,
2149                 &hdrs_hint_ipv6_esp, IAVF_PHINT_IPV6},
2150         {ETH_RSS_AH,
2151                 &hdrs_hint_ipv6_ah, IAVF_PHINT_IPV6},
2152         {ETH_RSS_L2TPV3,
2153                 &hdrs_hint_ipv6_l2tpv3, IAVF_PHINT_IPV6},
2154         /* IPV6 UDP */
2155         {ETH_RSS_L2_SRC_ONLY,
2156                 &hdrs_hint_eth_src_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2157         {ETH_RSS_L2_DST_ONLY,
2158                 &hdrs_hint_eth_dst_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2159         {ETH_RSS_ETH,
2160                 &hdrs_hint_eth_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2161         {ETH_RSS_NONFRAG_IPV6_UDP |
2162                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2163                 &hdrs_hint_ipv6_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
2164         {ETH_RSS_NONFRAG_IPV6_UDP |
2165                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2166                 &hdrs_hint_ipv6_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2167         {ETH_RSS_NONFRAG_IPV6_UDP |
2168                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src_udp,
2169                 IAVF_PHINT_IPV6_UDP},
2170         {ETH_RSS_NONFRAG_IPV6_UDP |
2171                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2172                 &hdrs_hint_ipv6_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
2173         {ETH_RSS_NONFRAG_IPV6_UDP |
2174                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2175                 &hdrs_hint_ipv6_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2176         {ETH_RSS_NONFRAG_IPV6_UDP |
2177                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst_udp,
2178                 IAVF_PHINT_IPV6_UDP},
2179         {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_SRC_ONLY,
2180                 &hdrs_hint_ipv6_udp_src_port, IAVF_PHINT_IPV6_UDP},
2181         {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L4_DST_ONLY,
2182                 &hdrs_hint_ipv6_udp_dst_port, IAVF_PHINT_IPV6_UDP},
2183         {ETH_RSS_PFCP,
2184                 &hdrs_hint_ipv6_pfcp, IAVF_PHINT_IPV6_UDP},
2185         {ETH_RSS_ESP,
2186                 &hdrs_hint_ipv6_udp_esp, IAVF_PHINT_IPV6_UDP},
2187         {ETH_RSS_NONFRAG_IPV6_UDP,
2188                 &hdrs_hint_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2189         /* IPV6 TCP */
2190         {ETH_RSS_L2_SRC_ONLY,
2191                 &hdrs_hint_eth_src_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2192         {ETH_RSS_L2_DST_ONLY,
2193                 &hdrs_hint_eth_dst_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2194         {ETH_RSS_ETH,
2195                 &hdrs_hint_eth_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2196         {ETH_RSS_NONFRAG_IPV6_TCP |
2197                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2198                 &hdrs_hint_ipv6_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2199         {ETH_RSS_NONFRAG_IPV6_TCP |
2200                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2201                 &hdrs_hint_ipv6_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2202         {ETH_RSS_NONFRAG_IPV6_TCP |
2203                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src_tcp,
2204                 IAVF_PHINT_IPV6_TCP},
2205         {ETH_RSS_NONFRAG_IPV6_TCP |
2206                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2207                 &hdrs_hint_ipv6_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2208         {ETH_RSS_NONFRAG_IPV6_TCP |
2209                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2210                 &hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2211         {ETH_RSS_NONFRAG_IPV6_TCP |
2212                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst_tcp,
2213                 IAVF_PHINT_IPV6_TCP},
2214         {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_SRC_ONLY,
2215                 &hdrs_hint_ipv6_tcp_src_port, IAVF_PHINT_IPV6_TCP},
2216         {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L4_DST_ONLY,
2217                 &hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
2218         {ETH_RSS_NONFRAG_IPV6_TCP,
2219                 &hdrs_hint_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2220         /* IPV6 SCTP */
2221         {ETH_RSS_L2_SRC_ONLY,
2222                 &hdrs_hint_eth_src_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2223         {ETH_RSS_L2_DST_ONLY,
2224                 &hdrs_hint_eth_dst_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2225         {ETH_RSS_ETH,
2226                 &hdrs_hint_eth_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2227         {ETH_RSS_NONFRAG_IPV6_SCTP |
2228                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2229                 &hdrs_hint_ipv6_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2230         {ETH_RSS_NONFRAG_IPV6_SCTP |
2231                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2232                 &hdrs_hint_ipv6_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2233         {ETH_RSS_NONFRAG_IPV6_SCTP |
2234                 ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src_sctp,
2235                 IAVF_PHINT_IPV6_SCTP},
2236         {ETH_RSS_NONFRAG_IPV6_SCTP |
2237                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2238                 &hdrs_hint_ipv6_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2239         {ETH_RSS_NONFRAG_IPV6_SCTP |
2240                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2241                 &hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2242         {ETH_RSS_NONFRAG_IPV6_SCTP |
2243                 ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst_sctp,
2244                 IAVF_PHINT_IPV6_SCTP},
2245         {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY,
2246                 &hdrs_hint_ipv6_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
2247         {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY,
2248                 &hdrs_hint_ipv6_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
2249         {ETH_RSS_NONFRAG_IPV6_SCTP,
2250                 &hdrs_hint_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2251         {ETH_RSS_S_VLAN,
2252                 &hdrs_hint_svlan_ipv6, IAVF_PHINT_IPV6},
2253         {ETH_RSS_S_VLAN,
2254                 &hdrs_hint_svlan_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2255         {ETH_RSS_S_VLAN,
2256                 &hdrs_hint_svlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2257         {ETH_RSS_S_VLAN,
2258                 &hdrs_hint_svlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2259         {ETH_RSS_C_VLAN,
2260                 &hdrs_hint_cvlan_ipv6, IAVF_PHINT_IPV6},
2261         {ETH_RSS_C_VLAN,
2262                 &hdrs_hint_cvlan_ipv6_udp, IAVF_PHINT_IPV6_UDP},
2263         {ETH_RSS_C_VLAN,
2264                 &hdrs_hint_cvlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
2265         {ETH_RSS_C_VLAN,
2266                 &hdrs_hint_cvlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
2267 };
2268
2269 struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
2270         /* GTPU */
2271         /* GTPU IP */
2272         /* IPv4 GTPU IP IPv4*/
2273         {ETH_RSS_IPV4 |
2274                 ETH_RSS_L3_SRC_ONLY,
2275                 &hdrs_hint_ipv4_src_gtpu_ip,
2276                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2277         {ETH_RSS_IPV4 |
2278                 ETH_RSS_L3_DST_ONLY,
2279                 &hdrs_hint_ipv4_dst_gtpu_ip,
2280                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2281         {ETH_RSS_IPV4,
2282                 &hdrs_hint_ipv4_gtpu_ip,
2283                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2284         {ETH_RSS_GTPU,
2285                 &hdrs_hint_teid_gtpu_ip,
2286                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
2287         /* IPv4 GTPU IP IPv6*/
2288         {ETH_RSS_IPV6 |
2289                 ETH_RSS_L3_SRC_ONLY,
2290                 &hdrs_hint_ipv6_src_gtpu_ip,
2291                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2292         {ETH_RSS_IPV6 |
2293                 ETH_RSS_L3_DST_ONLY,
2294                 &hdrs_hint_ipv6_dst_gtpu_ip,
2295                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2296         {ETH_RSS_IPV6,
2297                 &hdrs_hint_ipv6_gtpu_ip,
2298                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2299         {ETH_RSS_GTPU,
2300                 &hdrs_hint_teid_gtpu_ip,
2301                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
2302         /* IPv6 GTPU IP IPv4*/
2303         {ETH_RSS_IPV4 |
2304                 ETH_RSS_L3_SRC_ONLY,
2305                 &hdrs_hint_ipv4_src_gtpu_ip,
2306                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2307         {ETH_RSS_IPV4 |
2308                 ETH_RSS_L3_DST_ONLY,
2309                 &hdrs_hint_ipv4_dst_gtpu_ip,
2310                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2311         {ETH_RSS_IPV4,
2312                 &hdrs_hint_ipv4_gtpu_ip,
2313                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2314         {ETH_RSS_GTPU,
2315                 &hdrs_hint_teid_gtpu_ip,
2316                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
2317         /* IPv6 GTPU IP IPv6*/
2318         {ETH_RSS_IPV6 |
2319                 ETH_RSS_L3_SRC_ONLY,
2320                 &hdrs_hint_ipv6_src_gtpu_ip,
2321                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2322         {ETH_RSS_IPV6 |
2323                 ETH_RSS_L3_DST_ONLY,
2324                 &hdrs_hint_ipv6_dst_gtpu_ip,
2325                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2326         {ETH_RSS_IPV6,
2327                 &hdrs_hint_ipv6_gtpu_ip,
2328                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2329         {ETH_RSS_GTPU,
2330                 &hdrs_hint_teid_gtpu_ip,
2331                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
2332         /* IPv4 GTPU IP IPv4 UDP */
2333         {ETH_RSS_NONFRAG_IPV4_UDP |
2334                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2335                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2336                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2337         {ETH_RSS_NONFRAG_IPV4_UDP |
2338                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2339                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2340                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2341         {ETH_RSS_NONFRAG_IPV4_UDP |
2342                 ETH_RSS_L3_SRC_ONLY,
2343                 &hdrs_hint_ipv4_src_udp_gtpu_ip,
2344                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2345         {ETH_RSS_NONFRAG_IPV4_UDP |
2346                 ETH_RSS_L4_SRC_ONLY,
2347                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2348                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2349         {ETH_RSS_NONFRAG_IPV4_UDP |
2350                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2351                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2352                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2353         {ETH_RSS_NONFRAG_IPV4_UDP |
2354                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2355                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2356                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2357         {ETH_RSS_NONFRAG_IPV4_UDP |
2358                 ETH_RSS_L3_DST_ONLY,
2359                 &hdrs_hint_ipv4_dst_udp_gtpu_ip,
2360                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2361         {ETH_RSS_NONFRAG_IPV4_UDP |
2362                 ETH_RSS_L4_DST_ONLY,
2363                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2364                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2365         {ETH_RSS_NONFRAG_IPV4_UDP,
2366                 &hdrs_hint_ipv4_udp_gtpu_ip,
2367                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2368         /* IPv4 GTPU IP IPv6 UDP */
2369         {ETH_RSS_NONFRAG_IPV6_UDP |
2370                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2371                 &hdrs_hint_ipv6_src_udp_src_gtpu_ip,
2372                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2373         {ETH_RSS_NONFRAG_IPV6_UDP |
2374                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2375                 &hdrs_hint_ipv6_src_udp_dst_gtpu_ip,
2376                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2377         {ETH_RSS_NONFRAG_IPV6_UDP |
2378                 ETH_RSS_L3_SRC_ONLY,
2379                 &hdrs_hint_ipv6_src_udp_gtpu_ip,
2380                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2381         {ETH_RSS_NONFRAG_IPV6_UDP |
2382                 ETH_RSS_L4_SRC_ONLY,
2383                 &hdrs_hint_ipv6_udp_src_gtpu_ip,
2384                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2385         {ETH_RSS_NONFRAG_IPV6_UDP |
2386                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2387                 &hdrs_hint_ipv6_dst_udp_src_gtpu_ip,
2388                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2389         {ETH_RSS_NONFRAG_IPV6_UDP |
2390                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2391                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_ip,
2392                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2393         {ETH_RSS_NONFRAG_IPV6_UDP |
2394                 ETH_RSS_L3_DST_ONLY,
2395                 &hdrs_hint_ipv6_dst_udp_gtpu_ip,
2396                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2397         {ETH_RSS_NONFRAG_IPV6_UDP |
2398                 ETH_RSS_L4_DST_ONLY,
2399                 &hdrs_hint_ipv6_udp_dst_gtpu_ip,
2400                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2401         {ETH_RSS_NONFRAG_IPV6_UDP,
2402                 &hdrs_hint_ipv6_udp_gtpu_ip,
2403                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2404         /* IPv6 GTPU IP IPv4 UDP */
2405         {ETH_RSS_NONFRAG_IPV4_UDP |
2406                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2407                 &hdrs_hint_ipv4_src_udp_src_gtpu_ip,
2408                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2409         {ETH_RSS_NONFRAG_IPV4_UDP |
2410                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2411                 &hdrs_hint_ipv4_src_udp_dst_gtpu_ip,
2412                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2413         {ETH_RSS_NONFRAG_IPV4_UDP |
2414                 ETH_RSS_L3_SRC_ONLY,
2415                 &hdrs_hint_ipv4_src_udp_gtpu_ip,
2416                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2417         {ETH_RSS_NONFRAG_IPV4_UDP |
2418                 ETH_RSS_L4_SRC_ONLY,
2419                 &hdrs_hint_ipv4_udp_src_gtpu_ip,
2420                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2421         {ETH_RSS_NONFRAG_IPV4_UDP |
2422                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2423                 &hdrs_hint_ipv4_dst_udp_src_gtpu_ip,
2424                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2425         {ETH_RSS_NONFRAG_IPV4_UDP |
2426                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2427                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_ip,
2428                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2429         {ETH_RSS_NONFRAG_IPV4_UDP |
2430                 ETH_RSS_L3_DST_ONLY,
2431                 &hdrs_hint_ipv4_dst_udp_gtpu_ip,
2432                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2433         {ETH_RSS_NONFRAG_IPV4_UDP |
2434                 ETH_RSS_L4_DST_ONLY,
2435                 &hdrs_hint_ipv4_udp_dst_gtpu_ip,
2436                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2437         {ETH_RSS_NONFRAG_IPV4_UDP,
2438                 &hdrs_hint_ipv4_udp_gtpu_ip,
2439                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_UDP},
2440         /* IPv6 GTPU IP IPv6 UDP */
2441         {ETH_RSS_NONFRAG_IPV6_UDP |
2442                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2443                 &hdrs_hint_ipv6_src_udp_src_gtpu_ip,
2444                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2445         {ETH_RSS_NONFRAG_IPV6_UDP |
2446                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2447                 &hdrs_hint_ipv6_src_udp_dst_gtpu_ip,
2448                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2449         {ETH_RSS_NONFRAG_IPV6_UDP |
2450                 ETH_RSS_L3_SRC_ONLY,
2451                 &hdrs_hint_ipv6_src_udp_gtpu_ip,
2452                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2453         {ETH_RSS_NONFRAG_IPV6_UDP |
2454                 ETH_RSS_L4_SRC_ONLY,
2455                 &hdrs_hint_ipv6_udp_src_gtpu_ip,
2456                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2457         {ETH_RSS_NONFRAG_IPV6_UDP |
2458                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2459                 &hdrs_hint_ipv6_dst_udp_src_gtpu_ip,
2460                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2461         {ETH_RSS_NONFRAG_IPV6_UDP |
2462                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2463                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_ip,
2464                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2465         {ETH_RSS_NONFRAG_IPV6_UDP |
2466                 ETH_RSS_L3_DST_ONLY,
2467                 &hdrs_hint_ipv6_dst_udp_gtpu_ip,
2468                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2469         {ETH_RSS_NONFRAG_IPV6_UDP |
2470                 ETH_RSS_L4_DST_ONLY,
2471                 &hdrs_hint_ipv6_udp_dst_gtpu_ip,
2472                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2473         {ETH_RSS_NONFRAG_IPV6_UDP,
2474                 &hdrs_hint_ipv6_udp_gtpu_ip,
2475                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
2476         /* IPv4 GTPU IP IPv4 TCP */
2477         {ETH_RSS_NONFRAG_IPV4_TCP |
2478                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2479                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2480                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2481         {ETH_RSS_NONFRAG_IPV4_TCP |
2482                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2483                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2484                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2485         {ETH_RSS_NONFRAG_IPV4_TCP |
2486                 ETH_RSS_L3_SRC_ONLY,
2487                 &hdrs_hint_ipv4_src_tcp_gtpu_ip,
2488                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2489         {ETH_RSS_NONFRAG_IPV4_TCP |
2490                 ETH_RSS_L4_SRC_ONLY,
2491                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2492                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2493         {ETH_RSS_NONFRAG_IPV4_TCP |
2494                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2495                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2496                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2497         {ETH_RSS_NONFRAG_IPV4_TCP |
2498                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2499                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2500                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2501         {ETH_RSS_NONFRAG_IPV4_TCP |
2502                 ETH_RSS_L3_DST_ONLY,
2503                 &hdrs_hint_ipv4_dst_tcp_gtpu_ip,
2504                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2505         {ETH_RSS_NONFRAG_IPV4_TCP |
2506                 ETH_RSS_L4_DST_ONLY,
2507                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2508                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2509         {ETH_RSS_NONFRAG_IPV4_TCP,
2510                 &hdrs_hint_ipv4_tcp_gtpu_ip,
2511                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2512         /* IPv4 GTPU IP IPv6 TCP */
2513         {ETH_RSS_NONFRAG_IPV6_TCP |
2514                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2515                 &hdrs_hint_ipv6_src_tcp_src_gtpu_ip,
2516                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2517         {ETH_RSS_NONFRAG_IPV6_TCP |
2518                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2519                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_ip,
2520                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2521         {ETH_RSS_NONFRAG_IPV6_TCP |
2522                 ETH_RSS_L3_SRC_ONLY,
2523                 &hdrs_hint_ipv6_src_tcp_gtpu_ip,
2524                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2525         {ETH_RSS_NONFRAG_IPV6_TCP |
2526                 ETH_RSS_L4_SRC_ONLY,
2527                 &hdrs_hint_ipv6_tcp_src_gtpu_ip,
2528                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2529         {ETH_RSS_NONFRAG_IPV6_TCP |
2530                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2531                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_ip,
2532                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2533         {ETH_RSS_NONFRAG_IPV6_TCP |
2534                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2535                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip,
2536                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2537         {ETH_RSS_NONFRAG_IPV6_TCP |
2538                 ETH_RSS_L3_DST_ONLY,
2539                 &hdrs_hint_ipv6_dst_tcp_gtpu_ip,
2540                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2541         {ETH_RSS_NONFRAG_IPV6_TCP |
2542                 ETH_RSS_L4_DST_ONLY,
2543                 &hdrs_hint_ipv6_tcp_dst_gtpu_ip,
2544                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2545         {ETH_RSS_NONFRAG_IPV6_TCP,
2546                 &hdrs_hint_ipv6_tcp_gtpu_ip,
2547                 IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2548         /* IPv6 GTPU IP IPv4 TCP */
2549         {ETH_RSS_NONFRAG_IPV4_TCP |
2550                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2551                 &hdrs_hint_ipv4_src_tcp_src_gtpu_ip,
2552                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2553         {ETH_RSS_NONFRAG_IPV4_TCP |
2554                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2555                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_ip,
2556                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2557         {ETH_RSS_NONFRAG_IPV4_TCP |
2558                 ETH_RSS_L3_SRC_ONLY,
2559                 &hdrs_hint_ipv4_src_tcp_gtpu_ip,
2560                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2561         {ETH_RSS_NONFRAG_IPV4_TCP |
2562                 ETH_RSS_L4_SRC_ONLY,
2563                 &hdrs_hint_ipv4_tcp_src_gtpu_ip,
2564                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2565         {ETH_RSS_NONFRAG_IPV4_TCP |
2566                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2567                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_ip,
2568                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2569         {ETH_RSS_NONFRAG_IPV4_TCP |
2570                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2571                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_ip,
2572                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2573         {ETH_RSS_NONFRAG_IPV4_TCP |
2574                 ETH_RSS_L3_DST_ONLY,
2575                 &hdrs_hint_ipv4_dst_tcp_gtpu_ip,
2576                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2577         {ETH_RSS_NONFRAG_IPV4_TCP |
2578                 ETH_RSS_L4_DST_ONLY,
2579                 &hdrs_hint_ipv4_tcp_dst_gtpu_ip,
2580                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2581         {ETH_RSS_NONFRAG_IPV4_TCP,
2582                 &hdrs_hint_ipv4_tcp_gtpu_ip,
2583                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4_TCP},
2584         /* IPv6 GTPU IP IPv6 TCP */
2585         {ETH_RSS_NONFRAG_IPV6_TCP |
2586                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2587                 &hdrs_hint_ipv6_src_tcp_src_gtpu_ip,
2588                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2589         {ETH_RSS_NONFRAG_IPV6_TCP |
2590                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2591                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_ip,
2592                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2593         {ETH_RSS_NONFRAG_IPV6_TCP |
2594                 ETH_RSS_L3_SRC_ONLY,
2595                 &hdrs_hint_ipv6_src_tcp_gtpu_ip,
2596                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2597         {ETH_RSS_NONFRAG_IPV6_TCP |
2598                 ETH_RSS_L4_SRC_ONLY,
2599                 &hdrs_hint_ipv6_tcp_src_gtpu_ip,
2600                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2601         {ETH_RSS_NONFRAG_IPV6_TCP |
2602                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2603                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_ip,
2604                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2605         {ETH_RSS_NONFRAG_IPV6_TCP |
2606                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2607                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_ip,
2608                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2609         {ETH_RSS_NONFRAG_IPV6_TCP |
2610                 ETH_RSS_L3_DST_ONLY,
2611                 &hdrs_hint_ipv6_dst_tcp_gtpu_ip,
2612                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2613         {ETH_RSS_NONFRAG_IPV6_TCP |
2614                 ETH_RSS_L4_DST_ONLY,
2615                 &hdrs_hint_ipv6_tcp_dst_gtpu_ip,
2616                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2617         {ETH_RSS_NONFRAG_IPV6_TCP,
2618                 &hdrs_hint_ipv6_tcp_gtpu_ip,
2619                 IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
2620         /* GTPU EH */
2621         /* IPv4 GTPU EH IPv4 */
2622         {ETH_RSS_IPV4 |
2623                 ETH_RSS_L3_SRC_ONLY,
2624                 &hdrs_hint_ipv4_src_gtpu_eh,
2625                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2626         {ETH_RSS_IPV4 |
2627                 ETH_RSS_L3_DST_ONLY,
2628                 &hdrs_hint_ipv4_dst_gtpu_eh,
2629                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2630         {ETH_RSS_IPV4,
2631                 &hdrs_hint_ipv4_gtpu_eh,
2632                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4},
2633         /* IPv4 GTPU EH IPv6 */
2634         {ETH_RSS_IPV6 |
2635                 ETH_RSS_L3_SRC_ONLY,
2636                 &hdrs_hint_ipv6_src_gtpu_eh,
2637                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2638         {ETH_RSS_IPV6 |
2639                 ETH_RSS_L3_DST_ONLY,
2640                 &hdrs_hint_ipv6_dst_gtpu_eh,
2641                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2642         {ETH_RSS_IPV6,
2643                 &hdrs_hint_ipv6_gtpu_eh,
2644                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
2645         /* IPv6 GTPU EH IPv4 */
2646         {ETH_RSS_IPV4 |
2647                 ETH_RSS_L3_SRC_ONLY,
2648                 &hdrs_hint_ipv4_src_gtpu_eh,
2649                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2650         {ETH_RSS_IPV4 |
2651                 ETH_RSS_L3_DST_ONLY,
2652                 &hdrs_hint_ipv4_dst_gtpu_eh,
2653                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2654         {ETH_RSS_IPV4,
2655                 &hdrs_hint_ipv4_gtpu_eh,
2656                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4},
2657         /* IPv6 GTPU EH IPv6 */
2658         {ETH_RSS_IPV6 |
2659                 ETH_RSS_L3_SRC_ONLY,
2660                 &hdrs_hint_ipv6_src_gtpu_eh,
2661                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2662         {ETH_RSS_IPV6 |
2663                 ETH_RSS_L3_DST_ONLY,
2664                 &hdrs_hint_ipv6_dst_gtpu_eh,
2665                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2666         {ETH_RSS_IPV6,
2667                 &hdrs_hint_ipv6_gtpu_eh,
2668                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
2669         /* IPv4 GTPU EH IPv4 UDP */
2670         {ETH_RSS_NONFRAG_IPV4_UDP |
2671                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2672                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2673                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2674         {ETH_RSS_NONFRAG_IPV4_UDP |
2675                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2676                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2677                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2678         {ETH_RSS_NONFRAG_IPV4_UDP |
2679                 ETH_RSS_L3_SRC_ONLY,
2680                 &hdrs_hint_ipv4_src_udp_gtpu_eh,
2681                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2682         {ETH_RSS_NONFRAG_IPV4_UDP |
2683                 ETH_RSS_L4_SRC_ONLY,
2684                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2685                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2686         {ETH_RSS_NONFRAG_IPV4_UDP |
2687                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2688                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2689                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2690         {ETH_RSS_NONFRAG_IPV4_UDP |
2691                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2692                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2693                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2694         {ETH_RSS_NONFRAG_IPV4_UDP |
2695                 ETH_RSS_L3_DST_ONLY,
2696                 &hdrs_hint_ipv4_dst_udp_gtpu_eh,
2697                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2698         {ETH_RSS_NONFRAG_IPV4_UDP |
2699                 ETH_RSS_L4_DST_ONLY,
2700                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2701                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2702         {ETH_RSS_NONFRAG_IPV4_UDP,
2703                 &hdrs_hint_ipv4_udp_gtpu_eh,
2704                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2705         /* IPv4 GTPU EH IPv6 UDP */
2706         {ETH_RSS_NONFRAG_IPV6_UDP |
2707                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2708                 &hdrs_hint_ipv6_src_udp_src_gtpu_eh,
2709                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2710         {ETH_RSS_NONFRAG_IPV6_UDP |
2711                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2712                 &hdrs_hint_ipv6_src_udp_dst_gtpu_eh,
2713                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2714         {ETH_RSS_NONFRAG_IPV6_UDP |
2715                 ETH_RSS_L3_SRC_ONLY,
2716                 &hdrs_hint_ipv6_src_udp_gtpu_eh,
2717                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2718         {ETH_RSS_NONFRAG_IPV6_UDP |
2719                 ETH_RSS_L4_SRC_ONLY,
2720                 &hdrs_hint_ipv6_udp_src_gtpu_eh,
2721                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2722         {ETH_RSS_NONFRAG_IPV6_UDP |
2723                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2724                 &hdrs_hint_ipv6_dst_udp_src_gtpu_eh,
2725                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2726         {ETH_RSS_NONFRAG_IPV6_UDP |
2727                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2728                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_eh,
2729                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2730         {ETH_RSS_NONFRAG_IPV6_UDP |
2731                 ETH_RSS_L3_DST_ONLY,
2732                 &hdrs_hint_ipv6_dst_udp_gtpu_eh,
2733                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2734         {ETH_RSS_NONFRAG_IPV6_UDP |
2735                 ETH_RSS_L4_DST_ONLY,
2736                 &hdrs_hint_ipv6_udp_dst_gtpu_eh,
2737                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2738         {ETH_RSS_NONFRAG_IPV6_UDP,
2739                 &hdrs_hint_ipv6_udp_gtpu_eh,
2740                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2741         /* IPv6 GTPU EH IPv4 UDP */
2742         {ETH_RSS_NONFRAG_IPV4_UDP |
2743                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2744                 &hdrs_hint_ipv4_src_udp_src_gtpu_eh,
2745                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2746         {ETH_RSS_NONFRAG_IPV4_UDP |
2747                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2748                 &hdrs_hint_ipv4_src_udp_dst_gtpu_eh,
2749                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2750         {ETH_RSS_NONFRAG_IPV4_UDP |
2751                 ETH_RSS_L3_SRC_ONLY,
2752                 &hdrs_hint_ipv4_src_udp_gtpu_eh,
2753                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2754         {ETH_RSS_NONFRAG_IPV4_UDP |
2755                 ETH_RSS_L4_SRC_ONLY,
2756                 &hdrs_hint_ipv4_udp_src_gtpu_eh,
2757                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2758         {ETH_RSS_NONFRAG_IPV4_UDP |
2759                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2760                 &hdrs_hint_ipv4_dst_udp_src_gtpu_eh,
2761                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2762         {ETH_RSS_NONFRAG_IPV4_UDP |
2763                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2764                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_eh,
2765                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2766         {ETH_RSS_NONFRAG_IPV4_UDP |
2767                 ETH_RSS_L3_DST_ONLY,
2768                 &hdrs_hint_ipv4_dst_udp_gtpu_eh,
2769                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2770         {ETH_RSS_NONFRAG_IPV4_UDP |
2771                 ETH_RSS_L4_DST_ONLY,
2772                 &hdrs_hint_ipv4_udp_dst_gtpu_eh,
2773                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2774         {ETH_RSS_NONFRAG_IPV4_UDP,
2775                 &hdrs_hint_ipv4_udp_gtpu_eh,
2776                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_UDP},
2777         /* IPv6 GTPU EH IPv6 UDP */
2778         {ETH_RSS_NONFRAG_IPV6_UDP |
2779                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2780                 &hdrs_hint_ipv6_src_udp_src_gtpu_eh,
2781                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2782         {ETH_RSS_NONFRAG_IPV6_UDP |
2783                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2784                 &hdrs_hint_ipv6_src_udp_dst_gtpu_eh,
2785                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2786         {ETH_RSS_NONFRAG_IPV6_UDP |
2787                 ETH_RSS_L3_SRC_ONLY,
2788                 &hdrs_hint_ipv6_src_udp_gtpu_eh,
2789                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2790         {ETH_RSS_NONFRAG_IPV6_UDP |
2791                 ETH_RSS_L4_SRC_ONLY,
2792                 &hdrs_hint_ipv6_udp_src_gtpu_eh,
2793                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2794         {ETH_RSS_NONFRAG_IPV6_UDP |
2795                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2796                 &hdrs_hint_ipv6_dst_udp_src_gtpu_eh,
2797                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2798         {ETH_RSS_NONFRAG_IPV6_UDP |
2799                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2800                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_eh,
2801                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2802         {ETH_RSS_NONFRAG_IPV6_UDP |
2803                 ETH_RSS_L3_DST_ONLY,
2804                 &hdrs_hint_ipv6_dst_udp_gtpu_eh,
2805                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2806         {ETH_RSS_NONFRAG_IPV6_UDP |
2807                 ETH_RSS_L4_DST_ONLY,
2808                 &hdrs_hint_ipv6_udp_dst_gtpu_eh,
2809                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2810         {ETH_RSS_NONFRAG_IPV6_UDP,
2811                 &hdrs_hint_ipv6_udp_gtpu_eh,
2812                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
2813         /* IPv4 GTPU EH IPv4 TCP */
2814         {ETH_RSS_NONFRAG_IPV4_TCP |
2815                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2816                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
2817                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2818         {ETH_RSS_NONFRAG_IPV4_TCP |
2819                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2820                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
2821                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2822         {ETH_RSS_NONFRAG_IPV4_TCP |
2823                 ETH_RSS_L3_SRC_ONLY,
2824                 &hdrs_hint_ipv4_src_tcp_gtpu_eh,
2825                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2826         {ETH_RSS_NONFRAG_IPV4_TCP |
2827                 ETH_RSS_L4_SRC_ONLY,
2828                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
2829                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2830         {ETH_RSS_NONFRAG_IPV4_TCP |
2831                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2832                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
2833                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2834         {ETH_RSS_NONFRAG_IPV4_TCP |
2835                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2836                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
2837                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2838         {ETH_RSS_NONFRAG_IPV4_TCP |
2839                 ETH_RSS_L3_DST_ONLY,
2840                 &hdrs_hint_ipv4_dst_tcp_gtpu_eh,
2841                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2842         {ETH_RSS_NONFRAG_IPV4_TCP |
2843                 ETH_RSS_L4_DST_ONLY,
2844                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
2845                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2846         {ETH_RSS_NONFRAG_IPV4_TCP,
2847                 &hdrs_hint_ipv4_tcp_gtpu_eh,
2848                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2849         /* IPv4 GTPU EH IPv6 TCP */
2850         {ETH_RSS_NONFRAG_IPV6_TCP |
2851                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2852                 &hdrs_hint_ipv6_src_tcp_src_gtpu_eh,
2853                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2854         {ETH_RSS_NONFRAG_IPV6_TCP |
2855                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2856                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_eh,
2857                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2858         {ETH_RSS_NONFRAG_IPV6_TCP |
2859                 ETH_RSS_L3_SRC_ONLY,
2860                 &hdrs_hint_ipv6_src_tcp_gtpu_eh,
2861                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2862         {ETH_RSS_NONFRAG_IPV6_TCP |
2863                 ETH_RSS_L4_SRC_ONLY,
2864                 &hdrs_hint_ipv6_tcp_src_gtpu_eh,
2865                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2866         {ETH_RSS_NONFRAG_IPV6_TCP |
2867                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2868                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_eh,
2869                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2870         {ETH_RSS_NONFRAG_IPV6_TCP |
2871                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2872                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh,
2873                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2874         {ETH_RSS_NONFRAG_IPV6_TCP |
2875                 ETH_RSS_L3_DST_ONLY,
2876                 &hdrs_hint_ipv6_dst_tcp_gtpu_eh,
2877                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2878         {ETH_RSS_NONFRAG_IPV6_TCP |
2879                 ETH_RSS_L4_DST_ONLY,
2880                 &hdrs_hint_ipv6_tcp_dst_gtpu_eh,
2881                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2882         {ETH_RSS_NONFRAG_IPV6_TCP,
2883                 &hdrs_hint_ipv6_tcp_gtpu_eh,
2884                 IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2885         /* IPv6 GTPU EH IPv4 TCP */
2886         {ETH_RSS_NONFRAG_IPV4_TCP |
2887                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2888                 &hdrs_hint_ipv4_src_tcp_src_gtpu_eh,
2889                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2890         {ETH_RSS_NONFRAG_IPV4_TCP |
2891                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2892                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_eh,
2893                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2894         {ETH_RSS_NONFRAG_IPV4_TCP |
2895                 ETH_RSS_L3_SRC_ONLY,
2896                 &hdrs_hint_ipv4_src_tcp_gtpu_eh,
2897                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2898         {ETH_RSS_NONFRAG_IPV4_TCP |
2899                 ETH_RSS_L4_SRC_ONLY,
2900                 &hdrs_hint_ipv4_tcp_src_gtpu_eh,
2901                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2902         {ETH_RSS_NONFRAG_IPV4_TCP |
2903                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2904                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_eh,
2905                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2906         {ETH_RSS_NONFRAG_IPV4_TCP |
2907                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2908                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_eh,
2909                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2910         {ETH_RSS_NONFRAG_IPV4_TCP |
2911                 ETH_RSS_L3_DST_ONLY,
2912                 &hdrs_hint_ipv4_dst_tcp_gtpu_eh,
2913                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2914         {ETH_RSS_NONFRAG_IPV4_TCP |
2915                 ETH_RSS_L4_DST_ONLY,
2916                 &hdrs_hint_ipv4_tcp_dst_gtpu_eh,
2917                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2918         {ETH_RSS_NONFRAG_IPV4_TCP,
2919                 &hdrs_hint_ipv4_tcp_gtpu_eh,
2920                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV4_TCP},
2921         /* IPv6 GTPU EH IPv6 TCP */
2922         {ETH_RSS_NONFRAG_IPV6_TCP |
2923                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
2924                 &hdrs_hint_ipv6_src_tcp_src_gtpu_eh,
2925                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2926         {ETH_RSS_NONFRAG_IPV6_TCP |
2927                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
2928                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_eh,
2929                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2930         {ETH_RSS_NONFRAG_IPV6_TCP |
2931                 ETH_RSS_L3_SRC_ONLY,
2932                 &hdrs_hint_ipv6_src_tcp_gtpu_eh,
2933                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2934         {ETH_RSS_NONFRAG_IPV6_TCP |
2935                 ETH_RSS_L4_SRC_ONLY,
2936                 &hdrs_hint_ipv6_tcp_src_gtpu_eh,
2937                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2938         {ETH_RSS_NONFRAG_IPV6_TCP |
2939                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
2940                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_eh,
2941                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2942         {ETH_RSS_NONFRAG_IPV6_TCP |
2943                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
2944                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_eh,
2945                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2946         {ETH_RSS_NONFRAG_IPV6_TCP |
2947                 ETH_RSS_L3_DST_ONLY,
2948                 &hdrs_hint_ipv6_dst_tcp_gtpu_eh,
2949                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2950         {ETH_RSS_NONFRAG_IPV6_TCP |
2951                 ETH_RSS_L4_DST_ONLY,
2952                 &hdrs_hint_ipv6_tcp_dst_gtpu_eh,
2953                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2954         {ETH_RSS_NONFRAG_IPV6_TCP,
2955                 &hdrs_hint_ipv6_tcp_gtpu_eh,
2956                 IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
2957         /* GTPU EH UP */
2958         /* IPv4 GTPU EH UP IPv4 */
2959         {ETH_RSS_IPV4 |
2960                 ETH_RSS_L3_SRC_ONLY,
2961                 &hdrs_hint_ipv4_src_gtpu_up,
2962                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2963         {ETH_RSS_IPV4 |
2964                 ETH_RSS_L3_DST_ONLY,
2965                 &hdrs_hint_ipv4_dst_gtpu_up,
2966                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2967         {ETH_RSS_IPV4,
2968                 &hdrs_hint_ipv4_gtpu_up,
2969                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2970         /* IPv4 GTPU EH UP IPv6 */
2971         {ETH_RSS_IPV6 |
2972                 ETH_RSS_L3_SRC_ONLY,
2973                 &hdrs_hint_ipv6_src_gtpu_up,
2974                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2975         {ETH_RSS_IPV6 |
2976                 ETH_RSS_L3_DST_ONLY,
2977                 &hdrs_hint_ipv6_dst_gtpu_up,
2978                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2979         {ETH_RSS_IPV6,
2980                 &hdrs_hint_ipv6_gtpu_up,
2981                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2982         /* IPv6 GTPU EH UP IPv4 */
2983         {ETH_RSS_IPV4 |
2984                 ETH_RSS_L3_SRC_ONLY,
2985                 &hdrs_hint_ipv4_src_gtpu_up,
2986                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2987         {ETH_RSS_IPV4 |
2988                 ETH_RSS_L3_DST_ONLY,
2989                 &hdrs_hint_ipv4_dst_gtpu_up,
2990                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2991         {ETH_RSS_IPV4,
2992                 &hdrs_hint_ipv4_gtpu_up,
2993                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4},
2994         /* IPv6 GTPU EH UP IPv6 */
2995         {ETH_RSS_IPV6 |
2996                 ETH_RSS_L3_SRC_ONLY,
2997                 &hdrs_hint_ipv6_src_gtpu_up,
2998                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
2999         {ETH_RSS_IPV6 |
3000                 ETH_RSS_L3_DST_ONLY,
3001                 &hdrs_hint_ipv6_dst_gtpu_up,
3002                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3003         {ETH_RSS_IPV6,
3004                 &hdrs_hint_ipv6_gtpu_up,
3005                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
3006         /* IPv4 GTPU EH UP IPv4 UDP */
3007         {ETH_RSS_NONFRAG_IPV4_UDP |
3008                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3009                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
3010                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3011         {ETH_RSS_NONFRAG_IPV4_UDP |
3012                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3013                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
3014                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3015         {ETH_RSS_NONFRAG_IPV4_UDP |
3016                 ETH_RSS_L3_SRC_ONLY,
3017                 &hdrs_hint_ipv4_src_udp_gtpu_up,
3018                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3019         {ETH_RSS_NONFRAG_IPV4_UDP |
3020                 ETH_RSS_L4_SRC_ONLY,
3021                 &hdrs_hint_ipv4_udp_src_gtpu_up,
3022                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3023         {ETH_RSS_NONFRAG_IPV4_UDP |
3024                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3025                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
3026                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3027         {ETH_RSS_NONFRAG_IPV4_UDP |
3028                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3029                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
3030                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3031         {ETH_RSS_NONFRAG_IPV4_UDP |
3032                 ETH_RSS_L3_DST_ONLY,
3033                 &hdrs_hint_ipv4_dst_udp_gtpu_up,
3034                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3035         {ETH_RSS_NONFRAG_IPV4_UDP |
3036                 ETH_RSS_L4_DST_ONLY,
3037                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
3038                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3039         {ETH_RSS_NONFRAG_IPV4_UDP,
3040                 &hdrs_hint_ipv4_udp_gtpu_up,
3041                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3042         /* IPv4 GTPU EH UP IPv6 UDP */
3043         {ETH_RSS_NONFRAG_IPV6_UDP |
3044                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3045                 &hdrs_hint_ipv6_src_udp_src_gtpu_up,
3046                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3047         {ETH_RSS_NONFRAG_IPV6_UDP |
3048                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3049                 &hdrs_hint_ipv6_src_udp_dst_gtpu_up,
3050                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3051         {ETH_RSS_NONFRAG_IPV6_UDP |
3052                 ETH_RSS_L3_SRC_ONLY,
3053                 &hdrs_hint_ipv6_src_udp_gtpu_up,
3054                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3055         {ETH_RSS_NONFRAG_IPV6_UDP |
3056                 ETH_RSS_L4_SRC_ONLY,
3057                 &hdrs_hint_ipv6_udp_src_gtpu_up,
3058                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3059         {ETH_RSS_NONFRAG_IPV6_UDP |
3060                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3061                 &hdrs_hint_ipv6_dst_udp_src_gtpu_up,
3062                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3063         {ETH_RSS_NONFRAG_IPV6_UDP |
3064                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3065                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_up,
3066                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3067         {ETH_RSS_NONFRAG_IPV6_UDP |
3068                 ETH_RSS_L3_DST_ONLY,
3069                 &hdrs_hint_ipv6_dst_udp_gtpu_up,
3070                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3071         {ETH_RSS_NONFRAG_IPV6_UDP |
3072                 ETH_RSS_L4_DST_ONLY,
3073                 &hdrs_hint_ipv6_udp_dst_gtpu_up,
3074                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3075         {ETH_RSS_NONFRAG_IPV6_UDP,
3076                 &hdrs_hint_ipv6_udp_gtpu_up,
3077                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3078         /* IPv6 GTPU EH UP IPv4 UDP */
3079         {ETH_RSS_NONFRAG_IPV4_UDP |
3080                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3081                 &hdrs_hint_ipv4_src_udp_src_gtpu_up,
3082                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3083         {ETH_RSS_NONFRAG_IPV4_UDP |
3084                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3085                 &hdrs_hint_ipv4_src_udp_dst_gtpu_up,
3086                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3087         {ETH_RSS_NONFRAG_IPV4_UDP |
3088                 ETH_RSS_L3_SRC_ONLY,
3089                 &hdrs_hint_ipv4_src_udp_gtpu_up,
3090                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3091         {ETH_RSS_NONFRAG_IPV4_UDP |
3092                 ETH_RSS_L4_SRC_ONLY,
3093                 &hdrs_hint_ipv4_udp_src_gtpu_up,
3094                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3095         {ETH_RSS_NONFRAG_IPV4_UDP |
3096                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3097                 &hdrs_hint_ipv4_dst_udp_src_gtpu_up,
3098                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3099         {ETH_RSS_NONFRAG_IPV4_UDP |
3100                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3101                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_up,
3102                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3103         {ETH_RSS_NONFRAG_IPV4_UDP |
3104                 ETH_RSS_L3_DST_ONLY,
3105                 &hdrs_hint_ipv4_dst_udp_gtpu_up,
3106                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3107         {ETH_RSS_NONFRAG_IPV4_UDP |
3108                 ETH_RSS_L4_DST_ONLY,
3109                 &hdrs_hint_ipv4_udp_dst_gtpu_up,
3110                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3111         {ETH_RSS_NONFRAG_IPV4_UDP,
3112                 &hdrs_hint_ipv4_udp_gtpu_up,
3113                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_UDP},
3114         /* IPv6 GTPU EH UP IPv6 UDP */
3115         {ETH_RSS_NONFRAG_IPV6_UDP |
3116                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3117                 &hdrs_hint_ipv6_src_udp_src_gtpu_up,
3118                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3119         {ETH_RSS_NONFRAG_IPV6_UDP |
3120                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3121                 &hdrs_hint_ipv6_src_udp_dst_gtpu_up,
3122                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3123         {ETH_RSS_NONFRAG_IPV6_UDP |
3124                 ETH_RSS_L3_SRC_ONLY,
3125                 &hdrs_hint_ipv6_src_udp_gtpu_up,
3126                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3127         {ETH_RSS_NONFRAG_IPV6_UDP |
3128                 ETH_RSS_L4_SRC_ONLY,
3129                 &hdrs_hint_ipv6_udp_src_gtpu_up,
3130                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3131         {ETH_RSS_NONFRAG_IPV6_UDP |
3132                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3133                 &hdrs_hint_ipv6_dst_udp_src_gtpu_up,
3134                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3135         {ETH_RSS_NONFRAG_IPV6_UDP |
3136                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3137                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_up,
3138                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3139         {ETH_RSS_NONFRAG_IPV6_UDP |
3140                 ETH_RSS_L3_DST_ONLY,
3141                 &hdrs_hint_ipv6_dst_udp_gtpu_up,
3142                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3143         {ETH_RSS_NONFRAG_IPV6_UDP |
3144                 ETH_RSS_L4_DST_ONLY,
3145                 &hdrs_hint_ipv6_udp_dst_gtpu_up,
3146                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3147         {ETH_RSS_NONFRAG_IPV6_UDP,
3148                 &hdrs_hint_ipv6_udp_gtpu_up,
3149                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
3150         /* IPv4 GTPU EH UP IPv4 TCP */
3151         {ETH_RSS_NONFRAG_IPV4_TCP |
3152                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3153                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3154                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3155         {ETH_RSS_NONFRAG_IPV4_TCP |
3156                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3157                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3158                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3159         {ETH_RSS_NONFRAG_IPV4_TCP |
3160                 ETH_RSS_L3_SRC_ONLY,
3161                 &hdrs_hint_ipv4_src_tcp_gtpu_up,
3162                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3163         {ETH_RSS_NONFRAG_IPV4_TCP |
3164                 ETH_RSS_L4_SRC_ONLY,
3165                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3166                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3167         {ETH_RSS_NONFRAG_IPV4_TCP |
3168                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3169                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3170                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3171         {ETH_RSS_NONFRAG_IPV4_TCP |
3172                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3173                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3174                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3175         {ETH_RSS_NONFRAG_IPV4_TCP |
3176                 ETH_RSS_L3_DST_ONLY,
3177                 &hdrs_hint_ipv4_dst_tcp_gtpu_up,
3178                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3179         {ETH_RSS_NONFRAG_IPV4_TCP |
3180                 ETH_RSS_L4_DST_ONLY,
3181                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3182                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3183         {ETH_RSS_NONFRAG_IPV4_TCP,
3184                 &hdrs_hint_ipv4_tcp_gtpu_up,
3185                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3186         /* IPv4 GTPU EH UP IPv6 TCP */
3187         {ETH_RSS_NONFRAG_IPV6_TCP |
3188                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3189                 &hdrs_hint_ipv6_src_tcp_src_gtpu_up,
3190                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3191         {ETH_RSS_NONFRAG_IPV6_TCP |
3192                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3193                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_up,
3194                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3195         {ETH_RSS_NONFRAG_IPV6_TCP |
3196                 ETH_RSS_L3_SRC_ONLY,
3197                 &hdrs_hint_ipv6_src_tcp_gtpu_up,
3198                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3199         {ETH_RSS_NONFRAG_IPV6_TCP |
3200                 ETH_RSS_L4_SRC_ONLY,
3201                 &hdrs_hint_ipv6_tcp_src_gtpu_up,
3202                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3203         {ETH_RSS_NONFRAG_IPV6_TCP |
3204                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3205                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_up,
3206                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3207         {ETH_RSS_NONFRAG_IPV6_TCP |
3208                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3209                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_up,
3210                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3211         {ETH_RSS_NONFRAG_IPV6_TCP |
3212                 ETH_RSS_L3_DST_ONLY,
3213                 &hdrs_hint_ipv6_dst_tcp_gtpu_up,
3214                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3215         {ETH_RSS_NONFRAG_IPV6_TCP |
3216                 ETH_RSS_L4_DST_ONLY,
3217                 &hdrs_hint_ipv6_tcp_dst_gtpu_up,
3218                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3219         {ETH_RSS_NONFRAG_IPV6_TCP,
3220                 &hdrs_hint_ipv6_tcp_gtpu_up,
3221                 IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3222         /* IPv6 GTPU EH UP IPv4 TCP */
3223         {ETH_RSS_NONFRAG_IPV4_TCP |
3224                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3225                 &hdrs_hint_ipv4_src_tcp_src_gtpu_up,
3226                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3227         {ETH_RSS_NONFRAG_IPV4_TCP |
3228                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3229                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_up,
3230                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3231         {ETH_RSS_NONFRAG_IPV4_TCP |
3232                 ETH_RSS_L3_SRC_ONLY,
3233                 &hdrs_hint_ipv4_src_tcp_gtpu_up,
3234                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3235         {ETH_RSS_NONFRAG_IPV4_TCP |
3236                 ETH_RSS_L4_SRC_ONLY,
3237                 &hdrs_hint_ipv4_tcp_src_gtpu_up,
3238                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3239         {ETH_RSS_NONFRAG_IPV4_TCP |
3240                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3241                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_up,
3242                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3243         {ETH_RSS_NONFRAG_IPV4_TCP |
3244                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3245                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_up,
3246                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3247         {ETH_RSS_NONFRAG_IPV4_TCP |
3248                 ETH_RSS_L3_DST_ONLY,
3249                 &hdrs_hint_ipv4_dst_tcp_gtpu_up,
3250                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3251         {ETH_RSS_NONFRAG_IPV4_TCP |
3252                 ETH_RSS_L4_DST_ONLY,
3253                 &hdrs_hint_ipv4_tcp_dst_gtpu_up,
3254                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3255         {ETH_RSS_NONFRAG_IPV4_TCP,
3256                 &hdrs_hint_ipv4_tcp_gtpu_up,
3257                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV4_TCP},
3258         /* IPv6 GTPU EH UP IPv6 TCP */
3259         {ETH_RSS_NONFRAG_IPV6_TCP |
3260                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3261                 &hdrs_hint_ipv6_src_tcp_src_gtpu_up,
3262                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3263         {ETH_RSS_NONFRAG_IPV6_TCP |
3264                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3265                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_up,
3266                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3267         {ETH_RSS_NONFRAG_IPV6_TCP |
3268                 ETH_RSS_L3_SRC_ONLY,
3269                 &hdrs_hint_ipv6_src_tcp_gtpu_up,
3270                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3271         {ETH_RSS_NONFRAG_IPV6_TCP |
3272                 ETH_RSS_L4_SRC_ONLY,
3273                 &hdrs_hint_ipv6_tcp_src_gtpu_up,
3274                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3275         {ETH_RSS_NONFRAG_IPV6_TCP |
3276                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3277                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_up,
3278                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3279         {ETH_RSS_NONFRAG_IPV6_TCP |
3280                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3281                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_up,
3282                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3283         {ETH_RSS_NONFRAG_IPV6_TCP |
3284                 ETH_RSS_L3_DST_ONLY,
3285                 &hdrs_hint_ipv6_dst_tcp_gtpu_up,
3286                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3287         {ETH_RSS_NONFRAG_IPV6_TCP |
3288                 ETH_RSS_L4_DST_ONLY,
3289                 &hdrs_hint_ipv6_tcp_dst_gtpu_up,
3290                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3291         {ETH_RSS_NONFRAG_IPV6_TCP,
3292                 &hdrs_hint_ipv6_tcp_gtpu_up,
3293                 IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
3294         /* GTPU EH DWN */
3295         /* IPv4 GTPU EH DWN IPv4 */
3296         {ETH_RSS_IPV4 |
3297                 ETH_RSS_L3_SRC_ONLY,
3298                 &hdrs_hint_ipv4_src_gtpu_dwn,
3299                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3300         {ETH_RSS_IPV4 |
3301                 ETH_RSS_L3_DST_ONLY,
3302                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3303                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3304         {ETH_RSS_IPV4,
3305                 &hdrs_hint_ipv4_gtpu_dwn,
3306                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3307         /* IPv4 GTPU EH DWN IPv6 */
3308         {ETH_RSS_IPV6 |
3309                 ETH_RSS_L3_SRC_ONLY,
3310                 &hdrs_hint_ipv6_src_gtpu_dwn,
3311                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3312         {ETH_RSS_IPV6 |
3313                 ETH_RSS_L3_DST_ONLY,
3314                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3315                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3316         {ETH_RSS_IPV6,
3317                 &hdrs_hint_ipv6_gtpu_dwn,
3318                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3319         /* IPv6 GTPU EH DWN IPv4 */
3320         {ETH_RSS_IPV4 |
3321                 ETH_RSS_L3_SRC_ONLY,
3322                 &hdrs_hint_ipv4_src_gtpu_dwn,
3323                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3324         {ETH_RSS_IPV4 |
3325                 ETH_RSS_L3_DST_ONLY,
3326                 &hdrs_hint_ipv4_dst_gtpu_dwn,
3327                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3328         {ETH_RSS_IPV4,
3329                 &hdrs_hint_ipv4_gtpu_dwn,
3330                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4},
3331         /* IPv6 GTPU EH DWN IPv6 */
3332         {ETH_RSS_IPV6 |
3333                 ETH_RSS_L3_SRC_ONLY,
3334                 &hdrs_hint_ipv6_src_gtpu_dwn,
3335                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3336         {ETH_RSS_IPV6 |
3337                 ETH_RSS_L3_DST_ONLY,
3338                 &hdrs_hint_ipv6_dst_gtpu_dwn,
3339                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3340         {ETH_RSS_IPV6,
3341                 &hdrs_hint_ipv6_gtpu_dwn,
3342                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
3343         /* IPv4 GTPU EH DWN IPv4 UDP */
3344         {ETH_RSS_NONFRAG_IPV4_UDP |
3345                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3346                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3347                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3348         {ETH_RSS_NONFRAG_IPV4_UDP |
3349                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3350                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3351                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3352         {ETH_RSS_NONFRAG_IPV4_UDP |
3353                 ETH_RSS_L3_SRC_ONLY,
3354                 &hdrs_hint_ipv4_src_udp_gtpu_dwn,
3355                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3356         {ETH_RSS_NONFRAG_IPV4_UDP |
3357                 ETH_RSS_L4_SRC_ONLY,
3358                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3359                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3360         {ETH_RSS_NONFRAG_IPV4_UDP |
3361                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3362                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3363                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3364         {ETH_RSS_NONFRAG_IPV4_UDP |
3365                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3366                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3367                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3368         {ETH_RSS_NONFRAG_IPV4_UDP |
3369                 ETH_RSS_L3_DST_ONLY,
3370                 &hdrs_hint_ipv4_dst_udp_gtpu_dwn,
3371                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3372         {ETH_RSS_NONFRAG_IPV4_UDP |
3373                 ETH_RSS_L4_DST_ONLY,
3374                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3375                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3376         {ETH_RSS_NONFRAG_IPV4_UDP,
3377                 &hdrs_hint_ipv4_udp_gtpu_dwn,
3378                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3379         /* IPv4 GTPU EH DWN IPv6 UDP */
3380         {ETH_RSS_NONFRAG_IPV6_UDP |
3381                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3382                 &hdrs_hint_ipv6_src_udp_src_gtpu_dwn,
3383                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3384         {ETH_RSS_NONFRAG_IPV6_UDP |
3385                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3386                 &hdrs_hint_ipv6_src_udp_dst_gtpu_dwn,
3387                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3388         {ETH_RSS_NONFRAG_IPV6_UDP |
3389                 ETH_RSS_L3_SRC_ONLY,
3390                 &hdrs_hint_ipv6_src_udp_gtpu_dwn,
3391                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3392         {ETH_RSS_NONFRAG_IPV6_UDP |
3393                 ETH_RSS_L4_SRC_ONLY,
3394                 &hdrs_hint_ipv6_udp_src_gtpu_dwn,
3395                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3396         {ETH_RSS_NONFRAG_IPV6_UDP |
3397                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3398                 &hdrs_hint_ipv6_dst_udp_src_gtpu_dwn,
3399                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3400         {ETH_RSS_NONFRAG_IPV6_UDP |
3401                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3402                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn,
3403                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3404         {ETH_RSS_NONFRAG_IPV6_UDP |
3405                 ETH_RSS_L3_DST_ONLY,
3406                 &hdrs_hint_ipv6_dst_udp_gtpu_dwn,
3407                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3408         {ETH_RSS_NONFRAG_IPV6_UDP |
3409                 ETH_RSS_L4_DST_ONLY,
3410                 &hdrs_hint_ipv6_udp_dst_gtpu_dwn,
3411                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3412         {ETH_RSS_NONFRAG_IPV6_UDP,
3413                 &hdrs_hint_ipv6_udp_gtpu_dwn,
3414                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3415         /* IPv6 GTPU EH DWN IPv4 UDP */
3416         {ETH_RSS_NONFRAG_IPV4_UDP |
3417                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3418                 &hdrs_hint_ipv4_src_udp_src_gtpu_dwn,
3419                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3420         {ETH_RSS_NONFRAG_IPV4_UDP |
3421                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3422                 &hdrs_hint_ipv4_src_udp_dst_gtpu_dwn,
3423                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3424         {ETH_RSS_NONFRAG_IPV4_UDP |
3425                 ETH_RSS_L3_SRC_ONLY,
3426                 &hdrs_hint_ipv4_src_udp_gtpu_dwn,
3427                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3428         {ETH_RSS_NONFRAG_IPV4_UDP |
3429                 ETH_RSS_L4_SRC_ONLY,
3430                 &hdrs_hint_ipv4_udp_src_gtpu_dwn,
3431                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3432         {ETH_RSS_NONFRAG_IPV4_UDP |
3433                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3434                 &hdrs_hint_ipv4_dst_udp_src_gtpu_dwn,
3435                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3436         {ETH_RSS_NONFRAG_IPV4_UDP |
3437                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3438                 &hdrs_hint_ipv4_dst_udp_dst_gtpu_dwn,
3439                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3440         {ETH_RSS_NONFRAG_IPV4_UDP |
3441                 ETH_RSS_L3_DST_ONLY,
3442                 &hdrs_hint_ipv4_dst_udp_gtpu_dwn,
3443                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3444         {ETH_RSS_NONFRAG_IPV4_UDP |
3445                 ETH_RSS_L4_DST_ONLY,
3446                 &hdrs_hint_ipv4_udp_dst_gtpu_dwn,
3447                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3448         {ETH_RSS_NONFRAG_IPV4_UDP,
3449                 &hdrs_hint_ipv4_udp_gtpu_dwn,
3450                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_UDP},
3451         /* IPv6 GTPU EH DWN IPv6 UDP */
3452         {ETH_RSS_NONFRAG_IPV6_UDP |
3453                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3454                 &hdrs_hint_ipv6_src_udp_src_gtpu_dwn,
3455                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3456         {ETH_RSS_NONFRAG_IPV6_UDP |
3457                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3458                 &hdrs_hint_ipv6_src_udp_dst_gtpu_dwn,
3459                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3460         {ETH_RSS_NONFRAG_IPV6_UDP |
3461                 ETH_RSS_L3_SRC_ONLY,
3462                 &hdrs_hint_ipv6_src_udp_gtpu_dwn,
3463                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3464         {ETH_RSS_NONFRAG_IPV6_UDP |
3465                 ETH_RSS_L4_SRC_ONLY,
3466                 &hdrs_hint_ipv6_udp_src_gtpu_dwn,
3467                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3468         {ETH_RSS_NONFRAG_IPV6_UDP |
3469                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3470                 &hdrs_hint_ipv6_dst_udp_src_gtpu_dwn,
3471                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3472         {ETH_RSS_NONFRAG_IPV6_UDP |
3473                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3474                 &hdrs_hint_ipv6_dst_udp_dst_gtpu_dwn,
3475                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3476         {ETH_RSS_NONFRAG_IPV6_UDP |
3477                 ETH_RSS_L3_DST_ONLY,
3478                 &hdrs_hint_ipv6_dst_udp_gtpu_dwn,
3479                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3480         {ETH_RSS_NONFRAG_IPV6_UDP |
3481                 ETH_RSS_L4_DST_ONLY,
3482                 &hdrs_hint_ipv6_udp_dst_gtpu_dwn,
3483                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3484         {ETH_RSS_NONFRAG_IPV6_UDP,
3485                 &hdrs_hint_ipv6_udp_gtpu_dwn,
3486                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
3487         /* IPv4 GTPU EH DWN IPv4 TCP */
3488         {ETH_RSS_NONFRAG_IPV4_TCP |
3489                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3490                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3491                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3492         {ETH_RSS_NONFRAG_IPV4_TCP |
3493                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3494                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3495                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3496         {ETH_RSS_NONFRAG_IPV4_TCP |
3497                 ETH_RSS_L3_SRC_ONLY,
3498                 &hdrs_hint_ipv4_src_tcp_gtpu_dwn,
3499                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3500         {ETH_RSS_NONFRAG_IPV4_TCP |
3501                 ETH_RSS_L4_SRC_ONLY,
3502                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3503                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3504         {ETH_RSS_NONFRAG_IPV4_TCP |
3505                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3506                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3507                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3508         {ETH_RSS_NONFRAG_IPV4_TCP |
3509                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3510                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3511                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3512         {ETH_RSS_NONFRAG_IPV4_TCP |
3513                 ETH_RSS_L3_DST_ONLY,
3514                 &hdrs_hint_ipv4_dst_tcp_gtpu_dwn,
3515                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3516         {ETH_RSS_NONFRAG_IPV4_TCP |
3517                 ETH_RSS_L4_DST_ONLY,
3518                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3519                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3520         {ETH_RSS_NONFRAG_IPV4_TCP,
3521                 &hdrs_hint_ipv4_tcp_gtpu_dwn,
3522                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3523         /* IPv4 GTPU EH DWN IPv6 TCP */
3524         {ETH_RSS_NONFRAG_IPV6_TCP |
3525                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3526                 &hdrs_hint_ipv6_src_tcp_src_gtpu_dwn,
3527                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3528         {ETH_RSS_NONFRAG_IPV6_TCP |
3529                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3530                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn,
3531                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3532         {ETH_RSS_NONFRAG_IPV6_TCP |
3533                 ETH_RSS_L3_SRC_ONLY,
3534                 &hdrs_hint_ipv6_src_tcp_gtpu_dwn,
3535                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3536         {ETH_RSS_NONFRAG_IPV6_TCP |
3537                 ETH_RSS_L4_SRC_ONLY,
3538                 &hdrs_hint_ipv6_tcp_src_gtpu_dwn,
3539                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3540         {ETH_RSS_NONFRAG_IPV6_TCP |
3541                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3542                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn,
3543                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3544         {ETH_RSS_NONFRAG_IPV6_TCP |
3545                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3546                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn,
3547                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3548         {ETH_RSS_NONFRAG_IPV6_TCP |
3549                 ETH_RSS_L3_DST_ONLY,
3550                 &hdrs_hint_ipv6_dst_tcp_gtpu_dwn,
3551                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3552         {ETH_RSS_NONFRAG_IPV6_TCP |
3553                 ETH_RSS_L4_DST_ONLY,
3554                 &hdrs_hint_ipv6_tcp_dst_gtpu_dwn,
3555                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3556         {ETH_RSS_NONFRAG_IPV6_TCP,
3557                 &hdrs_hint_ipv6_tcp_gtpu_dwn,
3558                 IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3559         /* IPv6 GTPU EH DWN IPv4 TCP */
3560         {ETH_RSS_NONFRAG_IPV4_TCP |
3561                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3562                 &hdrs_hint_ipv4_src_tcp_src_gtpu_dwn,
3563                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3564         {ETH_RSS_NONFRAG_IPV4_TCP |
3565                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3566                 &hdrs_hint_ipv4_src_tcp_dst_gtpu_dwn,
3567                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3568         {ETH_RSS_NONFRAG_IPV4_TCP |
3569                 ETH_RSS_L3_SRC_ONLY,
3570                 &hdrs_hint_ipv4_src_tcp_gtpu_dwn,
3571                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3572         {ETH_RSS_NONFRAG_IPV4_TCP |
3573                 ETH_RSS_L4_SRC_ONLY,
3574                 &hdrs_hint_ipv4_tcp_src_gtpu_dwn,
3575                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3576         {ETH_RSS_NONFRAG_IPV4_TCP |
3577                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3578                 &hdrs_hint_ipv4_dst_tcp_src_gtpu_dwn,
3579                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3580         {ETH_RSS_NONFRAG_IPV4_TCP |
3581                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3582                 &hdrs_hint_ipv4_dst_tcp_dst_gtpu_dwn,
3583                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3584         {ETH_RSS_NONFRAG_IPV4_TCP |
3585                 ETH_RSS_L3_DST_ONLY,
3586                 &hdrs_hint_ipv4_dst_tcp_gtpu_dwn,
3587                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3588         {ETH_RSS_NONFRAG_IPV4_TCP |
3589                 ETH_RSS_L4_DST_ONLY,
3590                 &hdrs_hint_ipv4_tcp_dst_gtpu_dwn,
3591                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3592         {ETH_RSS_NONFRAG_IPV4_TCP,
3593                 &hdrs_hint_ipv4_tcp_gtpu_dwn,
3594                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV4_TCP},
3595         /* IPv6 GTPU EH DWN IPv6 TCP */
3596         {ETH_RSS_NONFRAG_IPV6_TCP |
3597                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
3598                 &hdrs_hint_ipv6_src_tcp_src_gtpu_dwn,
3599                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3600         {ETH_RSS_NONFRAG_IPV6_TCP |
3601                 ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
3602                 &hdrs_hint_ipv6_src_tcp_dst_gtpu_dwn,
3603                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3604         {ETH_RSS_NONFRAG_IPV6_TCP |
3605                 ETH_RSS_L3_SRC_ONLY,
3606                 &hdrs_hint_ipv6_src_tcp_gtpu_dwn,
3607                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3608         {ETH_RSS_NONFRAG_IPV6_TCP |
3609                 ETH_RSS_L4_SRC_ONLY,
3610                 &hdrs_hint_ipv6_tcp_src_gtpu_dwn,
3611                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3612         {ETH_RSS_NONFRAG_IPV6_TCP |
3613                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
3614                 &hdrs_hint_ipv6_dst_tcp_src_gtpu_dwn,
3615                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3616         {ETH_RSS_NONFRAG_IPV6_TCP |
3617                 ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
3618                 &hdrs_hint_ipv6_dst_tcp_dst_gtpu_dwn,
3619                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3620         {ETH_RSS_NONFRAG_IPV6_TCP |
3621                 ETH_RSS_L3_DST_ONLY,
3622                 &hdrs_hint_ipv6_dst_tcp_gtpu_dwn,
3623                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3624         {ETH_RSS_NONFRAG_IPV6_TCP |
3625                 ETH_RSS_L4_DST_ONLY,
3626                 &hdrs_hint_ipv6_tcp_dst_gtpu_dwn,
3627                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3628         {ETH_RSS_NONFRAG_IPV6_TCP,
3629                 &hdrs_hint_ipv6_tcp_gtpu_dwn,
3630                 IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
3631 };
3632
3633 struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = {
3634         &hdrs_hint_ipv4,
3635         &hdrs_hint_ipv4_udp,
3636         &hdrs_hint_ipv4_tcp,
3637         &hdrs_hint_ipv4_sctp,
3638         &hdrs_hint_ipv6,
3639         &hdrs_hint_ipv6_udp,
3640         &hdrs_hint_ipv6_tcp,
3641         &hdrs_hint_ipv6_sctp,
3642         &hdrs_hint_ipv4_gtpu_ip,
3643         &hdrs_hint_ipv4_udp_gtpu_ip,
3644         &hdrs_hint_ipv4_tcp_gtpu_ip,
3645         &hdrs_hint_ipv4_gtpu_eh,
3646         &hdrs_hint_ipv4_udp_gtpu_eh,
3647         &hdrs_hint_ipv4_tcp_gtpu_eh,
3648         &hdrs_hint_ipv6_gtpu_ip,
3649         &hdrs_hint_ipv6_udp_gtpu_ip,
3650         &hdrs_hint_ipv6_tcp_gtpu_ip,
3651         &hdrs_hint_ipv6_gtpu_eh,
3652         &hdrs_hint_ipv6_udp_gtpu_eh,
3653         &hdrs_hint_ipv6_tcp_gtpu_eh,
3654 };
3655
3656 static struct iavf_flow_engine iavf_hash_engine = {
3657         .init = iavf_hash_init,
3658         .create = iavf_hash_create,
3659         .destroy = iavf_hash_destroy,
3660         .uninit = iavf_hash_uninit,
3661         .free = iavf_hash_free,
3662         .type = IAVF_FLOW_ENGINE_HASH,
3663 };
3664
3665 /* Register parser for comms package. */
3666 static struct iavf_flow_parser iavf_hash_parser = {
3667         .engine = &iavf_hash_engine,
3668         .array = iavf_hash_pattern_list,
3669         .array_len = RTE_DIM(iavf_hash_pattern_list),
3670         .parse_pattern_action = iavf_hash_parse_pattern_action,
3671         .stage = IAVF_FLOW_STAGE_RSS,
3672 };
3673
3674 static int
3675 iavf_hash_default_set(struct iavf_adapter *ad, bool add)
3676 {
3677         struct virtchnl_rss_cfg *rss_cfg;
3678         uint16_t i;
3679         int ret;
3680
3681         rss_cfg = rte_zmalloc("iavf rss rule",
3682                               sizeof(struct virtchnl_rss_cfg), 0);
3683         if (!rss_cfg)
3684                 return -ENOMEM;
3685
3686         for (i = 0; i < RTE_DIM(iavf_hash_default_hdrs); i++) {
3687                 rss_cfg->proto_hdrs = *iavf_hash_default_hdrs[i];
3688                 rss_cfg->rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
3689
3690                 ret = iavf_add_del_rss_cfg(ad, rss_cfg, add);
3691                 if (ret) {
3692                         PMD_DRV_LOG(ERR, "fail to %s RSS configure",
3693                                     add ? "add" : "delete");
3694                         rte_free(rss_cfg);
3695                         return ret;
3696                 }
3697         }
3698
3699         return ret;
3700 }
3701
3702 RTE_INIT(iavf_hash_engine_init)
3703 {
3704         struct iavf_flow_engine *engine = &iavf_hash_engine;
3705
3706         iavf_register_flow_engine(engine);
3707 }
3708
3709 static int
3710 iavf_hash_init(struct iavf_adapter *ad)
3711 {
3712         struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad);
3713         struct iavf_flow_parser *parser;
3714         int ret;
3715
3716         if (!vf->vf_res)
3717                 return -EINVAL;
3718
3719         if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF))
3720                 return -ENOTSUP;
3721
3722         parser = &iavf_hash_parser;
3723
3724         ret = iavf_register_parser(parser, ad);
3725         if (ret) {
3726                 PMD_DRV_LOG(ERR, "fail to register hash parser");
3727                 return ret;
3728         }
3729
3730         ret = iavf_hash_default_set(ad, true);
3731         if (ret) {
3732                 PMD_DRV_LOG(ERR, "fail to set default RSS");
3733                 iavf_unregister_parser(parser, ad);
3734         }
3735
3736         return ret;
3737 }
3738
3739 static int
3740 iavf_hash_parse_pattern(struct iavf_pattern_match_item *pattern_match_item,
3741                         const struct rte_flow_item pattern[], uint64_t *phint,
3742                         struct rte_flow_error *error)
3743 {
3744         const struct rte_flow_item *item = pattern;
3745         const struct rte_flow_item_gtp_psc *psc;
3746         u8 outer_ipv6 = 0;
3747
3748         for (item = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) {
3749                 if (item->last) {
3750                         rte_flow_error_set(error, EINVAL,
3751                                            RTE_FLOW_ERROR_TYPE_ITEM, item,
3752                                            "Not support range");
3753                         return -rte_errno;
3754                 }
3755
3756                 switch (item->type) {
3757                 case RTE_FLOW_ITEM_TYPE_IPV6:
3758                         outer_ipv6 = 1;
3759                         break;
3760                 case RTE_FLOW_ITEM_TYPE_GTPU:
3761                         *phint |= (outer_ipv6) ?
3762                                 IAVF_PHINT_IPV6_GTPU_IP :
3763                                 IAVF_PHINT_IPV4_GTPU_IP;
3764                         break;
3765                 case RTE_FLOW_ITEM_TYPE_GTP_PSC:
3766                         psc = item->spec;
3767                         *phint &= (outer_ipv6) ?
3768                                 ~IAVF_PHINT_IPV6_GTPU_IP :
3769                                 ~IAVF_PHINT_IPV4_GTPU_IP;
3770                         if (!psc)
3771                                 *phint |= (outer_ipv6) ?
3772                                         IAVF_PHINT_IPV6_GTPU_EH :
3773                                         IAVF_PHINT_IPV4_GTPU_EH;
3774                         else if (psc->pdu_type == IAVF_GTPU_EH_UPLINK)
3775                                 *phint |= (outer_ipv6) ?
3776                                         IAVF_PHINT_IPV6_GTPU_EH_UPLINK :
3777                                         IAVF_PHINT_IPV4_GTPU_EH_UPLINK;
3778                         else if (psc->pdu_type == IAVF_GTPU_EH_DWNLINK)
3779                                 *phint |= (outer_ipv6) ?
3780                                         IAVF_PHINT_IPV6_GTPU_EH_DWNLINK :
3781                                         IAVF_PHINT_IPV4_GTPU_EH_DWNLINK;
3782                         break;
3783                 default:
3784                         break;
3785                 }
3786         }
3787
3788         /* update and restore pattern hint */
3789         *phint |= ((struct iavf_pattern_match_type *)
3790                                 (pattern_match_item->meta))->pattern_hint;
3791
3792         return 0;
3793 }
3794
3795 static int
3796 iavf_hash_parse_action(const struct rte_flow_action actions[],
3797                        uint64_t pattern_hint, void **meta,
3798                        struct rte_flow_error *error)
3799 {
3800         struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)*meta;
3801         struct iavf_hash_match_type *hash_map_list;
3802         enum rte_flow_action_type action_type;
3803         const struct rte_flow_action_rss *rss;
3804         const struct rte_flow_action *action;
3805         uint32_t mlist_len;
3806         bool item_found = false;
3807         uint64_t rss_type;
3808         uint16_t i;
3809
3810         /* Supported action is RSS. */
3811         for (action = actions; action->type !=
3812                 RTE_FLOW_ACTION_TYPE_END; action++) {
3813                 action_type = action->type;
3814                 switch (action_type) {
3815                 case RTE_FLOW_ACTION_TYPE_RSS:
3816                         rss = action->conf;
3817                         rss_type = rss->types;
3818
3819                         if (rss->func ==
3820                             RTE_ETH_HASH_FUNCTION_SIMPLE_XOR){
3821                                 rss_meta->rss_algorithm =
3822                                         VIRTCHNL_RSS_ALG_XOR_ASYMMETRIC;
3823                                 return rte_flow_error_set(error, ENOTSUP,
3824                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3825                                         "function simple_xor is not supported");
3826                         } else if (rss->func ==
3827                                    RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) {
3828                                 rss_meta->rss_algorithm =
3829                                         VIRTCHNL_RSS_ALG_TOEPLITZ_SYMMETRIC;
3830                         } else {
3831                                 rss_meta->rss_algorithm =
3832                                         VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
3833                         }
3834
3835                         if (rss->level)
3836                                 return rte_flow_error_set(error, ENOTSUP,
3837                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3838                                         "a nonzero RSS encapsulation level is not supported");
3839
3840                         if (rss->key_len)
3841                                 return rte_flow_error_set(error, ENOTSUP,
3842                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3843                                         "a nonzero RSS key_len is not supported");
3844
3845                         if (rss->queue_num)
3846                                 return rte_flow_error_set(error, ENOTSUP,
3847                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3848                                         "a non-NULL RSS queue is not supported");
3849
3850                         /**
3851                          * Check simultaneous use of SRC_ONLY and DST_ONLY
3852                          * of the same level.
3853                          */
3854                         rss_type = rte_eth_rss_hf_refine(rss_type);
3855
3856                         if ((pattern_hint & IAVF_PHINT_IPV4_GTPU_IP) ||
3857                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH) ||
3858                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_UPLINK) ||
3859                             (pattern_hint & IAVF_PHINT_IPV4_GTPU_EH_DWNLINK) ||
3860                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_IP) ||
3861                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH) ||
3862                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH_UPLINK) ||
3863                             (pattern_hint & IAVF_PHINT_IPV6_GTPU_EH_DWNLINK)) {
3864                                 hash_map_list = iavf_gtpu_hash_map_list;
3865                                 mlist_len = RTE_DIM(iavf_gtpu_hash_map_list);
3866                         } else {
3867                                 hash_map_list = iavf_hash_map_list;
3868                                 mlist_len = RTE_DIM(iavf_hash_map_list);
3869                         }
3870
3871                         /* Find matched proto hdrs according to hash type. */
3872                         for (i = 0; i < mlist_len; i++) {
3873                                 struct iavf_hash_match_type *ht_map =
3874                                         &hash_map_list[i];
3875                                 if (rss_type == ht_map->hash_type &&
3876                                     pattern_hint == ht_map->pattern_hint) {
3877                                         rss_meta->proto_hdrs =
3878                                                 ht_map->proto_hdrs;
3879                                         item_found = true;
3880                                         break;
3881                                 }
3882                         }
3883
3884                         if (!item_found)
3885                                 return rte_flow_error_set(error, ENOTSUP,
3886                                         RTE_FLOW_ERROR_TYPE_ACTION, action,
3887                                         "Not supported flow");
3888                         break;
3889
3890                 case RTE_FLOW_ACTION_TYPE_END:
3891                         break;
3892
3893                 default:
3894                         rte_flow_error_set(error, EINVAL,
3895                                            RTE_FLOW_ERROR_TYPE_ACTION, action,
3896                                            "Invalid action.");
3897                         return -rte_errno;
3898                 }
3899         }
3900
3901         return 0;
3902 }
3903
3904 static int
3905 iavf_hash_parse_pattern_action(__rte_unused struct iavf_adapter *ad,
3906                                struct iavf_pattern_match_item *array,
3907                                uint32_t array_len,
3908                                const struct rte_flow_item pattern[],
3909                                const struct rte_flow_action actions[],
3910                                void **meta,
3911                                struct rte_flow_error *error)
3912 {
3913         struct iavf_pattern_match_item *pattern_match_item;
3914         struct iavf_rss_meta *rss_meta_ptr;
3915         uint64_t phint = IAVF_PHINT_NONE;
3916         int ret = 0;
3917
3918         rss_meta_ptr = rte_zmalloc(NULL, sizeof(*rss_meta_ptr), 0);
3919         if (!rss_meta_ptr) {
3920                 rte_flow_error_set(error, EINVAL,
3921                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
3922                                    "No memory for rss_meta_ptr");
3923                 return -ENOMEM;
3924         }
3925
3926         /* Check rss supported pattern and find matched pattern. */
3927         pattern_match_item =
3928                 iavf_search_pattern_match_item(pattern, array, array_len,
3929                                                error);
3930         if (!pattern_match_item) {
3931                 ret = -rte_errno;
3932                 goto error;
3933         }
3934
3935         ret = iavf_hash_parse_pattern(pattern_match_item, pattern, &phint,
3936                                       error);
3937         if (ret)
3938                 goto error;
3939
3940         ret = iavf_hash_parse_action(actions, phint,
3941                                      (void **)&rss_meta_ptr, error);
3942
3943 error:
3944         if (!ret && meta)
3945                 *meta = rss_meta_ptr;
3946         else
3947                 rte_free(rss_meta_ptr);
3948
3949         rte_free(pattern_match_item);
3950
3951         return ret;
3952 }
3953
3954 static int
3955 iavf_hash_create(__rte_unused struct iavf_adapter *ad,
3956                  __rte_unused struct rte_flow *flow, void *meta,
3957                  __rte_unused struct rte_flow_error *error)
3958 {
3959         struct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)meta;
3960         struct virtchnl_rss_cfg *rss_cfg;
3961         int ret = 0;
3962
3963         rss_cfg = rte_zmalloc("iavf rss rule",
3964                               sizeof(struct virtchnl_rss_cfg), 0);
3965         if (!rss_cfg) {
3966                 rte_flow_error_set(error, EINVAL,
3967                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
3968                                    "No memory for rss rule");
3969                 return -ENOMEM;
3970         }
3971
3972         rss_cfg->proto_hdrs = *rss_meta->proto_hdrs;
3973         rss_cfg->rss_algorithm = rss_meta->rss_algorithm;
3974
3975         ret = iavf_add_del_rss_cfg(ad, rss_cfg, true);
3976         if (!ret) {
3977                 flow->rule = rss_cfg;
3978         } else {
3979                 PMD_DRV_LOG(ERR, "fail to add RSS configure");
3980                 rte_flow_error_set(error, -ret,
3981                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
3982                                    "Failed to add rss rule.");
3983                 rte_free(rss_cfg);
3984                 return -rte_errno;
3985         }
3986
3987         rte_free(meta);
3988
3989         return ret;
3990 }
3991
3992 static int
3993 iavf_hash_destroy(__rte_unused struct iavf_adapter *ad,
3994                   struct rte_flow *flow,
3995                   __rte_unused struct rte_flow_error *error)
3996 {
3997         struct virtchnl_rss_cfg *rss_cfg;
3998         int ret = 0;
3999
4000         rss_cfg = (struct virtchnl_rss_cfg *)flow->rule;
4001
4002         ret = iavf_add_del_rss_cfg(ad, rss_cfg, false);
4003         if (ret) {
4004                 PMD_DRV_LOG(ERR, "fail to del RSS configure");
4005                 rte_flow_error_set(error, -ret,
4006                                    RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
4007                                    "Failed to delete rss rule.");
4008                 return -rte_errno;
4009         }
4010         return ret;
4011 }
4012
4013 static void
4014 iavf_hash_uninit(struct iavf_adapter *ad)
4015 {
4016         if (iavf_hash_default_set(ad, false))
4017                 PMD_DRV_LOG(ERR, "fail to delete default RSS");
4018
4019         iavf_unregister_parser(&iavf_hash_parser, ad);
4020 }
4021
4022 static void
4023 iavf_hash_free(struct rte_flow *flow)
4024 {
4025         rte_free(flow->rule);
4026 }