* [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern @ 2020-10-23 8:15 beilei.xing 2020-10-23 7:07 ` Guo, Jia 2020-10-27 6:21 ` beilei.xing 0 siblings, 2 replies; 5+ messages in thread From: beilei.xing @ 2020-10-23 8:15 UTC (permalink / raw) To: dev; +Cc: jia.guo, Beilei Xing, stable From: Beilei Xing <beilei.xing@intel.com> Currently, can't create more than one following flow for ETH + VLAN pattern: > flow create 0 ingress pattern eth / vlan vid is 350 / end actions queue index 2 / end The root cause is the keys of all such flows are the same. Fixes: 42044b69c67d ("net/i40e: support input set selection for FDIR") Cc: stable@dpdk.org Signed-off-by: Beilei Xing <beilei.xing@intel.com> --- drivers/net/i40e/i40e_flow.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c index adc5da1c53..60043322a1 100644 --- a/drivers/net/i40e/i40e_flow.c +++ b/drivers/net/i40e/i40e_flow.c @@ -28,6 +28,9 @@ #define I40E_IPV6_FRAG_HEADER 44 #define I40E_TENANT_ARRAY_NUM 3 #define I40E_TCI_MASK 0xFFFF +#define I40E_PRI_MASK 0xE000 +#define I40E_CFI_MASK 0x1000 +#define I40E_VID_MASK 0x0FFF static int i40e_flow_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, @@ -2705,12 +2708,22 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev, RTE_ASSERT(!(input_set & I40E_INSET_LAST_ETHER_TYPE)); if (vlan_spec && vlan_mask) { - if (vlan_mask->tci == - rte_cpu_to_be_16(I40E_TCI_MASK)) { - input_set |= I40E_INSET_VLAN_INNER; - filter->input.flow_ext.vlan_tci = - vlan_spec->tci; + if (vlan_mask->tci != + rte_cpu_to_be_16(I40E_TCI_MASK) && + vlan_mask->tci != + rte_cpu_to_be_16(I40E_PRI_MASK) && + vlan_mask->tci != + rte_cpu_to_be_16(I40E_CFI_MASK) && + vlan_mask->tci != + rte_cpu_to_be_16(I40E_VID_MASK)) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "Unsupported TCI mask."); } + input_set |= I40E_INSET_VLAN_INNER; + filter->input.flow_ext.vlan_tci = + vlan_spec->tci; } if (vlan_spec && vlan_mask && vlan_mask->inner_type) { if (vlan_mask->inner_type != RTE_BE16(0xffff)) { -- 2.26.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern 2020-10-23 8:15 [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern beilei.xing @ 2020-10-23 7:07 ` Guo, Jia 2020-10-27 6:21 ` beilei.xing 1 sibling, 0 replies; 5+ messages in thread From: Guo, Jia @ 2020-10-23 7:07 UTC (permalink / raw) To: Xing, Beilei, dev; +Cc: stable > -----Original Message----- > From: Xing, Beilei <beilei.xing@intel.com> > Sent: Friday, October 23, 2020 4:15 PM > To: dev@dpdk.org > Cc: Guo, Jia <jia.guo@intel.com>; Xing, Beilei <beilei.xing@intel.com>; > stable@dpdk.org > Subject: [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern > > From: Beilei Xing <beilei.xing@intel.com> > > Currently, can't create more than one following flow for ETH + VLAN pattern: > > > flow create 0 ingress pattern eth / vlan vid is 350 / end > actions queue index 2 / end > > The root cause is the keys of all such flows are the same. > Create more same flow or different flow? Why the same key relate with below code change. Suggest better to make it more clear for readable. Thanks. > Fixes: 42044b69c67d ("net/i40e: support input set selection for FDIR") > Cc: stable@dpdk.org > > Signed-off-by: Beilei Xing <beilei.xing@intel.com> > --- > drivers/net/i40e/i40e_flow.c | 23 ++++++++++++++++++----- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c > index adc5da1c53..60043322a1 100644 > --- a/drivers/net/i40e/i40e_flow.c > +++ b/drivers/net/i40e/i40e_flow.c > @@ -28,6 +28,9 @@ > #define I40E_IPV6_FRAG_HEADER 44 > #define I40E_TENANT_ARRAY_NUM 3 > #define I40E_TCI_MASK 0xFFFF > +#define I40E_PRI_MASK 0xE000 > +#define I40E_CFI_MASK 0x1000 > +#define I40E_VID_MASK 0x0FFF > Should below are better to show that tci involve the others when use these mask? +#define I40E_TCI_PRI_MASK 0xE000 +#define I40E_TCI_CFI_MASK 0x1000 +#define I40E_TCI_VID_MASK 0x0FFF > static int i40e_flow_validate(struct rte_eth_dev *dev, > const struct rte_flow_attr *attr, @@ -2705,12 > +2708,22 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev, > > RTE_ASSERT(!(input_set & > I40E_INSET_LAST_ETHER_TYPE)); > if (vlan_spec && vlan_mask) { > - if (vlan_mask->tci == > - rte_cpu_to_be_16(I40E_TCI_MASK)) { > - input_set |= > I40E_INSET_VLAN_INNER; > - filter->input.flow_ext.vlan_tci = > - vlan_spec->tci; > + if (vlan_mask->tci != > + rte_cpu_to_be_16(I40E_TCI_MASK) && > + vlan_mask->tci != > + rte_cpu_to_be_16(I40E_PRI_MASK) && > + vlan_mask->tci != > + rte_cpu_to_be_16(I40E_CFI_MASK) && > + vlan_mask->tci != > + rte_cpu_to_be_16(I40E_VID_MASK)) { > + rte_flow_error_set(error, EINVAL, > + > RTE_FLOW_ERROR_TYPE_ITEM, > + item, > + "Unsupported TCI mask."); > } > + input_set |= I40E_INSET_VLAN_INNER; > + filter->input.flow_ext.vlan_tci = > + vlan_spec->tci; > } > if (vlan_spec && vlan_mask && vlan_mask- > >inner_type) { > if (vlan_mask->inner_type != > RTE_BE16(0xffff)) { > -- > 2.26.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern 2020-10-23 8:15 [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern beilei.xing 2020-10-23 7:07 ` Guo, Jia @ 2020-10-27 6:21 ` beilei.xing 2020-10-26 7:14 ` Guo, Jia 1 sibling, 1 reply; 5+ messages in thread From: beilei.xing @ 2020-10-27 6:21 UTC (permalink / raw) To: dev; +Cc: jia.guo, Beilei Xing, stable From: Beilei Xing <beilei.xing@intel.com> Currently, can't create more than one following flow for ETH + VLAN pattern. 1. flow create 0 ingress pattern eth / vlan vid is 350 / end actions queue index 2 / end 2. flow create 0 ingress pattern eth / vlan vid is 351 / end actions queue index 3 / end The root cause is the vlan_tci is not set correctly, it will cause the keys of both of the two flows are the same. Fixes: 42044b69c67d ("net/i40e: support input set selection for FDIR") Cc: stable@dpdk.org Signed-off-by: Beilei Xing <beilei.xing@intel.com> --- drivers/net/i40e/i40e_flow.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c index 8e7a9989b3..5bec0c7a84 100644 --- a/drivers/net/i40e/i40e_flow.c +++ b/drivers/net/i40e/i40e_flow.c @@ -27,7 +27,10 @@ #define I40E_IPV6_TC_MASK (0xFF << I40E_FDIR_IPv6_TC_OFFSET) #define I40E_IPV6_FRAG_HEADER 44 #define I40E_TENANT_ARRAY_NUM 3 -#define I40E_TCI_MASK 0xFFFF +#define I40E_VLAN_TCI_MASK 0xFFFF +#define I40E_VLAN_PRI_MASK 0xE000 +#define I40E_VLAN_CFI_MASK 0x1000 +#define I40E_VLAN_VID_MASK 0x0FFF static int i40e_flow_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, @@ -2705,12 +2708,22 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev, RTE_ASSERT(!(input_set & I40E_INSET_LAST_ETHER_TYPE)); if (vlan_spec && vlan_mask) { - if (vlan_mask->tci == - rte_cpu_to_be_16(I40E_TCI_MASK)) { - input_set |= I40E_INSET_VLAN_INNER; - filter->input.flow_ext.vlan_tci = - vlan_spec->tci; + if (vlan_mask->tci != + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK) && + vlan_mask->tci != + rte_cpu_to_be_16(I40E_VLAN_PRI_MASK) && + vlan_mask->tci != + rte_cpu_to_be_16(I40E_VLAN_CFI_MASK) && + vlan_mask->tci != + rte_cpu_to_be_16(I40E_VLAN_VID_MASK)) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "Unsupported TCI mask."); } + input_set |= I40E_INSET_VLAN_INNER; + filter->input.flow_ext.vlan_tci = + vlan_spec->tci; } if (vlan_spec && vlan_mask && vlan_mask->inner_type) { if (vlan_mask->inner_type != RTE_BE16(0xffff)) { @@ -3894,10 +3907,10 @@ i40e_flow_parse_vxlan_pattern(__rte_unused struct rte_eth_dev *dev, if (vlan_spec && vlan_mask) { if (vlan_mask->tci == - rte_cpu_to_be_16(I40E_TCI_MASK)) + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK)) filter->inner_vlan = rte_be_to_cpu_16(vlan_spec->tci) & - I40E_TCI_MASK; + I40E_VLAN_TCI_MASK; filter_type |= ETH_TUNNEL_FILTER_IVLAN; } break; @@ -4125,10 +4138,10 @@ i40e_flow_parse_nvgre_pattern(__rte_unused struct rte_eth_dev *dev, if (vlan_spec && vlan_mask) { if (vlan_mask->tci == - rte_cpu_to_be_16(I40E_TCI_MASK)) + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK)) filter->inner_vlan = rte_be_to_cpu_16(vlan_spec->tci) & - I40E_TCI_MASK; + I40E_VLAN_TCI_MASK; filter_type |= ETH_TUNNEL_FILTER_IVLAN; } break; @@ -4800,7 +4813,7 @@ i40e_flow_parse_rss_pattern(__rte_unused struct rte_eth_dev *dev, vlan_mask = item->mask; if (vlan_spec && vlan_mask) { if (vlan_mask->tci == - rte_cpu_to_be_16(I40E_TCI_MASK)) { + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK)) { info->region[0].user_priority[0] = (rte_be_to_cpu_16( vlan_spec->tci) >> 13) & 0x7; -- 2.26.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern 2020-10-27 6:21 ` beilei.xing @ 2020-10-26 7:14 ` Guo, Jia 2020-10-27 0:03 ` Zhang, Qi Z 0 siblings, 1 reply; 5+ messages in thread From: Guo, Jia @ 2020-10-26 7:14 UTC (permalink / raw) To: Xing, Beilei, dev; +Cc: stable Acked-by: Jeff Guo <jia.guo@intel.com> > -----Original Message----- > From: Xing, Beilei <beilei.xing@intel.com> > Sent: Tuesday, October 27, 2020 2:22 PM > To: dev@dpdk.org > Cc: Guo, Jia <jia.guo@intel.com>; Xing, Beilei <beilei.xing@intel.com>; > stable@dpdk.org > Subject: [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern > > From: Beilei Xing <beilei.xing@intel.com> > > Currently, can't create more than one following flow for ETH + VLAN pattern. > > 1. flow create 0 ingress pattern eth / vlan vid is 350 / end > actions queue index 2 / end > 2. flow create 0 ingress pattern eth / vlan vid is 351 / end > actions queue index 3 / end > > The root cause is the vlan_tci is not set correctly, it will cause the keys of > both of the two flows are the same. > > Fixes: 42044b69c67d ("net/i40e: support input set selection for FDIR") > Cc: stable@dpdk.org > > Signed-off-by: Beilei Xing <beilei.xing@intel.com> > --- > drivers/net/i40e/i40e_flow.c | 35 ++++++++++++++++++++++++----------- > 1 file changed, 24 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c > index 8e7a9989b3..5bec0c7a84 100644 > --- a/drivers/net/i40e/i40e_flow.c > +++ b/drivers/net/i40e/i40e_flow.c > @@ -27,7 +27,10 @@ > #define I40E_IPV6_TC_MASK (0xFF << I40E_FDIR_IPv6_TC_OFFSET) > #define I40E_IPV6_FRAG_HEADER 44 > #define I40E_TENANT_ARRAY_NUM 3 > -#define I40E_TCI_MASK 0xFFFF > +#define I40E_VLAN_TCI_MASK 0xFFFF > +#define I40E_VLAN_PRI_MASK 0xE000 > +#define I40E_VLAN_CFI_MASK 0x1000 > +#define I40E_VLAN_VID_MASK 0x0FFF > > static int i40e_flow_validate(struct rte_eth_dev *dev, > const struct rte_flow_attr *attr, @@ -2705,12 > +2708,22 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev, > > RTE_ASSERT(!(input_set & > I40E_INSET_LAST_ETHER_TYPE)); > if (vlan_spec && vlan_mask) { > - if (vlan_mask->tci == > - rte_cpu_to_be_16(I40E_TCI_MASK)) { > - input_set |= > I40E_INSET_VLAN_INNER; > - filter->input.flow_ext.vlan_tci = > - vlan_spec->tci; > + if (vlan_mask->tci != > + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK) > && > + vlan_mask->tci != > + rte_cpu_to_be_16(I40E_VLAN_PRI_MASK) > && > + vlan_mask->tci != > + rte_cpu_to_be_16(I40E_VLAN_CFI_MASK) > && > + vlan_mask->tci != > + > rte_cpu_to_be_16(I40E_VLAN_VID_MASK)) { > + rte_flow_error_set(error, EINVAL, > + > RTE_FLOW_ERROR_TYPE_ITEM, > + item, > + "Unsupported TCI mask."); > } > + input_set |= I40E_INSET_VLAN_INNER; > + filter->input.flow_ext.vlan_tci = > + vlan_spec->tci; > } > if (vlan_spec && vlan_mask && vlan_mask- > >inner_type) { > if (vlan_mask->inner_type != > RTE_BE16(0xffff)) { @@ -3894,10 +3907,10 @@ > i40e_flow_parse_vxlan_pattern(__rte_unused struct rte_eth_dev *dev, > > if (vlan_spec && vlan_mask) { > if (vlan_mask->tci == > - rte_cpu_to_be_16(I40E_TCI_MASK)) > + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK)) > filter->inner_vlan = > rte_be_to_cpu_16(vlan_spec->tci) > & > - I40E_TCI_MASK; > + I40E_VLAN_TCI_MASK; > filter_type |= ETH_TUNNEL_FILTER_IVLAN; > } > break; > @@ -4125,10 +4138,10 @@ i40e_flow_parse_nvgre_pattern(__rte_unused > struct rte_eth_dev *dev, > > if (vlan_spec && vlan_mask) { > if (vlan_mask->tci == > - rte_cpu_to_be_16(I40E_TCI_MASK)) > + rte_cpu_to_be_16(I40E_VLAN_TCI_MASK)) > filter->inner_vlan = > rte_be_to_cpu_16(vlan_spec->tci) > & > - I40E_TCI_MASK; > + I40E_VLAN_TCI_MASK; > filter_type |= ETH_TUNNEL_FILTER_IVLAN; > } > break; > @@ -4800,7 +4813,7 @@ i40e_flow_parse_rss_pattern(__rte_unused struct > rte_eth_dev *dev, > vlan_mask = item->mask; > if (vlan_spec && vlan_mask) { > if (vlan_mask->tci == > - rte_cpu_to_be_16(I40E_TCI_MASK)) > { > + > rte_cpu_to_be_16(I40E_VLAN_TCI_MASK)) { > info->region[0].user_priority[0] = > (rte_be_to_cpu_16( > vlan_spec->tci) >> 13) & 0x7; > -- > 2.26.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern 2020-10-26 7:14 ` Guo, Jia @ 2020-10-27 0:03 ` Zhang, Qi Z 0 siblings, 0 replies; 5+ messages in thread From: Zhang, Qi Z @ 2020-10-27 0:03 UTC (permalink / raw) To: Guo, Jia, Xing, Beilei, dev; +Cc: stable > -----Original Message----- > From: dev <dev-bounces@dpdk.org> On Behalf Of Guo, Jia > Sent: Monday, October 26, 2020 3:15 PM > To: Xing, Beilei <beilei.xing@intel.com>; dev@dpdk.org > Cc: stable@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern > > Acked-by: Jeff Guo <jia.guo@intel.com> > > > -----Original Message----- > > From: Xing, Beilei <beilei.xing@intel.com> > > Sent: Tuesday, October 27, 2020 2:22 PM > > To: dev@dpdk.org > > Cc: Guo, Jia <jia.guo@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; stable@dpdk.org > > Subject: [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern > > > > From: Beilei Xing <beilei.xing@intel.com> > > > > Currently, can't create more than one following flow for ETH + VLAN pattern. > > > > 1. flow create 0 ingress pattern eth / vlan vid is 350 / end > > actions queue index 2 / end > > 2. flow create 0 ingress pattern eth / vlan vid is 351 / end > > actions queue index 3 / end > > > > The root cause is the vlan_tci is not set correctly, it will cause > > the keys of both of the two flows are the same. > > > > Fixes: 42044b69c67d ("net/i40e: support input set selection for FDIR") > > Cc: stable@dpdk.org > > > > Signed-off-by: Beilei Xing <beilei.xing@intel.com> > > --- Applied to dpdk-next-net-intel. Thanks Qi ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-10-27 0:03 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-10-23 8:15 [dpdk-dev] [PATCH] net/i40e: fix FDIR issue for ETH + VLAN pattern beilei.xing 2020-10-23 7:07 ` Guo, Jia 2020-10-27 6:21 ` beilei.xing 2020-10-26 7:14 ` Guo, Jia 2020-10-27 0:03 ` 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).