mlxsw: spectrum_router: Don't destroy RIF if L3 slave
authorIdo Schimmel <idosch@mellanox.com>
Thu, 16 Mar 2017 08:08:17 +0000 (09:08 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Mar 2017 17:18:34 +0000 (10:18 -0700)
We usually destroy the netdev's router interface (RIF) when the last IP
address is removed from it.

However, we shouldn't do that if it's enslaved to an L3 master device.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 5aad0aef1ed3a2c2b56c7270006e3a60b0a846a0..91ec62a2db48bb680eb7a818b2b5b7d361569ce4 100644 (file)
@@ -41,6 +41,7 @@
 #include <linux/in6.h>
 #include <linux/notifier.h>
 #include <linux/inetdevice.h>
+#include <linux/netdevice.h>
 #include <net/netevent.h>
 #include <net/neighbour.h>
 #include <net/arp.h>
@@ -2660,7 +2661,7 @@ static bool mlxsw_sp_rif_should_config(struct mlxsw_sp_rif *r,
                        return true;
                return false;
        case NETDEV_DOWN:
-               if (r && !in_dev->ifa_list)
+               if (r && !in_dev->ifa_list && !netif_is_l3_slave(r->dev))
                        return true;
                /* It is possible we already removed the RIF ourselves
                 * if it was assigned to a netdev that is now a bridge