(usagi-users 03388) Re: MLDv2 linux implementation questions
Hoerdt Mickael <[email protected]>
| Newsgroups | gmane.linux.ipv6.usagi.users |
|---|---|
| Message-ID | <[email protected]> |
Thanks to you, I actually can't do this because I'm joining a dynamic set of (S,G), (S1,G),(S2,G), ...(Sn,G) channels, so leaving all the G group would cancel all the trafic coming from others sources, which is not what I want. Hoerdt Mickaël David Stevens wrote: >Hoerdt, > Thanks for the program, I've reproduced the problem, and >it appears to be a long-standing bug in the multicast code. Using >source filters just makes it happen sooner. > I'll work on a patch to fix this issue; in the meantime, you >can avoid it by doing a regular "leave group" on the group >address, rather than the delta-based MCAST_LEAVE_SOURCE_GROUP, >which will not delete the existing membership. > > +-DLS > >gory details, if you're interested: > The "join" code does not check if you have already >joined the same group on that socket, but allocates a new >multicast structure (and filter too, in your case) for every join. >The "leave"'s you're doing delete the source filter entry, but >do not delete the multicast group membership, only add an >"INCLUDE,empty" filter. > So, each iteration allocates a new multicast group >structure and source filter associated with the socket, until >you run out of space. > Fix should be to check if the socket is already a member >of the group and don't allocate a new multicast address >structure if it is. > Pre-MLDv2, a series of joins would result in the >same problem, but would've taken longer since there is >no source filter allocation to go with the multicast structures >it is allocating. > > > >