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