[dpdk-dev] net/ixgbe: fix parsing fdir vxlan issue

Message ID 1486111489-32972-1-git-send-email-wei.zhao1@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel compilation success Compilation OK

Commit Message

Zhao1, Wei Feb. 3, 2017, 8:44 a.m. UTC
  VNI of VXLAN is parsed wrongly. The root cause is that
array vni in item VXLAN also uses network byte ordering.

Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
---
 drivers/net/ixgbe/ixgbe_flow.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
  

Comments

Ferruh Yigit Feb. 3, 2017, 10:53 p.m. UTC | #1
On 2/3/2017 8:44 AM, Wei Zhao wrote:
> VNI of VXLAN is parsed wrongly. The root cause is that
> array vni in item VXLAN also uses network byte ordering.
> 
> Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")
> 
> Signed-off-by: Wei Zhao <wei.zhao1@intel.com>

Cc: stable@dpdk.org

Applied to dpdk-next-net/master, thanks.
  
Yuanhan Liu Feb. 14, 2017, 7:32 a.m. UTC | #2
On Fri, Feb 03, 2017 at 10:53:29PM +0000, Ferruh Yigit wrote:
> On 2/3/2017 8:44 AM, Wei Zhao wrote:
> > VNI of VXLAN is parsed wrongly. The root cause is that
> > array vni in item VXLAN also uses network byte ordering.
> > 
> > Fixes: 11777435c727 ("net/ixgbe: parse flow director filter")
> > 
> > Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
> 
> Cc: stable@dpdk.org

It fixed an issue introduced in this release, thus it's not a candidate
for a stable release. Dropped.

	--yliu
> 
> Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c
index 82aceed..ce96880 100644
--- a/drivers/net/ixgbe/ixgbe_flow.c
+++ b/drivers/net/ixgbe/ixgbe_flow.c
@@ -2132,15 +2132,16 @@  ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
 
 		rte_memcpy(&rule->mask.tunnel_id_mask, vxlan_mask->vni,
 			RTE_DIM(vxlan_mask->vni));
-		rule->mask.tunnel_id_mask <<= 8;
 
 		if (item->spec) {
 			rule->b_spec = TRUE;
 			vxlan_spec = (const struct rte_flow_item_vxlan *)
 					item->spec;
-			rte_memcpy(&rule->ixgbe_fdir.formatted.tni_vni,
+			rte_memcpy(((uint8_t *)
+				&rule->ixgbe_fdir.formatted.tni_vni + 1),
 				vxlan_spec->vni, RTE_DIM(vxlan_spec->vni));
-			rule->ixgbe_fdir.formatted.tni_vni <<= 8;
+			rule->ixgbe_fdir.formatted.tni_vni = rte_be_to_cpu_32(
+				rule->ixgbe_fdir.formatted.tni_vni);
 		}
 	}