bridge: Fix the way the PVID is referenced
We are using the VLAN_TAG_PRESENT bit to detect whether the PVID is set or not at br_get_pvid(), while we don't care about the bit in adding/deleting the PVID, which makes it impossible to forward any incomming untagged frame with vlan_filtering enabled. Since vid 0 cannot be used for the PVID, we can use vid 0 to indicate that the PVID is not set, which is slightly more efficient than using the VLAN_TAG_PRESENT. Fix the problem by getting rid of using the VLAN_TAG_PRESENT. Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> Reviewed-by: Vlad Yasevich <vyasevic@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b90356ce17
commit
d1c6c708c4
@ -643,9 +643,7 @@ static inline u16 br_get_pvid(const struct net_port_vlans *v)
|
||||
* vid wasn't set
|
||||
*/
|
||||
smp_rmb();
|
||||
return (v->pvid & VLAN_TAG_PRESENT) ?
|
||||
(v->pvid & ~VLAN_TAG_PRESENT) :
|
||||
VLAN_N_VID;
|
||||
return v->pvid ?: VLAN_N_VID;
|
||||
}
|
||||
|
||||
#else
|
||||
|
Loading…
Reference in New Issue
Block a user