OSDN Git Service

vlan: allow null VLAN ID to be used
authorEric Dumazet <eric.dumazet@gmail.com>
Tue, 27 Oct 2009 01:40:35 +0000 (18:40 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Oct 2009 08:02:33 +0000 (01:02 -0700)
commit05423b241311c9380b7280179295bac7794281b6
tree8a84aca48cbc30b142bdf143dbf11fdbab9cad67
parent9dbb58d867e90d2528752339751216c955523e62
vlan: allow null VLAN ID to be used

We currently use a 16 bit field (vlan_tci) to store VLAN ID/PRIO on a skb.

Null value is used as a special value, meaning vlan tagging not enabled.
This forbids use of null vlan ID.

As pointed by David, some drivers use the 3 high order bits (PRIO)

As VLAN ID is 12 bits, we can use the remaining bit (CFI) as a flag, and
allow null VLAN ID.

In case future code really wants to use VLAN_CFI_MASK, we'll have to use
a bit outside of vlan_tci.

#define VLAN_PRIO_MASK         0xe000 /* Priority Code Point */
#define VLAN_PRIO_SHIFT        13
#define VLAN_CFI_MASK          0x1000 /* Canonical Format Indicator */
#define VLAN_TAG_PRESENT       VLAN_CFI_MASK
#define VLAN_VID_MASK          0x0fff /* VLAN Identifier */

Reported-by: Gertjan Hofman <gertjan_hofman@yahoo.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/if_vlan.h
net/8021q/vlan.h
net/8021q/vlan_dev.c
net/core/dev.c
net/packet/af_packet.c