net/ice: fix disabling promiscuous mode
authorSiwar Zitouni <siwar.zitouni@6wind.com>
Mon, 19 Apr 2021 12:53:48 +0000 (14:53 +0200)
committerQi Zhang <qi.z.zhang@intel.com>
Tue, 20 Apr 2021 14:05:45 +0000 (16:05 +0200)
When promiscuous mode is disabled, allmulticast is
also disabled, even if it was previously enabled.

Add a test in ice_promisc_disable()
to check if allmulticast should be kept enabled.

Fixes: c945e4bf9063 ("net/ice: support promiscuous mode")
Cc: stable@dpdk.org
Signed-off-by: Thibaut Collet <thibaut.collet@6wind.com>
Signed-off-by: Siwar Zitouni <siwar.zitouni@6wind.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/net/ice/ice_ethdev.c

index 84d1735..da9e85b 100644 (file)
@@ -4526,8 +4526,11 @@ ice_promisc_disable(struct rte_eth_dev *dev)
        uint8_t pmask;
        int ret = 0;
 
-       pmask = ICE_PROMISC_UCAST_RX | ICE_PROMISC_UCAST_TX |
-               ICE_PROMISC_MCAST_RX | ICE_PROMISC_MCAST_TX;
+       if (dev->data->all_multicast == 1)
+               pmask = ICE_PROMISC_UCAST_RX | ICE_PROMISC_UCAST_TX;
+       else
+               pmask = ICE_PROMISC_UCAST_RX | ICE_PROMISC_UCAST_TX |
+                       ICE_PROMISC_MCAST_RX | ICE_PROMISC_MCAST_TX;
 
        status = ice_clear_vsi_promisc(hw, vsi->idx, pmask, 0);
        if (status != ICE_SUCCESS) {