bms ffd77d9ba5 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
..
2006-12-28 04:58:38 +00:00
2007-03-09 14:36:18 +00:00
2007-03-28 07:48:03 +00:00
2007-03-10 07:10:01 +00:00
2007-03-10 07:11:20 +00:00
2007-06-09 21:46:04 +00:00
2006-09-25 15:06:24 +00:00
2006-12-24 19:55:38 +00:00
2006-12-18 15:36:31 +00:00
2006-07-27 14:20:14 +00:00
2006-08-23 12:12:56 +00:00
2007-06-06 02:51:54 +00:00
2006-12-24 14:23:35 +00:00
2006-09-13 05:06:12 +00:00
2007-03-09 12:45:00 +00:00
2007-05-12 12:23:40 +00:00
2007-06-04 01:43:25 +00:00
2006-08-20 15:52:17 +00:00
2006-09-29 15:20:48 +00:00
2006-12-20 16:57:13 +00:00
2006-12-26 10:37:37 +00:00
2006-07-18 10:19:46 +00:00
2007-03-25 18:37:59 +00:00
2006-08-28 08:27:02 +00:00
2006-12-15 14:14:17 +00:00
2007-02-06 08:48:28 +00:00
2007-03-04 08:24:13 +00:00
2006-09-29 15:20:48 +00:00
2006-12-25 20:30:10 +00:00
2007-03-25 18:37:59 +00:00
2007-04-03 19:14:39 +00:00
2006-12-26 12:43:12 +00:00
2006-07-30 07:41:28 +00:00
2006-09-29 15:20:48 +00:00
2007-01-18 09:24:08 +00:00
2006-12-24 19:18:52 +00:00
2007-05-29 05:39:10 +00:00
2006-10-12 21:10:55 +00:00
2007-01-20 08:24:02 +00:00
2007-02-27 12:06:02 +00:00
2007-05-17 00:19:56 +00:00
2006-11-23 05:08:06 +00:00
2006-08-29 18:11:20 +00:00
2006-12-23 19:15:39 +00:00
2006-12-14 19:02:48 +00:00
2006-12-14 00:02:44 +00:00
2006-12-13 12:09:41 +00:00
2006-09-29 15:20:48 +00:00
2006-09-29 15:20:48 +00:00
2006-12-29 13:08:46 +00:00
2006-12-28 10:58:06 +00:00