mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
netdevice: provide common routine for macvlan and vlan operstate management
Provide common routine for the transition of operational state for a leaf device during a root device transition. Signed-off-by: Patrick Mullaney <[email protected]> Acked-by: Arnd Bergmann <[email protected]> Acked-by: Patrick McHardy <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
012093f6d5
commit
fc4a748966
4 changed files with 37 additions and 46 deletions
|
|
@ -184,27 +184,6 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
|
|||
dev_put(real_dev);
|
||||
}
|
||||
|
||||
static void vlan_transfer_operstate(const struct net_device *dev,
|
||||
struct net_device *vlandev)
|
||||
{
|
||||
/* Have to respect userspace enforced dormant state
|
||||
* of real device, also must allow supplicant running
|
||||
* on VLAN device
|
||||
*/
|
||||
if (dev->operstate == IF_OPER_DORMANT)
|
||||
netif_dormant_on(vlandev);
|
||||
else
|
||||
netif_dormant_off(vlandev);
|
||||
|
||||
if (netif_carrier_ok(dev)) {
|
||||
if (!netif_carrier_ok(vlandev))
|
||||
netif_carrier_on(vlandev);
|
||||
} else {
|
||||
if (netif_carrier_ok(vlandev))
|
||||
netif_carrier_off(vlandev);
|
||||
}
|
||||
}
|
||||
|
||||
int vlan_check_real_dev(struct net_device *real_dev, u16 vlan_id)
|
||||
{
|
||||
const char *name = real_dev->name;
|
||||
|
|
@ -262,7 +241,7 @@ int register_vlan_dev(struct net_device *dev)
|
|||
/* Account for reference in struct vlan_dev_info */
|
||||
dev_hold(real_dev);
|
||||
|
||||
vlan_transfer_operstate(real_dev, dev);
|
||||
netif_stacked_transfer_operstate(real_dev, dev);
|
||||
linkwatch_fire_event(dev); /* _MUST_ call rfc2863_policy() */
|
||||
|
||||
/* So, got the sucker initialized, now lets place
|
||||
|
|
@ -453,7 +432,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
|
|||
if (!vlandev)
|
||||
continue;
|
||||
|
||||
vlan_transfer_operstate(dev, vlandev);
|
||||
netif_stacked_transfer_operstate(dev, vlandev);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -511,7 +490,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
|
|||
vlan = vlan_dev_info(vlandev);
|
||||
if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
|
||||
dev_change_flags(vlandev, flgs & ~IFF_UP);
|
||||
vlan_transfer_operstate(dev, vlandev);
|
||||
netif_stacked_transfer_operstate(dev, vlandev);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -529,7 +508,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
|
|||
vlan = vlan_dev_info(vlandev);
|
||||
if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
|
||||
dev_change_flags(vlandev, flgs | IFF_UP);
|
||||
vlan_transfer_operstate(dev, vlandev);
|
||||
netif_stacked_transfer_operstate(dev, vlandev);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue