Re: MLD problems (again)
From: David Stevens <hidden>
Date: 2004-01-07 03:47:09
In some cases, both CHANGE_TO_INCLUDE and ALLOW_NEW_SOURCES can be
included.
It is redundant. (That is why I added the code mentioned in 1) ) When to join SSM (without previous join), is it OK to use
CHANGE_TO_INCLUDE?
ALLOW_NEW_SOURCES seems ordinary (and Implementation of FreeBSD is so). I couldn't judge which should be used (or both OK) from MLDv2 draft.
We ran into something similar during testing. The problem is, I didn't have the option of rewriting all the existing multicast code. So some cases in the full-state interface that ought to be atomic are really a combination of a join and a filter mode change. The reason is because I wanted to use the existing multicast join/leave code, and leave all the existing join/leave callers alone. That can result in an extra change record, since it's indistinguishable from the two-step series of joining a group and changing the filter afterwards. But (at least with the tests we did), the report was still correct-- just not optimal. The easy solution was to write a duplicate version of mc_join_group and mc_leave_group, with some minor changes to them, for use by the source filter callers and use the nearly duplicated versions for the non-source filter callers. I chose not to do that. There is a 1-tick delay before generating the change reports and making that longer might have the desired effect, if all the non-atomic changes complete before the report is sent-- I didn't try that, but it's still not guaranteed to be atomic in the change reports. Alternatively, the source filters (if any) could've been added as an argument for the join and leave functions, which would've meant changing all of the existing calls, too. I didn't like either of those approaches, so I treated a full-state filter with auto-join as the series of join and filter change. I think the approach you're taking may mess up other cases, though, and since the report isn't incorrect, just not optimal, I planned to look at this later to see if I can think of a way around it.
No, mld_ifc_event() is called when the problem occurrs. But because of the wrong mca_sfmode value, mld_send_cr() doen't send MLD listner report.
If the new filter has different sources, and it should, then
it still should result in a change report. But again, I need to look
at it in more detail before suggesting a fix. When I got your initial
report, I wrote a test program and reproduced the problem, and I did
some initial looking at the code but had not yet found what's going
on; I'll get back to it this week.
+-DLS