diff options
author | Patrick McHardy <kaber@trash.net> | 2008-03-26 05:12:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-26 05:12:11 -0400 |
commit | 61ee6bd487b9cc160e533034eb338f2085dc7922 (patch) | |
tree | 33502a9da58f26f3b948f18288c0669b898db030 | |
parent | 8c7230f781749cd7261b504c0bfa188bb96e77ee (diff) |
[NET]: Fix multicast device ioctl checks
SIOCADDMULTI/SIOCDELMULTI check whether the driver has a set_multicast_list
method to determine whether it supports multicast. Drivers implementing
secondary unicast support use set_rx_mode however.
Check for both dev->set_multicast_mode and dev->set_rx_mode to determine
multicast capabilities.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/core/dev.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index fcdf03cf3b3f..460e7f99ce3e 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -3329,7 +3329,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd) | |||
3329 | return -EOPNOTSUPP; | 3329 | return -EOPNOTSUPP; |
3330 | 3330 | ||
3331 | case SIOCADDMULTI: | 3331 | case SIOCADDMULTI: |
3332 | if (!dev->set_multicast_list || | 3332 | if ((!dev->set_multicast_list && !dev->set_rx_mode) || |
3333 | ifr->ifr_hwaddr.sa_family != AF_UNSPEC) | 3333 | ifr->ifr_hwaddr.sa_family != AF_UNSPEC) |
3334 | return -EINVAL; | 3334 | return -EINVAL; |
3335 | if (!netif_device_present(dev)) | 3335 | if (!netif_device_present(dev)) |
@@ -3338,7 +3338,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd) | |||
3338 | dev->addr_len, 1); | 3338 | dev->addr_len, 1); |
3339 | 3339 | ||
3340 | case SIOCDELMULTI: | 3340 | case SIOCDELMULTI: |
3341 | if (!dev->set_multicast_list || | 3341 | if ((!dev->set_multicast_list && !dev->set_rx_mode) || |
3342 | ifr->ifr_hwaddr.sa_family != AF_UNSPEC) | 3342 | ifr->ifr_hwaddr.sa_family != AF_UNSPEC) |
3343 | return -EINVAL; | 3343 | return -EINVAL; |
3344 | if (!netif_device_present(dev)) | 3344 | if (!netif_device_present(dev)) |