diff options
author | Tommy Christensen <tommy.christensen@tpack.net> | 2005-07-12 15:13:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-07-12 15:13:49 -0400 |
commit | f4637b55ba960d9987a836617271659e9b7b0de8 (patch) | |
tree | 3fa0763a55ce21fa4a26feae2866773439c7e620 /net/8021q/vlan.c | |
parent | ab611487d8ada506e511d2b8f22fb8e7be9939b9 (diff) |
[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>
Diffstat (limited to 'net/8021q/vlan.c')
-rw-r--r-- | net/8021q/vlan.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 1f6d31670bc7..91e412b0ab00 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
@@ -578,6 +578,14 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
578 | if (!vlandev) | 578 | if (!vlandev) |
579 | continue; | 579 | continue; |
580 | 580 | ||
581 | if (netif_carrier_ok(dev)) { | ||
582 | if (!netif_carrier_ok(vlandev)) | ||
583 | netif_carrier_on(vlandev); | ||
584 | } else { | ||
585 | if (netif_carrier_ok(vlandev)) | ||
586 | netif_carrier_off(vlandev); | ||
587 | } | ||
588 | |||
581 | if ((vlandev->state & VLAN_LINK_STATE_MASK) != flgs) { | 589 | if ((vlandev->state & VLAN_LINK_STATE_MASK) != flgs) { |
582 | vlandev->state = (vlandev->state &~ VLAN_LINK_STATE_MASK) | 590 | vlandev->state = (vlandev->state &~ VLAN_LINK_STATE_MASK) |
583 | | flgs; | 591 | | flgs; |