CVSROOT:        /cvs
Module name:    src
Changes by:     [email protected]   2026/03/22 17:14:00

Modified files:
        sys/net        : if.c if_var.h 
        sys/netinet    : igmp.c in.c in_var.h 
        sys/netinet6   : in6.c in6_var.h mld6.c 

Log message:
Protect IGMP and MLD6 fast timer with rwlock.

Multicast interface addresses for IPv4 and IPv6 get their own per
interface lock.  Protect the TAILQ if_maddrlist with rwlock
if_maddrlock.  Also struct in_multi and in6_multi use this lock for
their state and timer.  Sleeps in malloc(9) are possible.  Run IGMP
and MLD6 fast timeout with shared instead of exclusive net lock.

To prevent calling ip_output() or ip6_output() while holding the
multicast lock, delay igmp_sendpkt() and mld6_sendpkt().  All
information that is needed to create and send a multicast packet
is stored in igmp_pktinfo or mld6_pktinfo.  If necessary, multiple
pktinfo are queued.  After the lock has been released, packes are
sent based on pktinfo.

OK mvs@

Reply via email to