Clearing the IFF_ALLMULTI flag on a down interface could cause an allmulti overflow on the underlying interface.
Attempting the set IFF_ALLMULTI on the underlying interface would cause an error and the log message: "allmulti touches root, set allmulti failed." Signed-off-by: Young Xiao <92siuy...@gmail.com> --- drivers/net/ipvlan/ipvlan_main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index bbeb162..523bb83 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -242,8 +242,10 @@ static void ipvlan_change_rx_flags(struct net_device *dev, int change) struct ipvl_dev *ipvlan = netdev_priv(dev); struct net_device *phy_dev = ipvlan->phy_dev; - if (change & IFF_ALLMULTI) - dev_set_allmulti(phy_dev, dev->flags & IFF_ALLMULTI? 1 : -1); + if (dev->flags & IFF_UP) { + if (change & IFF_ALLMULTI) + dev_set_allmulti(phy_dev, dev->flags & IFF_ALLMULTI ? 1 : -1); + } } static void ipvlan_set_multicast_mac_filter(struct net_device *dev) -- 2.7.4