Subject: Luigi Rizzo: IGMP leave message lost due to driver resets..
To: None <tech-net@netbsd.org>
From: Bill Sommerfeld <sommerfeld@orchard.arlington.ma.us>
List: tech-net
Date: 04/06/1999 13:36:04
Seen over on end2end-interest.  It would appear that this affects
NetBSD since in in_delmulti, we call igmp_leavegroup() before passing
the SIOCDELMULTI to the underlying interface..

------- Forwarded Message

From: Luigi Rizzo <luigi@labinfo.iet.unipi.it>
Message-Id: <199904061046.MAA24277@labinfo.iet.unipi.it>
Subject: is there any list for IGMP related discussion ?
To: end2end-interest@ISI.EDU
Date: Tue, 6 Apr 1999 12:46:34 +0200 (MET DST)
Content-Type: text

Hi,

sorry if this list is not appropriate, but i wonder if there is
any better one for IGMP-related discussion. The reason i am asking
is the following.

While doing some medium-scale experiments with an application
causing frequent join/leave on multicast groups, I noticed that
despite all of my systems (about 25 machines running FreeBSD 3.1R
and the same application code on a local network) were using IGMPv2,
quite often IGMP LEAVE messages were not generated when instead
they should.

Browsing through the FreeBSD sources i found what seems to be a reasonable
explaination:

when a host wants to leave a group, it first sends an IGMP LEAVE
msg (if allowed to -- i.e. it is the one who last responded to the membership
query), _then_ it immediately removes the multicast address from the
list of addresses for the interface. Because in many cases multicast
addresses are handled with a hash table, removing one address could
be done by resetting the interface, and this kills any pending
transmission (depending on the driver, this might affect only pkts
queued or also those partly on the wire).

As the send_pkt() call is asynchronous, the expected IGMP LEAVE
msg might be one of the casualties, and you can easily imagine the effect.

While the fix might be relatively simple (swap the order of the
above operations, because the address filter reprogramming is
synchronous), this "bug" raises a few issues e.g.:

+ how many systems suffer of a similar behaviour -- both open source and not.
+ considering the possibility of such problems, i wonder if it would not
  be better e.g. in IGMPv2, to allow any host to send any IGMP LEAVE msg,
  irrespective of whether or not it was the last one to reply.

	cheers
	luigi
- -----------------------------------+-------------------------------------
  Luigi RIZZO                      .
  EMAIL: luigi@iet.unipi.it        . Dip. di Ing. dell'Informazione
  http://www.iet.unipi.it/~luigi/  . Universita` di Pisa
  TEL/FAX: +39-050-568.533/522     . via Diotisalvi 2, 56126 PISA (Italy)
- -----------------------------------+-------------------------------------

------- End of Forwarded Message