MAC address bits in mask registers should be set to zero
when the is mac mask is 0xFF, otherwise if it is 0x0
these bits should be to 0x3F.

Fixes: 82fb702077f6 ("ixgbe: support new flow director modes for X550")

Signed-off-by: Wei Zhao <wei.zh...@intel.com>
---
 drivers/net/ixgbe/ixgbe_fdir.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c
index 3feb815..6d97aa3 100644
--- a/drivers/net/ixgbe/ixgbe_fdir.c
+++ b/drivers/net/ixgbe/ixgbe_fdir.c
@@ -394,9 +394,15 @@ fdir_set_input_mask_x550(struct rte_eth_dev *dev)
                                IXGBE_FDIRIP6M_TNI_VNI;
 
        if (mode == RTE_FDIR_MODE_PERFECT_TUNNEL) {
-               mac_mask = info->mask.mac_addr_byte_mask;
-               fdiripv6m |= (mac_mask << IXGBE_FDIRIP6M_INNER_MAC_SHIFT)
-                               & IXGBE_FDIRIP6M_INNER_MAC;
+               mac_mask = info->mask.mac_addr_byte_mask & 0x3F;
+               if (mac_mask == 0x3F)
+                       fdiripv6m &= ~IXGBE_FDIRIP6M_INNER_MAC;
+               else if (mac_mask == 0)
+                       fdiripv6m |= IXGBE_FDIRIP6M_INNER_MAC;
+               else{
+                       PMD_INIT_LOG(ERR, "invalid mac_addr_byte_mask");
+                       return -EINVAL;
+               }
 
                switch (info->mask.tunnel_type_mask) {
                case 0:
-- 
2.7.5

Reply via email to