DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/2] add AVF RSS support for IPv6 prefix
@ 2020-08-03 10:28 Junfeng Guo
  2020-08-03 10:28 ` [dpdk-dev] [PATCH 1/2] common/iavf: support virtual channel " Junfeng Guo
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-03 10:28 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix fields are supported in this patchset, so that we
can use prefixes instead of full IPv6 address for AVF RSS. The prefix
here includes the first 64 bits of both SRC and DST IPv6 address.

[PATCH 1/2] common/iavf: support virtual channel for IPv6 prefix.
[PATCH 2/2] net/iavf: support RSS for IPv6 prefix 64bit.

Junfeng Guo (2):
  common/iavf: support virtual channel for IPv6 prefix
  net/iavf: support RSS for IPv6 prefix 64bit

 drivers/common/iavf/virtchnl.h |  13 ++
 drivers/net/iavf/iavf_hash.c   | 232 +++++++++++++++++++++++++++++++++
 2 files changed, 245 insertions(+)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH 1/2] common/iavf: support virtual channel for IPv6 prefix
  2020-08-03 10:28 [dpdk-dev] [PATCH 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
@ 2020-08-03 10:28 ` Junfeng Guo
  2020-08-03 10:28 ` [dpdk-dev] [PATCH 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
  2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
  2 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-03 10:28 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

Some IPv6 prefix related protocol header fields are defined in this
patch, so that we can use prefix instead of full IPv6 address for RSS.
Ref https://tools.ietf.org/html/rfc6052.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/common/iavf/virtchnl.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
index 79515ee8b..424e18a11 100644
--- a/drivers/common/iavf/virtchnl.h
+++ b/drivers/common/iavf/virtchnl.h
@@ -881,6 +881,19 @@ enum virtchnl_proto_hdr_field {
 	VIRTCHNL_PROTO_HDR_IPV6_TC,
 	VIRTCHNL_PROTO_HDR_IPV6_HOP_LIMIT,
 	VIRTCHNL_PROTO_HDR_IPV6_PROT,
+	/* IPV6 Prefix */
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_DST,
 	/* TCP */
 	VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
 		PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH 2/2] net/iavf: support RSS for IPv6 prefix 64bit
  2020-08-03 10:28 [dpdk-dev] [PATCH 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-08-03 10:28 ` [dpdk-dev] [PATCH 1/2] common/iavf: support virtual channel " Junfeng Guo
@ 2020-08-03 10:28 ` Junfeng Guo
  2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
  2 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-03 10:28 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix 64bit fields are supported in this patch, so that
we can use prefix instead of full IPv6 address for RSS. The prefix
here only includes the first 64 bits of both SRC and DST IPv6 address.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 232 +++++++++++++++++++++++++++++++++++
 1 file changed, 232 insertions(+)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index e2eebd2d3..3dc96d0f6 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -445,6 +445,41 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = {
 	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST) | \
 	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
 
+/* IPV6 Prefix 64 for L3 */
+#define proto_hint_ipv6_pre64 { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_src { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_dst { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST), {BUFF_NOUSED } }
+
+/* IPV6 Prefix 64 for L4 */
+#define proto_hint_ipv6_pre64_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_src_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_dst_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_only_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
 #define proto_hint_gtpu_ip_teid { \
 	VIRTCHNL_PROTO_HDR_GTPU_IP, \
 	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPU_IP_TEID), {BUFF_NOUSED } }
@@ -1999,6 +2034,139 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_esp = {
 	proto_hint_udp_only, proto_hint_esp }
 };
 
+/* IPV6 Prefix 64 */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64 = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64 }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_src }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_dst }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_prot = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_prot }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_prot = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_src_prot }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_prot = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_dst_prot }
+};
+
+/* IPV6 Prefix 64 UDP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_prot,
+	proto_hint_udp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_udp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_udp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_udp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_udp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_udp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_udp_dst_port }
+};
+
+/* IPV6 Prefix 64 TCP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_prot,
+	proto_hint_tcp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_tcp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_tcp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_tcp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_tcp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_tcp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_tcp_dst_port }
+};
+
+/* IPV6 Prefix 64 SCTP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_prot,
+	proto_hint_sctp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_sctp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_sctp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_sctp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_sctp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_sctp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_sctp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_sctp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_sctp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_sctp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_sctp_dst_port }
+};
+
 struct iavf_hash_match_type iavf_hash_map_list[] = {
 	/* IPV4 */
 	{ETH_RSS_L2_SRC_ONLY,
@@ -2151,6 +2319,13 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_ipv6_ah, IAVF_PHINT_IPV6},
 	{ETH_RSS_L2TPV3,
 		&hdrs_hint_ipv6_l2tpv3, IAVF_PHINT_IPV6},
+	/* IPV6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64, IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src, IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst, IAVF_PHINT_IPV6},
 	/* IPV6 UDP */
 	{ETH_RSS_L2_SRC_ONLY,
 		&hdrs_hint_eth_src_ipv6_udp, IAVF_PHINT_IPV6_UDP},
@@ -2186,6 +2361,25 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_ipv6_udp_esp, IAVF_PHINT_IPV6_UDP},
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp, IAVF_PHINT_IPV6_UDP},
+	/* IPV6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_prot, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_prot, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_port, IAVF_PHINT_IPV6_UDP},
 	/* IPV6 TCP */
 	{ETH_RSS_L2_SRC_ONLY,
 		&hdrs_hint_eth_src_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
@@ -2217,6 +2411,25 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
+	/* IPV6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_prot, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_prot, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
 	/* IPV6 SCTP */
 	{ETH_RSS_L2_SRC_ONLY,
 		&hdrs_hint_eth_src_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
@@ -2264,6 +2477,25 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_cvlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
 	{ETH_RSS_C_VLAN,
 		&hdrs_hint_cvlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
+	/* IPV6 Prefix 64 SCTP */
+	{ETH_RSS_IPV6_PRE64_SCTP,
+		&hdrs_hint_ipv6_pre64_sctp, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_prot, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_prot, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
 };
 
 struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix
  2020-08-03 10:28 [dpdk-dev] [PATCH 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-08-03 10:28 ` [dpdk-dev] [PATCH 1/2] common/iavf: support virtual channel " Junfeng Guo
  2020-08-03 10:28 ` [dpdk-dev] [PATCH 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
@ 2020-08-04 12:39 ` Junfeng Guo
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 1/3] common/iavf: support virtual channel " Junfeng Guo
                     ` (3 more replies)
  2 siblings, 4 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-04 12:39 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix fields are supported in this patchset, so that we
can use prefixes instead of full IPv6 address for AVF RSS. The prefix
here includes the first 64 bits of both SRC and DST IPv6 address.

v2:
* add support RSS for GTPU IPv6 prefix 64bit.

[PATCH v2 1/3] common/iavf: support virtual channel for IPv6 prefix.
[PATCH v2 2/3] net/iavf: support RSS for IPv6 prefix 64bit.
[PATCH v2 3/3] net/iavf: support RSS for GTPU IPv6 prefix 64bit.

Junfeng Guo (3):
  common/iavf: support virtual channel for IPv6 prefix
  net/iavf: support RSS for IPv6 prefix 64bit
  net/iavf: support RSS for GTPU IPv6 prefix 64bit

 drivers/common/iavf/virtchnl.h |   13 +
 drivers/net/iavf/iavf_hash.c   | 1831 +++++++++++++++++++++++++++-----
 2 files changed, 1597 insertions(+), 247 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v2 1/3] common/iavf: support virtual channel for IPv6 prefix
  2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
@ 2020-08-04 12:39   ` Junfeng Guo
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 2/3] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-04 12:39 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

Some IPv6 prefix related protocol header fields are defined in this
patch, so that we can use prefix instead of full IPv6 address for RSS.
Ref https://tools.ietf.org/html/rfc6052.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/common/iavf/virtchnl.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
index 79515ee8b..424e18a11 100644
--- a/drivers/common/iavf/virtchnl.h
+++ b/drivers/common/iavf/virtchnl.h
@@ -881,6 +881,19 @@ enum virtchnl_proto_hdr_field {
 	VIRTCHNL_PROTO_HDR_IPV6_TC,
 	VIRTCHNL_PROTO_HDR_IPV6_HOP_LIMIT,
 	VIRTCHNL_PROTO_HDR_IPV6_PROT,
+	/* IPV6 Prefix */
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_SRC,
+	VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_DST,
 	/* TCP */
 	VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
 		PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v2 2/3] net/iavf: support RSS for IPv6 prefix 64bit
  2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 1/3] common/iavf: support virtual channel " Junfeng Guo
@ 2020-08-04 12:39   ` Junfeng Guo
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 3/3] net/iavf: support RSS for GTPU " Junfeng Guo
  2020-09-15  6:26   ` [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  3 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-04 12:39 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix 64bit fields are supported in this patch, so that
we can use prefix instead of full IPv6 address for RSS. The prefix
here only includes the first 64 bits of both SRC and DST IPv6 address.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 232 +++++++++++++++++++++++++++++++++++
 1 file changed, 232 insertions(+)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index e2eebd2d3..3dc96d0f6 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -445,6 +445,41 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = {
 	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST) | \
 	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
 
+/* IPV6 Prefix 64 for L3 */
+#define proto_hint_ipv6_pre64 { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_src { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_dst { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST), {BUFF_NOUSED } }
+
+/* IPV6 Prefix 64 for L4 */
+#define proto_hint_ipv6_pre64_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_src_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_dst_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) | \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
+#define proto_hint_ipv6_pre64_only_prot { \
+	VIRTCHNL_PROTO_HDR_IPV6, \
+	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT), {BUFF_NOUSED } }
+
 #define proto_hint_gtpu_ip_teid { \
 	VIRTCHNL_PROTO_HDR_GTPU_IP, \
 	FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPU_IP_TEID), {BUFF_NOUSED } }
@@ -1999,6 +2034,139 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv6_udp_esp = {
 	proto_hint_udp_only, proto_hint_esp }
 };
 
+/* IPV6 Prefix 64 */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64 = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64 }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_src }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_dst }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_prot = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_prot }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_prot = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_src_prot }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_prot = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_ipv6_pre64_dst_prot }
+};
+
+/* IPV6 Prefix 64 UDP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_prot,
+	proto_hint_udp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_udp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_udp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_udp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_udp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_udp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_udp_dst_port }
+};
+
+/* IPV6 Prefix 64 TCP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_prot,
+	proto_hint_tcp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_tcp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_tcp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_tcp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_tcp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_tcp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_tcp_dst_port }
+};
+
+/* IPV6 Prefix 64 SCTP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_prot,
+	proto_hint_sctp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_sctp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_sctp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_sctp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_src_prot,
+	proto_hint_sctp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_sctp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_sctp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_sctp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_dst_prot,
+	proto_hint_sctp_dst_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp_src_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_sctp_src_port }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp_dst_port = {
+	TUNNEL_LEVEL_OUTER, PROTO_COUNT_TWO, {proto_hint_ipv6_pre64_only_prot,
+	proto_hint_sctp_dst_port }
+};
+
 struct iavf_hash_match_type iavf_hash_map_list[] = {
 	/* IPV4 */
 	{ETH_RSS_L2_SRC_ONLY,
@@ -2151,6 +2319,13 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_ipv6_ah, IAVF_PHINT_IPV6},
 	{ETH_RSS_L2TPV3,
 		&hdrs_hint_ipv6_l2tpv3, IAVF_PHINT_IPV6},
+	/* IPV6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64, IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src, IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst, IAVF_PHINT_IPV6},
 	/* IPV6 UDP */
 	{ETH_RSS_L2_SRC_ONLY,
 		&hdrs_hint_eth_src_ipv6_udp, IAVF_PHINT_IPV6_UDP},
@@ -2186,6 +2361,25 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_ipv6_udp_esp, IAVF_PHINT_IPV6_UDP},
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp, IAVF_PHINT_IPV6_UDP},
+	/* IPV6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_prot, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_prot, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_port, IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_port, IAVF_PHINT_IPV6_UDP},
 	/* IPV6 TCP */
 	{ETH_RSS_L2_SRC_ONLY,
 		&hdrs_hint_eth_src_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
@@ -2217,6 +2411,25 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_ipv6_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
+	/* IPV6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_prot, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_prot, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_port, IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_port, IAVF_PHINT_IPV6_TCP},
 	/* IPV6 SCTP */
 	{ETH_RSS_L2_SRC_ONLY,
 		&hdrs_hint_eth_src_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
@@ -2264,6 +2477,25 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 		&hdrs_hint_cvlan_ipv6_tcp, IAVF_PHINT_IPV6_TCP},
 	{ETH_RSS_C_VLAN,
 		&hdrs_hint_cvlan_ipv6_sctp, IAVF_PHINT_IPV6_SCTP},
+	/* IPV6 Prefix 64 SCTP */
+	{ETH_RSS_IPV6_PRE64_SCTP,
+		&hdrs_hint_ipv6_pre64_sctp, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_prot, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_prot, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_sctp_src_port, IAVF_PHINT_IPV6_SCTP},
+	{ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_sctp_dst_port, IAVF_PHINT_IPV6_SCTP},
 };
 
 struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v2 3/3] net/iavf: support RSS for GTPU IPv6 prefix 64bit
  2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 1/3] common/iavf: support virtual channel " Junfeng Guo
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 2/3] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
@ 2020-08-04 12:39   ` Junfeng Guo
  2020-09-15  6:26   ` [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  3 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-08-04 12:39 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for GTP-U IPv6 prefix 64bit fields are supported in this patch.
The prefix here includes the first 64 bits of both SRC and DST inner
IPv6 address for GTP-U.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 1119 +++++++++++++++++++++++++++++++++-
 1 file changed, 1112 insertions(+), 7 deletions(-)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index 3dc96d0f6..7df45630c 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -2167,6 +2167,439 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_sctp_dst_port = {
 	proto_hint_sctp_dst_port }
 };
 
+/* GTPU + inner IPV6 Prefix 64 */
+/* GTPU IP + inner IPV6 Prefix 64 */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_dst }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64 }
+};
+
+/* GTPU IP + inner IPV6 Prefix 64 UDP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_udp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_dst_port}
+};
+
+/* GTPU IP + inner IPV6 Prefix 64 TCP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_tcp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_src_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_dst_gtpu_ip = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_ip_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_dst_port}
+};
+
+/* GTPU EH + inner IPV6 Prefix 64 */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_dst }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64 }
+};
+
+/* GTPU EH + inner IPV6 Prefix 64 UDP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_udp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_dst_port}
+};
+
+/* GTPU EH + inner IPV6 Prefix 64 TCP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_tcp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_src_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_dst_gtpu_eh = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_eh_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_dst_port}
+};
+
+/* GTPU UP + inner IPV6 Prefix 64 */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_dst }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64 }
+};
+
+/* GTPU UP + inner IPV6 Prefix 64 UDP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_udp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_dst_port}
+};
+
+/* GTPU UP + inner IPV6 Prefix 64 TCP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_tcp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_src_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_dst_gtpu_up = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_up_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_dst_port}
+};
+
+/* GTPU DWN + inner IPV6 Prefix 64 */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_dst }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64 }
+};
+
+/* GTPU DWN + inner IPV6 Prefix 64 UDP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_udp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_udp_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_udp_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_udp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_udp_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_udp_dst_port}
+};
+
+/* GTPU DWN + inner IPV6 Prefix 64 TCP */
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_prot, proto_hint_tcp }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_dst_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_src_tcp_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_src_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_dst_tcp_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_dst_prot, proto_hint_tcp_only }
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_src_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_src_port}
+};
+
+struct virtchnl_proto_hdrs hdrs_hint_ipv6_pre64_tcp_dst_gtpu_dwn = {
+	TUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_THREE, {proto_hint_gtpu_dwn_only,
+	proto_hint_ipv6_pre64_only_prot, proto_hint_tcp_dst_port}
+};
+
 struct iavf_hash_match_type iavf_hash_map_list[] = {
 	/* IPV4 */
 	{ETH_RSS_L2_SRC_ONLY,
@@ -2501,7 +2934,7 @@ struct iavf_hash_match_type iavf_hash_map_list[] = {
 struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	/* GTPU */
 	/* GTPU IP */
-	/* IPv4 GTPU IP IPv4*/
+	/* IPv4 GTPU IP IPv4 */
 	{ETH_RSS_IPV4 |
 		ETH_RSS_L3_SRC_ONLY,
 		&hdrs_hint_ipv4_src_gtpu_ip,
@@ -2516,7 +2949,7 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_GTPU,
 		&hdrs_hint_teid_gtpu_ip,
 		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV4},
-	/* IPv4 GTPU IP IPv6*/
+	/* IPv4 GTPU IP IPv6 */
 	{ETH_RSS_IPV6 |
 		ETH_RSS_L3_SRC_ONLY,
 		&hdrs_hint_ipv6_src_gtpu_ip,
@@ -2531,7 +2964,19 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_GTPU,
 		&hdrs_hint_teid_gtpu_ip,
 		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
-	/* IPv6 GTPU IP IPv4*/
+	/* IPv4 GTPU IP IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6},
+	/* IPv6 GTPU IP IPv4 */
 	{ETH_RSS_IPV4 |
 		ETH_RSS_L3_SRC_ONLY,
 		&hdrs_hint_ipv4_src_gtpu_ip,
@@ -2546,7 +2991,7 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_GTPU,
 		&hdrs_hint_teid_gtpu_ip,
 		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV4},
-	/* IPv6 GTPU IP IPv6*/
+	/* IPv6 GTPU IP IPv6 */
 	{ETH_RSS_IPV6 |
 		ETH_RSS_L3_SRC_ONLY,
 		&hdrs_hint_ipv6_src_gtpu_ip,
@@ -2561,6 +3006,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_GTPU,
 		&hdrs_hint_teid_gtpu_ip,
 		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
+	/* IPv6 GTPU IP IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6},
 	/* IPv4 GTPU IP IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -2633,6 +3090,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_ip,
 		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	/* IPv4 GTPU IP IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_UDP},
 	/* IPv6 GTPU IP IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -2705,6 +3198,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_ip,
 		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	/* IPv6 GTPU IP IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_UDP},
 	/* IPv4 GTPU IP IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -2777,6 +3306,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_ip,
 		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	/* IPv4 GTPU IP IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_ip,
+		IAVF_PHINT_IPV4_GTPU_IP | IAVF_PHINT_IPV6_TCP},
 	/* IPv6 GTPU IP IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -2844,10 +3409,46 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
 	{ETH_RSS_NONFRAG_IPV6_TCP |
 		ETH_RSS_L4_DST_ONLY,
-		&hdrs_hint_ipv6_tcp_dst_gtpu_ip,
+		&hdrs_hint_ipv6_tcp_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_NONFRAG_IPV6_TCP,
+		&hdrs_hint_ipv6_tcp_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	/* IPv6 GTPU IP IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_ip,
+		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_ip,
 		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
-	{ETH_RSS_NONFRAG_IPV6_TCP,
-		&hdrs_hint_ipv6_tcp_gtpu_ip,
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_ip,
 		IAVF_PHINT_IPV6_GTPU_IP | IAVF_PHINT_IPV6_TCP},
 	/* GTPU EH */
 	/* IPv4 GTPU EH IPv4 */
@@ -2874,6 +3475,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_IPV6,
 		&hdrs_hint_ipv6_gtpu_eh,
 		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
+	/* IPv4 GTPU EH IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6},
 	/* IPv6 GTPU EH IPv4 */
 	{ETH_RSS_IPV4 |
 		ETH_RSS_L3_SRC_ONLY,
@@ -2898,6 +3511,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_IPV6,
 		&hdrs_hint_ipv6_gtpu_eh,
 		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
+	/* IPv6 GTPU EH IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6},
 	/* IPv4 GTPU EH IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -2970,6 +3595,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_eh,
 		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	/* IPv4 GTPU EH IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_UDP},
 	/* IPv6 GTPU EH IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3042,6 +3703,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_eh,
 		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	/* IPv6 GTPU EH IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_UDP},
 	/* IPv4 GTPU EH IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3114,6 +3811,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_eh,
 		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	/* IPv4 GTPU EH IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_eh,
+		IAVF_PHINT_IPV4_GTPU_EH | IAVF_PHINT_IPV6_TCP},
 	/* IPv6 GTPU EH IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3186,6 +3919,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_eh,
 		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	/* IPv6 GTPU EH IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_eh,
+		IAVF_PHINT_IPV6_GTPU_EH | IAVF_PHINT_IPV6_TCP},
 	/* GTPU EH UP */
 	/* IPv4 GTPU EH UP IPv4 */
 	{ETH_RSS_IPV4 |
@@ -3211,6 +3980,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_IPV6,
 		&hdrs_hint_ipv6_gtpu_up,
 		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
+	/* IPv4 GTPU UP IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
 	/* IPv6 GTPU EH UP IPv4 */
 	{ETH_RSS_IPV4 |
 		ETH_RSS_L3_SRC_ONLY,
@@ -3235,6 +4016,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_IPV6,
 		&hdrs_hint_ipv6_gtpu_up,
 		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
+	/* IPv6 GTPU UP IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6},
 	/* IPv4 GTPU EH UP IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3307,6 +4100,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_up,
 		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	/* IPv4 GTPU UP IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
 	/* IPv6 GTPU EH UP IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3379,6 +4208,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_up,
 		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	/* IPv6 GTPU UP IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_UDP},
 	/* IPv4 GTPU EH UP IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3451,6 +4316,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_up,
 		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	/* IPv4 GTPU UP IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_up,
+		IAVF_PHINT_IPV4_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
 	/* IPv6 GTPU EH UP IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3523,6 +4424,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_up,
 		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	/* IPv6 GTPU UP IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_up,
+		IAVF_PHINT_IPV6_GTPU_EH_UPLINK | IAVF_PHINT_IPV6_TCP},
 	/* GTPU EH DWN */
 	/* IPv4 GTPU EH DWN IPv4 */
 	{ETH_RSS_IPV4 |
@@ -3548,6 +4485,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_IPV6,
 		&hdrs_hint_ipv6_gtpu_dwn,
 		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
+	/* IPv4 GTPU EH DWN IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
 	/* IPv6 GTPU EH DWN IPv4 */
 	{ETH_RSS_IPV4 |
 		ETH_RSS_L3_SRC_ONLY,
@@ -3572,6 +4521,18 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_IPV6,
 		&hdrs_hint_ipv6_gtpu_dwn,
 		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
+	/* IPv6 GTPU EH DWN IPv6 Prefix 64 */
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64 |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
+	{ETH_RSS_IPV6_PRE64,
+		&hdrs_hint_ipv6_pre64_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6},
 	/* IPv4 GTPU EH DWN IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3644,6 +4605,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_dwn,
 		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	/* IPv4 GTPU EH DWN IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
 	/* IPv6 GTPU EH DWN IPv4 UDP */
 	{ETH_RSS_NONFRAG_IPV4_UDP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3716,6 +4713,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_UDP,
 		&hdrs_hint_ipv6_udp_gtpu_dwn,
 		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	/* IPv6 GTPU EH DWN IPv6 Prefix 64 UDP */
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_udp_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_udp_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_udp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
+	{ETH_RSS_IPV6_PRE64_UDP,
+		&hdrs_hint_ipv6_pre64_udp_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_UDP},
 	/* IPv4 GTPU EH DWN IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3788,6 +4821,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_dwn,
 		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	/* IPv4 GTPU EH DWN IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_dwn,
+		IAVF_PHINT_IPV4_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
 	/* IPv6 GTPU EH DWN IPv4 TCP */
 	{ETH_RSS_NONFRAG_IPV4_TCP |
 		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
@@ -3860,6 +4929,42 @@ struct iavf_hash_match_type iavf_gtpu_hash_map_list[] = {
 	{ETH_RSS_NONFRAG_IPV6_TCP,
 		&hdrs_hint_ipv6_tcp_gtpu_dwn,
 		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	/* IPv6 GTPU EH DWN IPv6 Prefix 64 TCP */
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_src_tcp_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_src_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L3_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_dst_tcp_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP |
+		ETH_RSS_L4_DST_ONLY,
+		&hdrs_hint_ipv6_pre64_tcp_dst_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
+	{ETH_RSS_IPV6_PRE64_TCP,
+		&hdrs_hint_ipv6_pre64_tcp_gtpu_dwn,
+		IAVF_PHINT_IPV6_GTPU_EH_DWNLINK | IAVF_PHINT_IPV6_TCP},
 };
 
 struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = {
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix
  2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
                     ` (2 preceding siblings ...)
  2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 3/3] net/iavf: support RSS for GTPU " Junfeng Guo
@ 2020-09-15  6:26   ` Junfeng Guo
  2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 1/2] net/iavf: replace function name with macro Junfeng Guo
                       ` (2 more replies)
  3 siblings, 3 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-09-15  6:26 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix fields are supported in this patchset, so that we
can use prefixes instead of full IPv6 address for AVF RSS. The prefix
here includes the first 64 bits of both SRC and DST IPv6 address.

v3:
* code rebase

v2:
* add support RSS for GTPU IPv6 prefix 64bit.

[PATCH v2 1/2] net/iavf: replace function name with macro.
[PATCH v2 2/2] net/iavf: support RSS for IPv6 prefix 64bit.

Junfeng Guo (2):
  net/iavf: replace function name with macro
  net/iavf: support RSS for IPv6 prefix 64bit

 drivers/net/iavf/iavf_hash.c | 63 +++++++++++++++++++++---------------
 1 file changed, 37 insertions(+), 26 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v3 1/2] net/iavf: replace function name with macro
  2020-09-15  6:26   ` [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
@ 2020-09-15  6:26     ` Junfeng Guo
  2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
  2020-09-15  8:17     ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-09-15  6:26 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

Replace some function name with macro to shrink coding charactors.
	VIRTCHNL_DEL_PROTO_HDR_FIELD, VIRTCHNL_ADD_PROTO_HDR_FIELD
	--> REFINE_PROTO_FLD.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 42 ++++++++++++++----------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index 3152218dc..d8a4dc8bf 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -539,6 +539,9 @@ iavf_hash_parse_pattern(struct iavf_pattern_match_item *pattern_match_item,
 	return 0;
 }
 
+#define REFINE_PROTO_FLD(op, fld) \
+	VIRTCHNL_##op##_PROTO_HDR_FIELD(hdr, VIRTCHNL_PROTO_HDR_##fld)
+
 /* refine proto hdrs base on l2, l3, l4 rss type */
 static void
 iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
@@ -554,11 +557,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			if (!(rss_type & ETH_RSS_ETH))
 				hdr->field_selector = 0;
 			else if (rss_type & ETH_RSS_L2_SRC_ONLY)
-				VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					VIRTCHNL_PROTO_HDR_ETH_DST);
+				REFINE_PROTO_FLD(DEL, ETH_DST);
 			else if (rss_type & ETH_RSS_L2_DST_ONLY)
-				VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					VIRTCHNL_PROTO_HDR_ETH_SRC);
+				REFINE_PROTO_FLD(DEL, ETH_SRC);
 			break;
 		case VIRTCHNL_PROTO_HDR_IPV4:
 			if (rss_type &
@@ -567,11 +568,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			     ETH_RSS_NONFRAG_IPV4_TCP |
 			     ETH_RSS_NONFRAG_IPV4_SCTP)) {
 				if (rss_type & ETH_RSS_L3_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV4_DST);
+					REFINE_PROTO_FLD(DEL, IPV4_DST);
 				else if (rss_type & ETH_RSS_L3_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV4_SRC);
+					REFINE_PROTO_FLD(DEL, IPV4_SRC);
 				else if (rss_type &
 					 (ETH_RSS_L4_SRC_ONLY |
 					  ETH_RSS_L4_DST_ONLY))
@@ -587,11 +586,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			     ETH_RSS_NONFRAG_IPV6_TCP |
 			     ETH_RSS_NONFRAG_IPV6_SCTP)) {
 				if (rss_type & ETH_RSS_L3_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV6_DST);
+					REFINE_PROTO_FLD(DEL, IPV6_DST);
 				else if (rss_type & ETH_RSS_L3_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV6_SRC);
+					REFINE_PROTO_FLD(DEL, IPV6_SRC);
 				else if (rss_type &
 					 (ETH_RSS_L4_SRC_ONLY |
 					  ETH_RSS_L4_DST_ONLY))
@@ -605,11 +602,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			    (ETH_RSS_NONFRAG_IPV4_UDP |
 			     ETH_RSS_NONFRAG_IPV6_UDP)) {
 				if (rss_type & ETH_RSS_L4_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_UDP_DST_PORT);
+					REFINE_PROTO_FLD(DEL, UDP_DST_PORT);
 				else if (rss_type & ETH_RSS_L4_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_UDP_SRC_PORT);
+					REFINE_PROTO_FLD(DEL, UDP_SRC_PORT);
 				else if (rss_type &
 					 (ETH_RSS_L3_SRC_ONLY |
 					  ETH_RSS_L3_DST_ONLY))
@@ -623,11 +618,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			    (ETH_RSS_NONFRAG_IPV4_TCP |
 			     ETH_RSS_NONFRAG_IPV6_TCP)) {
 				if (rss_type & ETH_RSS_L4_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_TCP_DST_PORT);
+					REFINE_PROTO_FLD(DEL, TCP_DST_PORT);
 				else if (rss_type & ETH_RSS_L4_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_TCP_SRC_PORT);
+					REFINE_PROTO_FLD(DEL, TCP_SRC_PORT);
 				else if (rss_type &
 					 (ETH_RSS_L3_SRC_ONLY |
 					  ETH_RSS_L3_DST_ONLY))
@@ -641,11 +634,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			    (ETH_RSS_NONFRAG_IPV4_SCTP |
 			     ETH_RSS_NONFRAG_IPV6_SCTP)) {
 				if (rss_type & ETH_RSS_L4_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_SCTP_DST_PORT);
+					REFINE_PROTO_FLD(DEL, SCTP_DST_PORT);
 				else if (rss_type & ETH_RSS_L4_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_TCP_SRC_PORT);
+					REFINE_PROTO_FLD(DEL, SCTP_SRC_PORT);
 				else if (rss_type &
 					 (ETH_RSS_L3_SRC_ONLY |
 					  ETH_RSS_L3_DST_ONLY))
@@ -699,8 +690,7 @@ iavf_refine_proto_hdrs_gtpu(struct virtchnl_proto_hdrs *proto_hdrs,
 		hdr = &proto_hdrs->proto_hdr[i];
 		switch (hdr->type) {
 		case VIRTCHNL_PROTO_HDR_GTPU_IP:
-			VIRTCHNL_ADD_PROTO_HDR_FIELD(hdr,
-				VIRTCHNL_PROTO_HDR_GTPU_IP_TEID);
+			REFINE_PROTO_FLD(ADD, GTPU_IP_TEID);
 			break;
 		default:
 			break;
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v3 2/2] net/iavf: support RSS for IPv6 prefix 64bit
  2020-09-15  6:26   ` [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 1/2] net/iavf: replace function name with macro Junfeng Guo
@ 2020-09-15  6:26     ` Junfeng Guo
  2020-09-15  8:17     ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-09-15  6:26 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix 64bit fields are supported in this patch, so that
we can use prefix instead of full IPv6 address for RSS. The prefix
here only includes the first 64 bits of both SRC and DST IPv6 address.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index d8a4dc8bf..c270daf5f 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -580,7 +580,28 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			}
 			break;
 		case VIRTCHNL_PROTO_HDR_IPV6:
+			if (rss_type & RTE_ETH_RSS_L3_PRE64) {
+				REFINE_PROTO_FLD(DEL, IPV6_SRC);
+				REFINE_PROTO_FLD(DEL, IPV6_DST);
+				REFINE_PROTO_FLD(ADD, IPV6_PREFIX64_SRC);
+				REFINE_PROTO_FLD(ADD, IPV6_PREFIX64_DST);
+			}
 			if (rss_type &
+			    (ETH_RSS_IPV6_PRE64 |
+			     ETH_RSS_IPV6_PRE64_UDP |
+			     ETH_RSS_IPV6_PRE64_TCP |
+			     ETH_RSS_IPV6_PRE64_SCTP)) {
+				if (rss_type & ETH_RSS_L3_SRC_ONLY)
+					REFINE_PROTO_FLD(DEL,
+							 IPV6_PREFIX64_DST);
+				else if (rss_type & ETH_RSS_L3_DST_ONLY)
+					REFINE_PROTO_FLD(DEL,
+							 IPV6_PREFIX64_SRC);
+				else if (rss_type &
+					 (ETH_RSS_L4_SRC_ONLY |
+					  ETH_RSS_L4_DST_ONLY))
+					hdr->field_selector = 0;
+			} else if (rss_type &
 			    (ETH_RSS_IPV6 |
 			     ETH_RSS_NONFRAG_IPV6_UDP |
 			     ETH_RSS_NONFRAG_IPV6_TCP |
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix
  2020-09-15  6:26   ` [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 1/2] net/iavf: replace function name with macro Junfeng Guo
  2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
@ 2020-09-15  8:17     ` Junfeng Guo
  2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 1/2] net/iavf: replace function name with macro Junfeng Guo
                         ` (2 more replies)
  2 siblings, 3 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-09-15  8:17 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix fields are supported in this patchset, so that we
can use prefixes instead of full IPv6 address for AVF RSS. The prefix
here includes the first 64 bits of both SRC and DST IPv6 address.

v4:
* correct proto hdrs refine logic.

v3:
* code rebase.

v2:
* add support RSS for GTPU IPv6 prefix 64bit.

[PATCH v4 1/2] net/iavf: replace function name with macro.
[PATCH v4 2/2] net/iavf: support RSS for IPv6 prefix 64bit.

Junfeng Guo (2):
  net/iavf: replace function name with macro
  net/iavf: support RSS for IPv6 prefix 64bit

 drivers/net/iavf/iavf_hash.c | 65 +++++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 26 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v4 1/2] net/iavf: replace function name with macro
  2020-09-15  8:17     ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
@ 2020-09-15  8:17       ` Junfeng Guo
  2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
  2020-09-15  8:40       ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Zhang, Qi Z
  2 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-09-15  8:17 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

Replace some function name with macro to shrink coding characters.
	VIRTCHNL_DEL_PROTO_HDR_FIELD, VIRTCHNL_ADD_PROTO_HDR_FIELD
	--> REFINE_PROTO_FLD.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 42 ++++++++++++++----------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index 3152218dc..d8a4dc8bf 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -539,6 +539,9 @@ iavf_hash_parse_pattern(struct iavf_pattern_match_item *pattern_match_item,
 	return 0;
 }
 
+#define REFINE_PROTO_FLD(op, fld) \
+	VIRTCHNL_##op##_PROTO_HDR_FIELD(hdr, VIRTCHNL_PROTO_HDR_##fld)
+
 /* refine proto hdrs base on l2, l3, l4 rss type */
 static void
 iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
@@ -554,11 +557,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			if (!(rss_type & ETH_RSS_ETH))
 				hdr->field_selector = 0;
 			else if (rss_type & ETH_RSS_L2_SRC_ONLY)
-				VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					VIRTCHNL_PROTO_HDR_ETH_DST);
+				REFINE_PROTO_FLD(DEL, ETH_DST);
 			else if (rss_type & ETH_RSS_L2_DST_ONLY)
-				VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					VIRTCHNL_PROTO_HDR_ETH_SRC);
+				REFINE_PROTO_FLD(DEL, ETH_SRC);
 			break;
 		case VIRTCHNL_PROTO_HDR_IPV4:
 			if (rss_type &
@@ -567,11 +568,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			     ETH_RSS_NONFRAG_IPV4_TCP |
 			     ETH_RSS_NONFRAG_IPV4_SCTP)) {
 				if (rss_type & ETH_RSS_L3_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV4_DST);
+					REFINE_PROTO_FLD(DEL, IPV4_DST);
 				else if (rss_type & ETH_RSS_L3_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV4_SRC);
+					REFINE_PROTO_FLD(DEL, IPV4_SRC);
 				else if (rss_type &
 					 (ETH_RSS_L4_SRC_ONLY |
 					  ETH_RSS_L4_DST_ONLY))
@@ -587,11 +586,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			     ETH_RSS_NONFRAG_IPV6_TCP |
 			     ETH_RSS_NONFRAG_IPV6_SCTP)) {
 				if (rss_type & ETH_RSS_L3_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV6_DST);
+					REFINE_PROTO_FLD(DEL, IPV6_DST);
 				else if (rss_type & ETH_RSS_L3_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-						VIRTCHNL_PROTO_HDR_IPV6_SRC);
+					REFINE_PROTO_FLD(DEL, IPV6_SRC);
 				else if (rss_type &
 					 (ETH_RSS_L4_SRC_ONLY |
 					  ETH_RSS_L4_DST_ONLY))
@@ -605,11 +602,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			    (ETH_RSS_NONFRAG_IPV4_UDP |
 			     ETH_RSS_NONFRAG_IPV6_UDP)) {
 				if (rss_type & ETH_RSS_L4_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_UDP_DST_PORT);
+					REFINE_PROTO_FLD(DEL, UDP_DST_PORT);
 				else if (rss_type & ETH_RSS_L4_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_UDP_SRC_PORT);
+					REFINE_PROTO_FLD(DEL, UDP_SRC_PORT);
 				else if (rss_type &
 					 (ETH_RSS_L3_SRC_ONLY |
 					  ETH_RSS_L3_DST_ONLY))
@@ -623,11 +618,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			    (ETH_RSS_NONFRAG_IPV4_TCP |
 			     ETH_RSS_NONFRAG_IPV6_TCP)) {
 				if (rss_type & ETH_RSS_L4_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_TCP_DST_PORT);
+					REFINE_PROTO_FLD(DEL, TCP_DST_PORT);
 				else if (rss_type & ETH_RSS_L4_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_TCP_SRC_PORT);
+					REFINE_PROTO_FLD(DEL, TCP_SRC_PORT);
 				else if (rss_type &
 					 (ETH_RSS_L3_SRC_ONLY |
 					  ETH_RSS_L3_DST_ONLY))
@@ -641,11 +634,9 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			    (ETH_RSS_NONFRAG_IPV4_SCTP |
 			     ETH_RSS_NONFRAG_IPV6_SCTP)) {
 				if (rss_type & ETH_RSS_L4_SRC_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_SCTP_DST_PORT);
+					REFINE_PROTO_FLD(DEL, SCTP_DST_PORT);
 				else if (rss_type & ETH_RSS_L4_DST_ONLY)
-					VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr,
-					    VIRTCHNL_PROTO_HDR_TCP_SRC_PORT);
+					REFINE_PROTO_FLD(DEL, SCTP_SRC_PORT);
 				else if (rss_type &
 					 (ETH_RSS_L3_SRC_ONLY |
 					  ETH_RSS_L3_DST_ONLY))
@@ -699,8 +690,7 @@ iavf_refine_proto_hdrs_gtpu(struct virtchnl_proto_hdrs *proto_hdrs,
 		hdr = &proto_hdrs->proto_hdr[i];
 		switch (hdr->type) {
 		case VIRTCHNL_PROTO_HDR_GTPU_IP:
-			VIRTCHNL_ADD_PROTO_HDR_FIELD(hdr,
-				VIRTCHNL_PROTO_HDR_GTPU_IP_TEID);
+			REFINE_PROTO_FLD(ADD, GTPU_IP_TEID);
 			break;
 		default:
 			break;
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [dpdk-dev] [PATCH v4 2/2] net/iavf: support RSS for IPv6 prefix 64bit
  2020-09-15  8:17     ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 1/2] net/iavf: replace function name with macro Junfeng Guo
@ 2020-09-15  8:17       ` Junfeng Guo
  2020-09-15  8:40       ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Zhang, Qi Z
  2 siblings, 0 replies; 14+ messages in thread
From: Junfeng Guo @ 2020-09-15  8:17 UTC (permalink / raw)
  To: qi.z.zhang, jingjing.wu, beilei.xing; +Cc: dev, junfeng.guo

RSS for IPv6 prefix 64bit fields are supported in this patch, so that
we can use prefix instead of full IPv6 address for RSS. The prefix
here only includes the first 64 bits of both SRC and DST IPv6 address.

Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/iavf/iavf_hash.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index d8a4dc8bf..61466c072 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -541,6 +541,11 @@ iavf_hash_parse_pattern(struct iavf_pattern_match_item *pattern_match_item,
 
 #define REFINE_PROTO_FLD(op, fld) \
 	VIRTCHNL_##op##_PROTO_HDR_FIELD(hdr, VIRTCHNL_PROTO_HDR_##fld)
+#define REPALCE_PROTO_FLD(fld_1, fld_2) \
+do { \
+	REFINE_PROTO_FLD(DEL, fld_1);	\
+	REFINE_PROTO_FLD(ADD, fld_2);	\
+} while (0)
 
 /* refine proto hdrs base on l2, l3, l4 rss type */
 static void
@@ -596,6 +601,14 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
 			} else {
 				hdr->field_selector = 0;
 			}
+			if (rss_type & RTE_ETH_RSS_L3_PRE64) {
+				if (REFINE_PROTO_FLD(TEST, IPV6_SRC))
+					REPALCE_PROTO_FLD(IPV6_SRC,
+							  IPV6_PREFIX64_SRC);
+				if (REFINE_PROTO_FLD(TEST, IPV6_DST))
+					REPALCE_PROTO_FLD(IPV6_DST,
+							  IPV6_PREFIX64_DST);
+			}
 			break;
 		case VIRTCHNL_PROTO_HDR_UDP:
 			if (rss_type &
@@ -764,6 +777,16 @@ iavf_any_invalid_rss_type(uint64_t rss_type, uint64_t allow_rss_type)
 			return true;
 	}
 
+	/* current ipv6 prefix only supports prefix 64 bits*/
+#define _invalid_prefix_ (RTE_ETH_RSS_L3_PRE32	| \
+			  RTE_ETH_RSS_L3_PRE40	| \
+			  RTE_ETH_RSS_L3_PRE48	| \
+			  RTE_ETH_RSS_L3_PRE56	| \
+			  RTE_ETH_RSS_L3_PRE96)
+
+	if (rss_type & _invalid_prefix_)
+		return true;
+
 	/* check not allowed RSS type */
 #define _RSS_ATTR_ (ETH_RSS_L3_SRC_ONLY		| \
 		    ETH_RSS_L3_DST_ONLY		| \
-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix
  2020-09-15  8:17     ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
  2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 1/2] net/iavf: replace function name with macro Junfeng Guo
  2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
@ 2020-09-15  8:40       ` Zhang, Qi Z
  2 siblings, 0 replies; 14+ messages in thread
From: Zhang, Qi Z @ 2020-09-15  8:40 UTC (permalink / raw)
  To: Guo, Junfeng, Wu, Jingjing, Xing, Beilei; +Cc: dev



> -----Original Message-----
> From: Guo, Junfeng <junfeng.guo@intel.com>
> Sent: Tuesday, September 15, 2020 4:18 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> Xing, Beilei <beilei.xing@intel.com>
> Cc: dev@dpdk.org; Guo, Junfeng <junfeng.guo@intel.com>
> Subject: [PATCH v4 0/2] add AVF RSS support for IPv6 prefix
> 
> RSS for IPv6 prefix fields are supported in this patchset, so that we can use
> prefixes instead of full IPv6 address for AVF RSS. The prefix here includes the
> first 64 bits of both SRC and DST IPv6 address.
> 
> v4:
> * correct proto hdrs refine logic.
> 
> v3:
> * code rebase.
> 
> v2:
> * add support RSS for GTPU IPv6 prefix 64bit.
> 
> [PATCH v4 1/2] net/iavf: replace function name with macro.
> [PATCH v4 2/2] net/iavf: support RSS for IPv6 prefix 64bit.
> 
> Junfeng Guo (2):
>   net/iavf: replace function name with macro
>   net/iavf: support RSS for IPv6 prefix 64bit
> 
>  drivers/net/iavf/iavf_hash.c | 65 +++++++++++++++++++++---------------
>  1 file changed, 39 insertions(+), 26 deletions(-)
> 
> --
> 2.25.1

Acked-by: Qi Zhang <qi.z.zhang@intel.com>

Applied to dpdk-next-net-intel.

Thanks
Qi


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-09-15  8:40 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-03 10:28 [dpdk-dev] [PATCH 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
2020-08-03 10:28 ` [dpdk-dev] [PATCH 1/2] common/iavf: support virtual channel " Junfeng Guo
2020-08-03 10:28 ` [dpdk-dev] [PATCH 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
2020-08-04 12:39 ` [dpdk-dev] [PATCH v2 0/3] add AVF RSS support for IPv6 prefix Junfeng Guo
2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 1/3] common/iavf: support virtual channel " Junfeng Guo
2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 2/3] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
2020-08-04 12:39   ` [dpdk-dev] [PATCH v2 3/3] net/iavf: support RSS for GTPU " Junfeng Guo
2020-09-15  6:26   ` [dpdk-dev] [PATCH v3 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 1/2] net/iavf: replace function name with macro Junfeng Guo
2020-09-15  6:26     ` [dpdk-dev] [PATCH v3 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
2020-09-15  8:17     ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Junfeng Guo
2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 1/2] net/iavf: replace function name with macro Junfeng Guo
2020-09-15  8:17       ` [dpdk-dev] [PATCH v4 2/2] net/iavf: support RSS for IPv6 prefix 64bit Junfeng Guo
2020-09-15  8:40       ` [dpdk-dev] [PATCH v4 0/2] add AVF RSS support for IPv6 prefix Zhang, Qi Z

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).