+ if (p->state != BR_STATE_DISABLED) {
+ u16 vid = 0;
-- br_vlan_get_tag(skb, &vid);
-- if (p->flags & BR_LEARNING)
+- /* check if vlan is allowed, to avoid spoofing */
+- if (p->flags & BR_LEARNING && br_should_learn(p, skb, &vid))
- br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid, false);
-+ br_vlan_get_tag(skb, &vid);
-+ if (p->flags & BR_LEARNING)
++ /* check if vlan is allowed, to avoid spoofing */
++ if (p->flags & BR_LEARNING && br_should_learn(p, skb, &vid))
+ br_fdb_update(p->br, p, eth_hdr(skb)->h_source, vid, false);
+ }
return 0; /* process further */