freebsd-skq/sys
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
..
amd64 Add nfe(4) to the list of drivers supported by GENERIC kernel. 2007-06-12 02:24:30 +00:00
arm Introduce pmap_kenter_supersection(), which maps 16MB super-sections into 2007-06-11 21:29:26 +00:00
boot MFp4: add FireWire/dcons support in loader for i386/amd64. 2007-05-29 14:35:57 +00:00
bsm Change $P4$ ID strings to P4 ID strings so that they are not auto-expanded 2007-04-17 12:27:08 +00:00
cam Commit for Nate his "guidelines for submitting quirks". 2007-06-10 04:31:55 +00:00
cddl Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
coda Revert UF_OPENING workaround for CURRENT. 2007-05-31 11:51:53 +00:00
compat Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
conf Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
contrib Pointer to an ICMP header was getting left behind after doing a pullup. 2007-06-09 09:28:36 +00:00
crypto Integrate the Camellia Block Cipher. For more information see RFC 4132 2007-05-09 19:37:02 +00:00
ddb
dev Expand USB_ATTACH_{ERROR,SUCCESS}_RETURN inline and eliminate from 2007-06-12 15:37:19 +00:00
fs Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
gdb Add kdb_cpu_sync_icache(), intended to synchronize instruction 2007-06-09 21:55:17 +00:00
geom Prefix unknown (i.e. un-aliased) partition types with '!'. This is 2007-06-06 05:06:14 +00:00
gnu Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
i4b Tell the user when the setup of the interrupt handler failed and return 2007-04-01 16:52:54 +00:00
i386 Add nfe(4) to the list of drivers supported by GENERIC kernel. 2007-06-12 02:24:30 +00:00
ia64 Add the machine-specific definitions for configuring the new physical 2007-06-10 23:39:07 +00:00
isa Despite several examples in the kernel, the third argument of 2007-06-04 18:25:08 +00:00
kern - Move some common code out of sched_fork_exit() and back into fork_exit(). 2007-06-12 07:47:09 +00:00
libkern strchr() and strrchr() are already present in the kernel, but with less 2007-04-10 21:42:12 +00:00
modules Add new files in the net80211 changes. 2007-06-11 07:26:35 +00:00
net non-functional cleanup 2007-06-12 07:29:11 +00:00
net80211 Prefer __packed to __attribute__((__packed__)). 2007-06-11 19:34:53 +00:00
netatalk Reduce network stack oddness: implement .pru_sockaddr and .pru_peeraddr 2007-05-11 10:20:51 +00:00
netatm Fix use after free bug: use temporary variable to hold next entry in linked 2007-04-03 12:45:10 +00:00
netgraph Expand USB_ATTACH_{ERROR,SUCCESS}_RETURN inline and eliminate from 2007-06-12 15:37:19 +00:00
netinet Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
netinet6 Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
netipsec Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
netipx Use ANSI C function declarations throughout netipx. 2007-05-11 10:38:34 +00:00
netkey
netnatm s/destory/destroy/ (except for the code in contrib/). 2007-04-16 12:31:35 +00:00
netncp Commit 14/14 of sched_lock decomposition. 2007-06-05 00:00:57 +00:00
netsmb Commit 14/14 of sched_lock decomposition. 2007-06-05 00:00:57 +00:00
nfs
nfs4client - Move rusage from being per-process in struct pstats to per-thread in 2007-06-01 01:12:45 +00:00
nfsclient Do proper "locking" for missing vmmeters part. 2007-06-04 21:45:18 +00:00
nfsserver Init timespec to zero fo quiesce warnings. 2007-06-10 04:42:20 +00:00
opencrypto Integrate the Camellia Block Cipher. For more information see RFC 4132 2007-05-09 19:37:02 +00:00
pc98 Add wlan_scan_ap and wlan_scan_sta to platforms that include wlan. 2007-06-11 08:26:40 +00:00
pccard
pci Where I previously removed calls to kdb_enter(), now remove include of 2007-05-29 11:28:28 +00:00
powerpc Add kdb_cpu_sync_icache(), intended to synchronize instruction 2007-06-09 21:55:17 +00:00
rpc Move rpc/types.h under sys/, as this is used by ZFS kernel module. 2007-04-10 22:10:16 +00:00
security Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
sparc64 Add wlan_scan_ap and wlan_scan_sta to platforms that include wlan. 2007-06-11 08:26:40 +00:00
sun4v Use default options for default partitioning schemes, rather than 2007-06-11 00:38:06 +00:00
sys Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
tools Catch up with ACPI-CA 20070320 import. 2007-03-22 18:16:43 +00:00
ufs Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
vm Conditionally acquire Giant in vm_contig_launder_page(). 2007-06-11 03:20:16 +00:00
Makefile o Add bsm and security to a list of cscope dirs. 2007-04-14 16:29:15 +00:00