freebsd-dev/sys/netinet6
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
..
ah6.h
ah_aesxcbcmac.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ah_aesxcbcmac.h
ah_core.c MFC after: 3 days 2007-02-05 11:05:41 +00:00
ah_input.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ah_output.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ah.h
dest6.c
esp6.h
esp_aesctr.c Marked these as packed correctly 2007-01-12 07:20:25 +00:00
esp_aesctr.h
esp_camellia.c Need sys/cdevs.h for the macro FBSDID to work. 2007-05-09 23:19:55 +00:00
esp_camellia.h Integrate the Camellia Block Cipher. For more information see RFC 4132 2007-05-09 19:37:02 +00:00
esp_core.c Integrate the Camellia Block Cipher. For more information see RFC 4132 2007-05-09 19:37:02 +00:00
esp_input.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
esp_output.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
esp_rijndael.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
esp_rijndael.h
esp.h
frag6.c cleanup about the reassembly structures and routine: 2007-06-04 06:06:35 +00:00
icmp6.c - Disabled responding to NI queries from a global address by default as 2007-05-17 21:20:24 +00:00
icmp6.h
in6_cksum.c Marked these as packed correctly 2007-01-12 07:20:25 +00:00
in6_gif.c MFp4: 92972, 98913 + one more change 2006-12-12 12:17:58 +00:00
in6_gif.h
in6_ifattach.c Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
in6_ifattach.h sync with KAME regarding NDP 2005-10-21 16:23:01 +00:00
in6_pcb.c Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
in6_pcb.h Reduce network stack oddness: implement .pru_sockaddr and .pru_peeraddr 2007-05-11 10:20:51 +00:00
in6_proto.c - Disabled responding to NI queries from a global address by default as 2007-05-17 21:20:24 +00:00
in6_rmx.c Complete timebase (time_second -> time_uptime) conversion. 2006-07-05 23:37:21 +00:00
in6_src.c Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
in6_var.h fixed memory leak for IPv6 multicast membership information associated 2007-06-02 08:02:36 +00:00
in6.c fixed memory leak for IPv6 multicast membership information associated 2007-06-02 08:02:36 +00:00
in6.h Import rewrite of IPv4 socket multicast layer to support source-specific 2007-06-12 16:24:56 +00:00
ip6_ecn.h
ip6_forward.c MFp4: 92972, 98913 + one more change 2006-12-12 12:17:58 +00:00
ip6_id.c
ip6_input.c handle IPv6 router alert option contained in an incoming packet per 2007-05-14 17:56:13 +00:00
ip6_mroute.c Add comments about common idioms for cleanup pass at a later date. 2007-02-28 21:58:37 +00:00
ip6_mroute.h Remove code which would never be used, viz a viz Quality-of-Service; 2007-02-28 20:32:25 +00:00
ip6_output.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ip6_var.h cleanup about the reassembly structures and routine: 2007-06-04 06:06:35 +00:00
ip6.h
ip6protosw.h
ipcomp6.h
ipcomp_core.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ipcomp_input.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ipcomp_output.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
ipcomp.h
ipsec6.h
ipsec.c Remove obsolete comment about privileges: SUSER_ALLOWJAIL is no longer set 2007-04-11 16:31:02 +00:00
ipsec.h
mld6_var.h sync with KAME regarding NDP 2005-10-21 16:23:01 +00:00
mld6.c Implement reference counting for ifmultiaddr, in_multi, and in6_multi 2007-03-20 00:36:10 +00:00
nd6_nbr.c some minor modification to the previous commit to sys/netinet6/nd6.c and nd6_nbr.c. 2007-05-05 04:24:01 +00:00
nd6_rtr.c MFp4: 92972, 98913 + one more change 2006-12-12 12:17:58 +00:00
nd6.c Force the alignment of the chars arrays, as they are casted later to 2007-05-21 14:38:20 +00:00
nd6.h sync with KAME regarding NDP 2005-10-21 16:23:01 +00:00
pim6_var.h
pim6.h
raw_ip6.c Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
raw_ip6.h
route6.c Turn off route header processing for now due to issues pointed out 2007-04-23 09:32:04 +00:00
scope6_var.h
scope6.c MFp4: 92972, 98913 + one more change 2006-12-12 12:17:58 +00:00
sctp6_usrreq.c Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
sctp6_var.h - Restructure so bindx functions are not done inline to socket option 2007-06-12 11:21:00 +00:00
tcp6_var.h
udp6_output.c With exception of the if_name() macro, all definitions in net_osdep.h 2006-08-04 21:27:40 +00:00
udp6_usrreq.c Eliminate now-unused SUSER_ALLOWJAIL arguments to priv_check_cred(); in 2007-06-12 00:12:01 +00:00
udp6_var.h