hv_netvsc: enable multicast if necessary
authorStephen Hemminger <stephen@networkplumber.org>
Tue, 27 Mar 2018 18:28:48 +0000 (11:28 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 29 Mar 2018 15:45:06 +0000 (11:45 -0400)
My recent change to netvsc drive in how receive flags are handled
broke multicast.  The Hyper-v/Azure virtual interface there is not a
multicast filter list, filtering is only all or none. The driver must
enable all multicast if any multicast address is present.

Fixes: 009f766ca238 ("hv_netvsc: filter multicast/broadcast")
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/hyperv/rndis_filter.c

index a6ec41c..465c42e 100644 (file)
@@ -858,7 +858,7 @@ static void rndis_set_multicast(struct work_struct *w)
        if (flags & IFF_PROMISC) {
                filter = NDIS_PACKET_TYPE_PROMISCUOUS;
        } else {
-               if (flags & IFF_ALLMULTI)
+               if (!netdev_mc_empty(rdev->ndev) || (flags & IFF_ALLMULTI))
                        filter |= NDIS_PACKET_TYPE_ALL_MULTICAST;
                if (flags & IFF_BROADCAST)
                        filter |= NDIS_PACKET_TYPE_BROADCAST;