Bruce M Simpson 71498f308b Import rewrite of IPv4 socket multicast layer to support source-specific
and protocol-independent host mode multicast. The code is written to
accomodate IPv6, IGMPv3 and MLDv2 with only a little additional work.

This change only pertains to FreeBSD's use as a multicast end-station and
does not concern multicast routing; for an IGMPv3/MLDv2 router
implementation, consider the XORP project.

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

Summary
 * IPv4 multicast socket processing is now moved out of ip_output.c
   into a new module, in_mcast.c.
 * The in_mcast.c module implements the IPv4 legacy any-source API in
   terms of the protocol-independent source-specific API.
 * Source filters are lazy allocated as the common case does not use them.
   They are part of per inpcb state and are covered by the inpcb lock.
 * struct ip_mreqn is now supported to allow applications to specify
   multicast joins by interface index in the legacy IPv4 any-source API.
 * In UDP, an incoming multicast datagram only requires that the source
   port matches the 4-tuple if the socket was already bound by source port.
   An unbound socket SHOULD be able to receive multicasts sent from an
   ephemeral source port.
 * The UDP socket multicast filter mode defaults to exclusive, that is,
   sources present in the per-socket list will be blocked from delivery.
 * The RFC 3678 userland functions have been added to libc: setsourcefilter,
   getsourcefilter, setipv4sourcefilter, getipv4sourcefilter.
 * Definitions for IGMPv3 are merged but not yet used.
 * struct sockaddr_storage is now referenced from <netinet/in.h>. It
   is therefore defined there if not already declared in the same way
   as for the C99 types.
 * 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
   is available in the -net archives. This only affects individuals
   running RIPv1 or RIPv2 via point-to-point and/or unnumbered interfaces.
 * Make IPv6 detach path similar to IPv4's in code flow; functionally same.
 * Bump __FreeBSD_version to 700048; see UPDATING.

This work was financially supported by another FreeBSD committer.

Obtained from:  p4://bms_netdev
Submitted by:   Wilbert de Graaf (original work)
Reviewed by:    rwatson (locking), silence from fenner,
		net@ (but with encouragement)
2007-06-12 16:24:56 +00:00
..
2005-01-18 20:02:45 +00:00
2007-03-27 17:03:52 +00:00
2005-02-13 22:25:33 +00:00
2005-05-20 12:44:04 +00:00
2005-02-09 18:07:17 +00:00
2005-07-15 15:32:52 +00:00
2005-02-13 22:25:33 +00:00
2005-02-13 22:25:33 +00:00
2007-03-15 04:09:40 +00:00
2006-09-29 16:46:01 +00:00
2005-01-18 20:02:45 +00:00
2005-02-09 18:07:17 +00:00
2006-07-20 09:38:46 +00:00
2005-02-13 22:25:33 +00:00
2006-12-29 13:08:46 +00:00
2007-05-14 18:04:07 +00:00
2006-11-12 21:43:21 +00:00
2007-04-05 21:17:52 +00:00
2006-09-29 17:57:04 +00:00
2006-11-16 13:43:05 +00:00
2006-06-29 09:18:16 +00:00
2005-01-18 20:02:45 +00:00
2006-09-01 09:24:28 +00:00
2006-09-29 17:57:04 +00:00
2005-01-18 20:02:45 +00:00
2007-01-20 23:24:11 +00:00
2005-02-13 22:25:33 +00:00
2006-09-29 17:57:04 +00:00
2006-10-10 07:19:30 +00:00
2006-09-29 17:57:04 +00:00
2005-01-18 20:02:45 +00:00
2006-09-30 19:07:03 +00:00
2007-05-12 12:42:00 +00:00
2005-01-18 20:02:45 +00:00
2007-04-27 12:09:31 +00:00
2006-08-22 08:03:01 +00:00
2007-05-25 16:05:17 +00:00
2005-02-13 22:25:33 +00:00
2005-06-03 15:25:13 +00:00
2005-02-09 18:07:17 +00:00
2005-02-13 22:25:33 +00:00
2007-02-15 02:45:14 +00:00
2007-01-20 08:24:02 +00:00
2005-01-18 20:02:45 +00:00
2006-08-14 08:49:08 +00:00
2007-02-09 09:23:10 +00:00
2007-03-16 12:36:54 +00:00
2006-10-12 01:59:34 +00:00
2006-09-24 09:18:36 +00:00
2007-01-20 08:24:02 +00:00
2006-08-22 08:03:01 +00:00
2006-07-27 14:52:12 +00:00
2005-01-18 20:02:45 +00:00
2006-12-22 23:23:59 +00:00
2007-06-11 04:05:15 +00:00
2005-02-13 22:25:33 +00:00
2005-02-13 22:25:33 +00:00
2006-10-18 12:35:24 +00:00
2007-01-28 08:53:48 +00:00