|
Karlis,
I was able to reproduce your problem, finally. Your patch does have
a couple problems, though. First, the igmpv3_del_delrec() call should be there
whether or not the interface is IFF_UP (to prevent a memory leak) and second,
portions of igmp_group_added should still be run when the interface is down,
so that the group will properly be joined when the interface is brought up.
I think the patch below fixes the problem. Thanks for reporting it!
+-DLS
--- linux-2.6.3-rc4/net/ipv4/igmp.c 2004-02-17 12:19:51.000000000 -0800
+++ linux-2.6.3-rc4F1/net/ipv4/igmp.c 2004-02-17 13:25:39.334792760 -0800
@@ -1067,7 +1067,7 @@
reporter = im->reporter;
igmp_stop_timer(im);
- if (!in_dev->dead) {
+ if (!in_dev->dead && (in_dev->dev->flags & IFF_UP)) {
if (IGMP_V1_SEEN(in_dev))
goto done;
if (IGMP_V2_SEEN(in_dev)) {
@@ -1098,7 +1098,7 @@
if (im->multiaddr == IGMP_ALL_HOSTS)
return;
- if (in_dev->dead)
+ if (in_dev->dead || !(in_dev->dev->flags & IFF_UP))
return;
if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) {
spin_lock_bh(&im->lock);
(See attached file: igmpf1.patch)
igmpf1.patch
Description: Binary data
|