diff options
| -rw-r--r-- | net/8021q/vlan.c | 2 | ||||
| -rw-r--r-- | net/8021q/vlan_dev.c | 5 | 
2 files changed, 7 insertions, 0 deletions
| diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 2b7390e377b3..d1e10546eb85 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -492,6 +492,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,  				continue;  			dev_change_flags(vlandev, flgs & ~IFF_UP); +			vlan_transfer_operstate(dev, vlandev);  		}  		break; @@ -507,6 +508,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,  				continue;  			dev_change_flags(vlandev, flgs | IFF_UP); +			vlan_transfer_operstate(dev, vlandev);  		}  		break; diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 6b0921364014..b4b9068e55a7 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -462,6 +462,7 @@ static int vlan_dev_open(struct net_device *dev)  	if (vlan->flags & VLAN_FLAG_GVRP)  		vlan_gvrp_request_join(dev); +	netif_carrier_on(dev);  	return 0;  clear_allmulti: @@ -471,6 +472,7 @@ del_unicast:  	if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr))  		dev_unicast_delete(real_dev, dev->dev_addr, ETH_ALEN);  out: +	netif_carrier_off(dev);  	return err;  } @@ -492,6 +494,7 @@ static int vlan_dev_stop(struct net_device *dev)  	if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr))  		dev_unicast_delete(real_dev, dev->dev_addr, dev->addr_len); +	netif_carrier_off(dev);  	return 0;  } @@ -612,6 +615,8 @@ static int vlan_dev_init(struct net_device *dev)  	struct net_device *real_dev = vlan_dev_info(dev)->real_dev;  	int subclass = 0; +	netif_carrier_off(dev); +  	/* IFF_BROADCAST|IFF_MULTICAST; ??? */  	dev->flags  = real_dev->flags & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI);  	dev->iflink = real_dev->ifindex; | 
