When removing multicast membership from a socket (ie: IP_DROP_MEMBERSHIP) that has multiple multicast memberships, the internal list of memberships and filters are not kept in sync.
This results in dropped packets that are not delivered to the socket that has the multicast membership. This was experienced with OSPF (running quagga). Besides the obvious non-functional multicast, the following command is another way to see an indication of the problem: > # netstat -s -p ip | grep multicast > 7 packets received for unknown multicast group Patch attached which fixes the problem. Cheers, Stef
--- sys/netinet/in_mcast.c.orig 2009-09-09 19:33:22.000000000 +0000 +++ sys/netinet/in_mcast.c 2009-09-10 05:28:20.000000000 +0000 @@ -2280,7 +2292,9 @@ if (is_final) { - /* Remove the gap in the membership array. */ - for (++idx; idx < imo->imo_num_memberships; ++idx) + /* Remove the gap in the membership and filter array. */ + for (++idx; idx < imo->imo_num_memberships; ++idx) { imo->imo_membership[idx-1] = imo->imo_membership[idx]; + imo->imo_mfilters[idx-1] = imo->imo_mfilters[idx]; + } imo->imo_num_memberships--; }
_______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"