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 --- |