Hi, Alvin > -----Original Message----- > From: Zhang, AlvinX <alvinx.zh...@intel.com> > Sent: Thursday, September 10, 2020 11:37 AM > To: Guo, Jia <jia....@intel.com>; Zhang, Qi Z <qi.z.zh...@intel.com> > Cc: dev@dpdk.org; Zhang, AlvinX <alvinx.zh...@intel.com> > Subject: [PATCH v4 2/2] net/iavf: support outer IP hash for GTPC > > From: Alvin Zhang <alvinx.zh...@intel.com> > > Add patterns and headers for GTPC, now outer IP hash can be configured as > input sets for GTPC packet. > > Signed-off-by: Alvin Zhang <alvinx.zh...@intel.com> > --- > > V2: Modify codes according to comments. > V3: Refact all codes. > V4: Fix compatibility issues. > > drivers/net/iavf/iavf_generic_flow.c | 18 ++++++++++++++++++ > drivers/net/iavf/iavf_generic_flow.h | 6 ++++++ > drivers/net/iavf/iavf_hash.c | 13 +++++++++++++ > 3 files changed, 37 insertions(+) > > diff --git a/drivers/net/iavf/iavf_generic_flow.c > b/drivers/net/iavf/iavf_generic_flow.c > index 321a4dc..00e7f15 100644 > --- a/drivers/net/iavf/iavf_generic_flow.c > +++ b/drivers/net/iavf/iavf_generic_flow.c > @@ -315,6 +315,15 @@ enum rte_flow_item_type > iavf_pattern_eth_qinq_ipv6_icmp6[] = { > RTE_FLOW_ITEM_TYPE_END, > }; > > +/* IPv4 GTPC */ > +enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpc[] = { > + RTE_FLOW_ITEM_TYPE_ETH, > + RTE_FLOW_ITEM_TYPE_IPV4, > + RTE_FLOW_ITEM_TYPE_UDP, > + RTE_FLOW_ITEM_TYPE_GTPC, > + RTE_FLOW_ITEM_TYPE_END, > +}; > + > /* IPV4 GTPU (EH) */ > enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu[] = { > RTE_FLOW_ITEM_TYPE_ETH, > @@ -333,6 +342,15 @@ enum rte_flow_item_type > iavf_pattern_eth_ipv4_gtpu_eh[] = { > RTE_FLOW_ITEM_TYPE_END, > }; > > +/* IPv6 GTPC */ > +enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpc[] = { > + RTE_FLOW_ITEM_TYPE_ETH, > + RTE_FLOW_ITEM_TYPE_IPV6, > + RTE_FLOW_ITEM_TYPE_UDP, > + RTE_FLOW_ITEM_TYPE_GTPC, > + RTE_FLOW_ITEM_TYPE_END, > +}; > + > /* IPV6 GTPU (EH) */ > enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu[] = { > RTE_FLOW_ITEM_TYPE_ETH, > diff --git a/drivers/net/iavf/iavf_generic_flow.h > b/drivers/net/iavf/iavf_generic_flow.h > index f365cc3..dbc7294 100644 > --- a/drivers/net/iavf/iavf_generic_flow.h > +++ b/drivers/net/iavf/iavf_generic_flow.h > @@ -182,10 +182,16 @@ > extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6_icmp6[]; > extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6_icmp6[]; > > +/* IPv4 GTPC */ > +extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpc[]; > + > /* IPv4 GTPU (EH) */ > extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu[]; extern > enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh[]; > > +/* IPv4 GTPC */
/* IPv6 GTPC */ > +extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpc[]; > + > /* IPv6 GTPU (EH) */ > extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu[]; extern > enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh[]; diff --git > a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index > d0f0057..4e8ee5c 100644 > --- a/drivers/net/iavf/iavf_hash.c > +++ b/drivers/net/iavf/iavf_hash.c > @@ -135,6 +135,9 @@ struct iavf_hash_flow_cfg { #define proto_hdr_gtpu > { \ > VIRTCHNL_PROTO_HDR_GTPU_IP, 0, {BUFF_NOUSED} } > > +#define proto_hdr_gtpc { \ > + VIRTCHNL_PROTO_HDR_GTPC, 0, {BUFF_NOUSED} } > + > #define TUNNEL_LEVEL_OUTER 0 > #define TUNNEL_LEVEL_INNER 1 > > @@ -267,6 +270,14 @@ struct virtchnl_proto_hdrs > outer_ipv6_udp_gtpu_tmplt = { > TUNNEL_LEVEL_OUTER, 3, {proto_hdr_ipv6, proto_hdr_udp, > proto_hdr_gtpu} }; > > +struct virtchnl_proto_hdrs ipv4_udp_gtpc_tmplt = { > + TUNNEL_LEVEL_OUTER, 3, {proto_hdr_ipv4, proto_hdr_udp, > proto_hdr_gtpc} > +}; > + > +struct virtchnl_proto_hdrs ipv6_udp_gtpc_tmplt = { > + TUNNEL_LEVEL_OUTER, 3, {proto_hdr_ipv6, proto_hdr_udp, > proto_hdr_gtpc} > +}; > + > /* rss type super set */ > > /* IPv4 outer */ > @@ -377,6 +388,7 @@ struct virtchnl_proto_hdrs > outer_ipv6_udp_gtpu_tmplt = { > {iavf_pattern_eth_ipv4_ah, > IAVF_RSS_TYPE_IPV4_AH, &ipv4_ah_tmplt}, > {iavf_pattern_eth_ipv4_l2tpv3, > IAVF_RSS_TYPE_IPV4_L2TPV3, &ipv4_l2tpv3_tmplt}, > {iavf_pattern_eth_ipv4_pfcp, > IAVF_RSS_TYPE_IPV4_PFCP, &ipv4_pfcp_tmplt}, > + {iavf_pattern_eth_ipv4_gtpc, ETH_RSS_IPV4, Since the input set hint is the supper set, so I suppose you use the supper set "ETH_RSS_IPV4 | ETH_RSS_GTPC" here, and considerate if we need to enable GTPC hash at this patch, if not it could be process when parsing pattern. Want to know other's opinion. > &ipv4_udp_gtpc_tmplt}, > /* IPv6 */ > {iavf_pattern_eth_ipv6, > IAVF_RSS_TYPE_OUTER_IPV6, &outer_ipv6_tmplt}, > {iavf_pattern_eth_ipv6_udp, > IAVF_RSS_TYPE_OUTER_IPV6_UDP, &outer_ipv6_udp_tmplt}, > @@ -404,6 +416,7 @@ struct virtchnl_proto_hdrs > outer_ipv6_udp_gtpu_tmplt = { > {iavf_pattern_eth_ipv6_ah, > IAVF_RSS_TYPE_IPV6_AH, &ipv6_ah_tmplt}, > {iavf_pattern_eth_ipv6_l2tpv3, > IAVF_RSS_TYPE_IPV6_L2TPV3, &ipv6_l2tpv3_tmplt}, > {iavf_pattern_eth_ipv6_pfcp, > IAVF_RSS_TYPE_IPV6_PFCP, &ipv6_pfcp_tmplt}, > + {iavf_pattern_eth_ipv6_gtpc, ETH_RSS_IPV6, > &ipv6_udp_gtpc_tmplt}, > }; > > struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = { > -- > 1.8.3.1