net: bridge: multicast: use multicast contexts instead of bridge or port
[linux-2.6-microblaze.git] / net / bridge / br_device.c
index e8b626c..e815bf4 100644 (file)
@@ -28,6 +28,7 @@ EXPORT_SYMBOL_GPL(nf_br_ops);
 netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct net_bridge *br = netdev_priv(dev);
+       struct net_bridge_mcast *brmctx = &br->multicast_ctx;
        struct net_bridge_fdb_entry *dst;
        struct net_bridge_mdb_entry *mdst;
        const struct nf_br_ops *nf_ops;
@@ -82,15 +83,15 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
                        br_flood(br, skb, BR_PKT_MULTICAST, false, true);
                        goto out;
                }
-               if (br_multicast_rcv(br, NULL, skb, vid)) {
+               if (br_multicast_rcv(brmctx, NULL, skb, vid)) {
                        kfree_skb(skb);
                        goto out;
                }
 
-               mdst = br_mdb_get(br, skb, vid);
+               mdst = br_mdb_get(brmctx, skb, vid);
                if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) &&
-                   br_multicast_querier_exists(br, eth_hdr(skb), mdst))
-                       br_multicast_flood(mdst, skb, false, true);
+                   br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst))
+                       br_multicast_flood(mdst, skb, brmctx, false, true);
                else
                        br_flood(br, skb, BR_PKT_MULTICAST, false, true);
        } else if ((dst = br_fdb_find_rcu(br, dest, vid)) != NULL) {