bridge: Fix updating FDB entries when the PVID is applied
authorToshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Wed, 16 Oct 2013 08:07:16 +0000 (17:07 +0900)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Oct 2013 20:02:53 +0000 (16:02 -0400)
We currently set the value that variable vid is pointing, which will be
used in FDB later, to 0 at br_allowed_ingress() when we receive untagged
or priority-tagged frames, even though the PVID is valid.
This leads to FDB updates in such a wrong way that they are learned with
VID 0.
Update the value to that of PVID if the PVID is applied.

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>
net/bridge/br_vlan.c

index 5a9c44a0c306f2a03a9d7f373515097d2af49344..53f0990eab58e08a3da9160a27ee0834bd0f0272 100644 (file)
@@ -217,6 +217,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
                /* PVID is set on this port.  Any untagged or priority-tagged
                 * ingress frame is considered to belong to this vlan.
                 */
+               *vid = pvid;
                if (likely(err))
                        /* Untagged Frame. */
                        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), pvid);