Source-Specific Multicast for FreeBSD 7.0 -- Phase I This change brings FreeBSD closer to the standard of multicast API support offered by Linux 2.6 and Microsoft Windows "Longhorn". It is mostly of interest to organizations and individuals working with Internet multimedia applications, and IPv4/IPv6 routing, such as ISPs. It represents several weeks of work. The code is written to accomodate IPv6 and MLDv2 with only a little additional work. A regression test is included under src/tools/regression/netinet/ipmulticast in the code drop. The code is available in the bms_netdev branch on perforce.freebsd.org, or as a patch against -CURRENT extracted from this branch (with additional files, relative to src) available at: http://people.freebsd.org/~bms/ssm_phase1.tar The work is based on Wilbert de Graaf's IGMPv3 code drop for FreeBSD 4.6, which is available at: http://www.kloosterhof.com/wilbert/igmpv3.html Net gains: * IPv4 multicast socket processing is now moved out of ip_output.c into a new module, in_mcast.c, which should be a win for maintainability. * ip_mreqn obtained from Linux to enable an IPv4 multicast client to specify an interface by index (deals with point-to-point and unnumbered interfaces) * RFC 3678 API support. Obsoleted/affected subsystems: * The RFC 1724 hack (specify 0.0.0.0/8 addresses to IP_MULTICAST_IF which are then interpreted as interface indexes) is now deprecated. * A patch for the Rhyolite.com routed in the FreeBSD base system has been written. Testing by those using IPv4 Router Discovery and/or RIPv2 is solicited. * The reason for this hack's existence is to do with how the BSD stack has traditionally done lookups against interfaces by address, which causes problems with point-to-point and unnumbered interfaces. * The protocol-independent APIs enable groups to be joined for receive on such interfaces; however, they do not address the issue of the legacy API socket option IP_MULTICAST_IF. The addition of ip_mreqn works around this limitation in the legacy API. Work for Phase 2: * Support SSM on raw IPv4 sockets. * Merge of IGMPv3 host-mode protocol support for IPv4. Work for Phase 3: * Make IPv6 use the common multicast socket infrastructure. * Support SSM on IPv6 UDP and raw sockets. * Merge of MLDv2 host-mode protocol support for IPv6.