br_multicast.c (ff0fd34eaee9978f9ed7f6e2ac47f9590d4afac3) br_multicast.c (2a26028d119267a2386733dd71d256f269e70f52)
1/*
2 * Bridge multicast support.
3 *
4 * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)

--- 236 unchanged lines hidden (view full) ---

245 struct net_bridge *br = mp->br;
246 struct net_bridge_mdb_htable *mdb;
247
248 spin_lock(&br->multicast_lock);
249 if (!netif_running(br->dev) || timer_pending(&mp->timer))
250 goto out;
251
252 mp->host_joined = false;
1/*
2 * Bridge multicast support.
3 *
4 * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)

--- 236 unchanged lines hidden (view full) ---

245 struct net_bridge *br = mp->br;
246 struct net_bridge_mdb_htable *mdb;
247
248 spin_lock(&br->multicast_lock);
249 if (!netif_running(br->dev) || timer_pending(&mp->timer))
250 goto out;
251
252 mp->host_joined = false;
253 br_mdb_notify(br->dev, NULL, &mp->addr, RTM_DELMDB, 0);
253
254 if (mp->ports)
255 goto out;
256
257 mdb = mlock_dereference(br->mdb, br);
258
259 hlist_del_rcu(&mp->hlist[mdb->ver]);
260 mdb->size--;

--- 507 unchanged lines hidden (view full) ---

768 goto out;
769
770 mp = br_multicast_new_group(br, port, group);
771 err = PTR_ERR(mp);
772 if (IS_ERR(mp))
773 goto err;
774
775 if (!port) {
254
255 if (mp->ports)
256 goto out;
257
258 mdb = mlock_dereference(br->mdb, br);
259
260 hlist_del_rcu(&mp->hlist[mdb->ver]);
261 mdb->size--;

--- 507 unchanged lines hidden (view full) ---

769 goto out;
770
771 mp = br_multicast_new_group(br, port, group);
772 err = PTR_ERR(mp);
773 if (IS_ERR(mp))
774 goto err;
775
776 if (!port) {
776 mp->host_joined = true;
777 if (!mp->host_joined) {
778 mp->host_joined = true;
779 br_mdb_notify(br->dev, NULL, &mp->addr, RTM_NEWMDB, 0);
780 }
777 mod_timer(&mp->timer, now + br->multicast_membership_interval);
778 goto out;
779 }
780
781 for (pp = &mp->ports;
782 (p = mlock_dereference(*pp, br)) != NULL;
783 pp = &p->next) {
784 if (br_port_group_equal(p, port, src))

--- 1854 unchanged lines hidden ---
781 mod_timer(&mp->timer, now + br->multicast_membership_interval);
782 goto out;
783 }
784
785 for (pp = &mp->ports;
786 (p = mlock_dereference(*pp, br)) != NULL;
787 pp = &p->next) {
788 if (br_port_group_equal(p, port, src))

--- 1854 unchanged lines hidden ---