freebsd-skq/lib
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
..
bind Remove the special atomic.h case for arm, and allow it to use 2007-06-05 22:17:16 +00:00
csu Fix TLS on sparc64 for statically and dynamically linked binaries 2006-10-08 02:50:34 +00:00
libalias Fix a regression: let natd load libalias modules before /usr is mounted 2006-10-08 14:02:00 +00:00
libarchive Don't lose leading '/' for pathnames exactly 101 bytes long. 2007-06-11 05:17:30 +00:00
libatm Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libautofs Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libbegemot Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libbluetooth Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libbsm Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libbsnmp
libbz2 Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libc Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
libc_r Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libcalendar
libcam 2nd and final commit that moves us to CAM_NEW_TRAN_CODE 2006-11-02 00:54:38 +00:00
libcom_err
libcompat Remove California Regent's clause 3, per letter 2007-01-09 01:02:06 +00:00
libcrypt Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libdevinfo Markup fixes. 2006-09-17 21:27:35 +00:00
libdevstat Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libdisk unbreak build for sparc64 etc. 2006-10-09 05:12:54 +00:00
libedit Merge NetBSD changes, among them: 2007-06-10 19:06:09 +00:00
libelf Use C comments since we now preprocess these files with CPP. 2007-04-29 14:05:22 +00:00
libexpat Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libfetch Enable FTP_COMBINE_CWDS. 2007-05-24 20:28:14 +00:00
libftpio Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libgeom Remove parameter names from prototypes to avoid namespace issues. 2007-05-06 10:00:27 +00:00
libgpib Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libgssapi Add include directives for string.h and stdlib.h to get proper function 2007-04-04 02:40:59 +00:00
libipsec Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libipx Remove California Regent's clause 3, per letter 2007-01-09 01:02:06 +00:00
libkiconv Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libkse Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libkvm - Work-around the already partially broken rusage support in kvm by 2007-06-01 04:14:57 +00:00
libmagic FreeBSD has <limits.h>. 2007-05-24 22:10:22 +00:00
libmd Use unsigned comparisons. Prior to this commit, SHA1_Update and 2007-05-14 05:00:37 +00:00
libmemstat Make pointer argument to kread_string() const since the kernel structure 2007-05-21 18:16:04 +00:00
libmilter New files in sendmail 8.14.1 2007-04-09 01:45:30 +00:00
libmp Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libncp Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libnetgraph Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libngatm Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libopie Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libpam Now pam_nologin(8) will provide an account management function 2007-06-10 18:57:20 +00:00
libpcap Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libpmc Fix a bug in the description of the "p6-div" event. [1] 2007-04-12 09:16:54 +00:00
libpthread Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libradius Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
librpcsvc Reimplementation of world/kernel build options. For details, see: 2006-03-17 18:54:44 +00:00
librt Enable symbol versioning by default. Use WITHOUT_SYMVER to disable it. 2007-05-13 14:12:40 +00:00
libsbuf
libsdp Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libsm New files in sendmail 8.14.1 2007-04-09 01:45:30 +00:00
libsmb Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libsmdb
libsmutil
libstand Cast away const qualifier to squash GCC warning. 2007-04-04 03:29:02 +00:00
libtacplus Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libtelnet Stop enforcing dependencies between MK_* options at Makefile level. 2006-07-31 13:29:36 +00:00
libthr Set warning level to 2. 2007-06-08 02:21:13 +00:00
libthread_db Include string.h for memcpy() and memcmp(). 2007-05-25 13:43:14 +00:00
libufs The ufs_disk_fillout(3) can take special device name (with or without /dev/ 2007-03-16 03:13:28 +00:00
libugidfw Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libusbhid Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libutil Nit: avoid shadowing truncate(2) with a local variable. 2007-05-23 12:09:33 +00:00
libvgl Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libwrap Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
liby Remove California Regent's clause 3, per letter 2007-01-09 01:02:06 +00:00
libypclnt Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00
libz Resolve conflicts. 2006-03-23 14:09:21 +00:00
msun Fix an aliasing bug which was finally detected by gcc-4.2. fdlibm has 2007-06-11 07:48:52 +00:00
ncurses - When I introduce wide character enabled ncurses into base, all headers 2007-05-25 02:27:46 +00:00
Makefile Make sure libc is installed before all other shared libraries. Other 2007-05-19 04:55:14 +00:00
Makefile.inc Bump library versions in preparation for 7.0. 2007-05-21 02:49:08 +00:00