[VLAN]: Fix early vlan adding leads to not functional device
OK, I can see what's happening here. eth0 doesn't detect link-up until after a few seconds, so when the vlan interface is opened immediately after eth0 has been opened, it inherits the link-down state. Subsequently the vlan interface is never properly activated and are thus unable to transmit any packets. dev->state bits are not supposed to be manipulated directly. Something similar is probably needed for the netif_device_present() bit, although I don't know how this is meant to work for a virtual device. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ab611487d8
commit
f4637b55ba
1 changed files with 8 additions and 0 deletions
|
@ -578,6 +578,14 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
|
||||||
if (!vlandev)
|
if (!vlandev)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (netif_carrier_ok(dev)) {
|
||||||
|
if (!netif_carrier_ok(vlandev))
|
||||||
|
netif_carrier_on(vlandev);
|
||||||
|
} else {
|
||||||
|
if (netif_carrier_ok(vlandev))
|
||||||
|
netif_carrier_off(vlandev);
|
||||||
|
}
|
||||||
|
|
||||||
if ((vlandev->state & VLAN_LINK_STATE_MASK) != flgs) {
|
if ((vlandev->state & VLAN_LINK_STATE_MASK) != flgs) {
|
||||||
vlandev->state = (vlandev->state &~ VLAN_LINK_STATE_MASK)
|
vlandev->state = (vlandev->state &~ VLAN_LINK_STATE_MASK)
|
||||||
| flgs;
|
| flgs;
|
||||||
|
|
Loading…
Reference in a new issue