|
@@ -29,6 +29,7 @@ static int br_pass_frame_up(struct sk_buff *skb)
|
|
|
struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev;
|
|
|
struct net_bridge *br = netdev_priv(brdev);
|
|
|
struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats);
|
|
|
+ struct net_port_vlans *pv;
|
|
|
|
|
|
u64_stats_update_begin(&brstats->syncp);
|
|
|
brstats->rx_packets++;
|
|
@@ -39,18 +40,18 @@ static int br_pass_frame_up(struct sk_buff *skb)
|
|
|
* packet is allowed except in promisc modue when someone
|
|
|
* may be running packet capture.
|
|
|
*/
|
|
|
+ pv = br_get_vlan_info(br);
|
|
|
if (!(brdev->flags & IFF_PROMISC) &&
|
|
|
- !br_allowed_egress(br, br_get_vlan_info(br), skb)) {
|
|
|
+ !br_allowed_egress(br, pv, skb)) {
|
|
|
kfree_skb(skb);
|
|
|
return NET_RX_DROP;
|
|
|
}
|
|
|
|
|
|
- skb = br_handle_vlan(br, br_get_vlan_info(br), skb);
|
|
|
- if (!skb)
|
|
|
- return NET_RX_DROP;
|
|
|
-
|
|
|
indev = skb->dev;
|
|
|
skb->dev = brdev;
|
|
|
+ skb = br_handle_vlan(br, pv, skb);
|
|
|
+ if (!skb)
|
|
|
+ return NET_RX_DROP;
|
|
|
|
|
|
return NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL,
|
|
|
netif_receive_skb);
|