|
@@ -3329,7 +3329,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
case SIOCADDMULTI:
|
|
|
- if (!dev->set_multicast_list ||
|
|
|
+ if ((!dev->set_multicast_list && !dev->set_rx_mode) ||
|
|
|
ifr->ifr_hwaddr.sa_family != AF_UNSPEC)
|
|
|
return -EINVAL;
|
|
|
if (!netif_device_present(dev))
|
|
@@ -3338,7 +3338,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
|
|
|
dev->addr_len, 1);
|
|
|
|
|
|
case SIOCDELMULTI:
|
|
|
- if (!dev->set_multicast_list ||
|
|
|
+ if ((!dev->set_multicast_list && !dev->set_rx_mode) ||
|
|
|
ifr->ifr_hwaddr.sa_family != AF_UNSPEC)
|
|
|
return -EINVAL;
|
|
|
if (!netif_device_present(dev))
|