When the lowerdev is set administratively down disable carrier on the
macvlan interface. This means operstate gets set properly instead of
still being "up".

Signed-off-by: Debabrata Banerjee <dbane...@akamai.com>
---
 drivers/net/macvlan.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 2bcf1f3..16d0e56 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -1525,10 +1525,14 @@ static int macvlan_device_event(struct notifier_block 
*unused,
 
        switch (event) {
        case NETDEV_UP:
+       case NETDEV_DOWN:
        case NETDEV_CHANGE:
-               list_for_each_entry(vlan, &port->vlans, list)
+               list_for_each_entry(vlan, &port->vlans, list) {
                        netif_stacked_transfer_operstate(vlan->lowerdev,
                                                         vlan->dev);
+                       if (!(vlan->lowerdev->flags & IFF_UP))
+                               netif_carrier_off(vlan->dev);
+               }
                break;
        case NETDEV_FEAT_CHANGE:
                list_for_each_entry(vlan, &port->vlans, list) {
-- 
2.8.0

Reply via email to