• Mike Hibler's avatar
    Make frisbee more directly IGMP (v2) aware. · 66e07584
    Mike Hibler authored
    Add "-Q <interval>" option to the master server to allow it to act as an
    IGMP V2 querier in environment where there is otherwise not one. It does
    essentially what the perl-based querier (code.google.com/p/perl-igmp-querier/)
    does, sending out a v2 membership query at the specified interval.
    This eliminates the need to run mrouted in some environments (e.g., elabinelab)
    just to issue IGMP queries. As a result, all the boss-install and elabinelab
    setup related to using mrouted to perform this function has been removed.
    The elabinelab CONFIG_MROUTED option has been changed to CONFIG_QUERIER
    (the former is still recognized and mapped to the latter). The undocumented
    defs-* variable NEEDMROUTED has been changed to NEEDMCQUERIER (the former
    still exists in install/installvars.pm.in but is always set to 0) to more
    accurately reflect the variable's purpose. If NEEDMCQUERIER is set, then
    the mfrisbeed startup script is modified to add the "-Q 30" option.
    The implementation of the client and server "-K <interval>" keep-alive option
    has been changed to directly send IGMP v2 membership reports containing the
    associated MC address.
    Note that the -K options have always been a hack to work-around assorted
    IGMP-related misconfigurations and incompatibilities, and really should
    only be used as a last resort. As implemented, they could cause the host
    machine to be pruned out of other MC groups at the nearest switch since
    they only report membership in the frisbee MC group. With the master server
    acting as an IGMP querier, instances of the frisbee server on that host
    should no longer need to do keep alives. We still have one case where it
    is needed on the client-side: a FreeBSD 8.x or later host connected to an
    IGMPv2-only switch. It appears that the IGMPv3 implementation added in
    FreeBSD 8.x always sends v3 reports, even when the default is configured
    (via sysctl or even recompiling the kernel) as v2.