Skip to content

Commit

Permalink
[VLAN]: Fix link state propagation
Browse files Browse the repository at this point in the history
When the queue of the underlying device is stopped at initialization time
or the device is marked "not present", the state will be propagated to the
vlan device and never change. Based on an analysis by Patrick McHardy.

Signed-off-by: Stefan Rompf <[email protected]>
ACKed-by: Patrick McHardy <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Stefan Rompf authored and davem330 committed Jul 24, 2006
1 parent a922ba5 commit 6c753c3
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions net/8021q/vlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,6 @@ static struct packet_type vlan_packet_type = {
.func = vlan_skb_recv, /* VLAN receive method */
};

/* Bits of netdev state that are propagated from real device to virtual */
#define VLAN_LINK_STATE_MASK \
((1<<__LINK_STATE_PRESENT)|(1<<__LINK_STATE_NOCARRIER)|(1<<__LINK_STATE_DORMANT))

/* End of global variables definitions. */

/*
Expand Down Expand Up @@ -479,7 +475,9 @@ static struct net_device *register_vlan_device(const char *eth_IF_name,
new_dev->flags = real_dev->flags;
new_dev->flags &= ~IFF_UP;

new_dev->state = real_dev->state & ~(1<<__LINK_STATE_START);
new_dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) |
(1<<__LINK_STATE_DORMANT))) |
(1<<__LINK_STATE_PRESENT);

/* need 4 bytes for extra VLAN header info,
* hope the underlying device can handle it.
Expand Down

0 comments on commit 6c753c3

Please sign in to comment.