All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ye Xiaolong <xiaolong.ye@intel.com>
To: Qi Zhang <qi.z.zhang@intel.com>
Cc: yahui.cao@intel.com, beilei.xing@intel.com,
	chenmin.sun@intel.com, dev@dpdk.org, stable@dev.org
Subject: Re: [dpdk-dev] [PATCH] net/ice: fix GTPU rule confliction
Date: Sun, 2 Feb 2020 16:12:26 +0800	[thread overview]
Message-ID: <20200202081226.GI54838@intel.com> (raw)
In-Reply-To: <20200122052824.37497-1-qi.z.zhang@intel.com>

On 01/22, Qi Zhang wrote:
>The patch distinguish fdir rules for GTPU with or without

s/distinguish/distinguishes

>extend header, so flow to match below patterns can be created
>correctly.
>
>1. eth / ipv4 / udp / gtpu teid is 10 / ...
>2. eth / ipv4 / udp / gtpu teid is 10 / gtp_psc / ...
>3. eth / ipv4 / udp / gtpu / gtp_psc qfi is 10 / ...
>4. eth / ipv4 / udp / gtpu teid is 10 / gtp_psc is 10 / ...
>
>Fixes: efc16c621415 ("net/ice: support flow director GTPU tunnel")
>Cc: stable@dev.org

Should be stable@dpdk.org

>
>Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
>---
> drivers/net/ice/base/ice_flow.c   |  8 ++++----
> drivers/net/ice/ice_ethdev.h      |  1 +
> drivers/net/ice/ice_fdir_filter.c | 27 ++++++++++++++++++++-------
> 3 files changed, 25 insertions(+), 11 deletions(-)
>
>diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c
>index eaa7a3b96..02f169808 100644
>--- a/drivers/net/ice/base/ice_flow.c
>+++ b/drivers/net/ice/base/ice_flow.c
>@@ -586,10 +586,6 @@ ice_flow_proc_seg_hdrs(struct ice_flow_prof_params *params)
> 			src = (const ice_bitmap_t *)ice_ptypes_gtpc_tid;
> 			ice_and_bitmap(params->ptypes, params->ptypes,
> 				       src, ICE_FLOW_PTYPE_MAX);
>-		} else if (hdrs & ICE_FLOW_SEG_HDR_GTPU) {
>-			src = (const ice_bitmap_t *)ice_ptypes_gtpu;
>-			ice_and_bitmap(params->ptypes, params->ptypes,
>-				       src, ICE_FLOW_PTYPE_MAX);
> 		} else if (hdrs & ICE_FLOW_SEG_HDR_GTPU_EH) {
> 			src = (const ice_bitmap_t *)ice_ptypes_gtpu;
> 			ice_and_bitmap(params->ptypes, params->ptypes,
>@@ -598,6 +594,10 @@ ice_flow_proc_seg_hdrs(struct ice_flow_prof_params *params)
> 			/* Attributes for GTP packet with Extension Header */
> 			params->attr = ice_attr_gtpu_eh;
> 			params->attr_cnt = ARRAY_SIZE(ice_attr_gtpu_eh);
>+		} else if (hdrs & ICE_FLOW_SEG_HDR_GTPU_IP) {
>+			src = (const ice_bitmap_t *)ice_ptypes_gtpu;
>+			ice_and_bitmap(params->ptypes, params->ptypes,
>+				       src, ICE_FLOW_PTYPE_MAX);
> 		}
> 	}
> 
>diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
>index f2186e1ff..da557a254 100644
>--- a/drivers/net/ice/ice_ethdev.h
>+++ b/drivers/net/ice/ice_ethdev.h
>@@ -254,6 +254,7 @@ enum ice_fdir_tunnel_type {
> 	ICE_FDIR_TUNNEL_TYPE_NONE = 0,
> 	ICE_FDIR_TUNNEL_TYPE_VXLAN,
> 	ICE_FDIR_TUNNEL_TYPE_GTPU,
>+	ICE_FDIR_TUNNEL_TYPE_GTPU_EH,
> };
> 
> struct rte_flow;
>diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
>index fa8707455..884a5aea3 100644
>--- a/drivers/net/ice/ice_fdir_filter.c
>+++ b/drivers/net/ice/ice_fdir_filter.c
>@@ -133,6 +133,9 @@ static struct ice_pattern_match_item ice_fdir_pattern_comms[] = {
> static struct ice_flow_parser ice_fdir_parser_os;
> static struct ice_flow_parser ice_fdir_parser_comms;
> 
>+static int
>+ice_fdir_is_tunnel_profile(enum ice_fdir_tunnel_type tunnel_type);
>+
> static const struct rte_memzone *
> ice_memzone_reserve(const char *name, uint32_t len, int socket_id)
> {
>@@ -915,7 +918,7 @@ ice_fdir_input_set_parse(uint64_t inset, enum ice_flow_field *field)
> 		{ICE_INSET_TUN_UDP_DST_PORT, ICE_FLOW_FIELD_IDX_UDP_DST_PORT},
> 		{ICE_INSET_TUN_SCTP_SRC_PORT, ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT},
> 		{ICE_INSET_TUN_SCTP_DST_PORT, ICE_FLOW_FIELD_IDX_SCTP_DST_PORT},
>-		{ICE_INSET_GTPU_TEID, ICE_FLOW_FIELD_IDX_GTPU_EH_TEID},
>+		{ICE_INSET_GTPU_TEID, ICE_FLOW_FIELD_IDX_GTPU_IP_TEID},
> 		{ICE_INSET_GTPU_QFI, ICE_FLOW_FIELD_IDX_GTPU_EH_QFI},
> 	};
> 
>@@ -928,11 +931,12 @@ ice_fdir_input_set_parse(uint64_t inset, enum ice_flow_field *field)
> 
> static int
> ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
>-			uint64_t input_set, bool is_tunnel)
>+			uint64_t input_set, enum ice_fdir_tunnel_type ttype)
> {
> 	struct ice_flow_seg_info *seg;
> 	struct ice_flow_seg_info *seg_tun = NULL;
> 	enum ice_flow_field field[ICE_FLOW_FIELD_IDX_MAX];
>+	bool is_tunnel;
> 	int i, ret;
> 
> 	if (!input_set)
>@@ -984,9 +988,15 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> 	case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP:
> 	case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP:
> 	case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER:
>-		ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH |
>-				       ICE_FLOW_SEG_HDR_GTPU_IP |
>-				  ICE_FLOW_SEG_HDR_IPV4);
>+		if (ttype == ICE_FDIR_TUNNEL_TYPE_GTPU)
>+			ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_IP |
>+					  ICE_FLOW_SEG_HDR_IPV4);
>+		else if (ttype == ICE_FDIR_TUNNEL_TYPE_GTPU_EH)
>+			ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH |
>+					  ICE_FLOW_SEG_HDR_GTPU_IP |
>+					  ICE_FLOW_SEG_HDR_IPV4);
>+		else
>+			PMD_DRV_LOG(ERR, "not supported tunnel type.");
> 		break;
> 	default:
> 		PMD_DRV_LOG(ERR, "not supported filter type.");
>@@ -1000,6 +1010,7 @@ ice_fdir_input_set_conf(struct ice_pf *pf, enum ice_fltr_ptype flow,
> 				 ICE_FLOW_FLD_OFF_INVAL, false);
> 	}
> 
>+	is_tunnel = ice_fdir_is_tunnel_profile(ttype);
> 	if (!is_tunnel) {
> 		ret = ice_fdir_hw_tbl_conf(pf, pf->main_vsi, pf->fdir.fdir_vsi,
> 					   seg, flow, false);
>@@ -1224,7 +1235,7 @@ ice_fdir_create_filter(struct ice_adapter *ad,
> 	is_tun = ice_fdir_is_tunnel_profile(filter->tunnel_type);
> 
> 	ret = ice_fdir_input_set_conf(pf, filter->input.flow_type,
>-			filter->input_set, is_tun);
>+			filter->input_set, filter->tunnel_type);
> 	if (ret) {
> 		rte_flow_error_set(error, -ret,
> 				   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>@@ -1896,6 +1907,7 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
> 				filter->input.gtpu_data.qfi =
> 					gtp_psc_spec->qfi;
> 			}
>+			tunnel_type = ICE_FDIR_TUNNEL_TYPE_GTPU_EH;
> 			break;
> 		default:
> 			rte_flow_error_set(error, EINVAL,
>@@ -1906,7 +1918,8 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
> 		}
> 	}
> 
>-	if (tunnel_type == ICE_FDIR_TUNNEL_TYPE_GTPU)
>+	if (tunnel_type == ICE_FDIR_TUNNEL_TYPE_GTPU ||
>+	    tunnel_type == ICE_FDIR_TUNNEL_TYPE_GTPU_EH)
> 		flow_type = ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER;
> 
> 	filter->tunnel_type = tunnel_type;
>-- 
>2.13.6
>

Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>

Applied to dpdk-next-net-intel with above fixes, Thanks.

      reply	other threads:[~2020-02-02  8:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-22  5:28 [dpdk-dev] [PATCH] net/ice: fix GTPU rule confliction Qi Zhang
2020-02-02  8:12 ` Ye Xiaolong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200202081226.GI54838@intel.com \
    --to=xiaolong.ye@intel.com \
    --cc=beilei.xing@intel.com \
    --cc=chenmin.sun@intel.com \
    --cc=dev@dpdk.org \
    --cc=qi.z.zhang@intel.com \
    --cc=stable@dev.org \
    --cc=yahui.cao@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.