freebsd-dev/sys/netinet
Robert Watson a2dc1f5021 Add helper function ip_findmoptions(), which accepts an inpcb, and attempts
to atomically return either an existing set of IP multicast options for the
PCB, or a newlly allocated set with default values.  The inpcb is returned
locked.  This function may sleep.

Call ip_moptions() to acquire a reference to a PCB's socket options, and
perform the update of the options while holding the PCB lock.  Release the
lock before returning.

Remove garbage collection of multicast options when values return to the
default, as this complicates locking substantially.  Most applications
allocate a socket either to be multicast, or not, and don't tend to keep
around sockets that have previously been used for multicast, then used for
unicast.

This closes a number of race conditions involving multiple threads or
processes modifying the IP multicast state of a socket simultaenously.

MFC after:	7 days
2005-08-09 17:19:21 +00:00
..
libalias Libalias incorrectly applies proxy rules to the global divert 2005-06-27 22:21:42 +00:00
accf_data.c add missing #include <sys/module.h> 2004-05-30 20:27:19 +00:00
accf_http.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
icmp6.h scope cleanup. with this change 2005-07-25 12:31:43 +00:00
icmp_var.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
if_atm.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
if_atm.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
if_ether.c In preparation for fixing races in ARP (and probably in other 2005-08-09 08:39:56 +00:00
if_ether.h Add CARP (Common Address Redundancy Protocol), which allows multiple 2005-02-22 13:04:05 +00:00
igmp_var.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
igmp.c Introduce in_multi_mtx, which will protect IPv4-layer multicast address 2005-08-03 19:29:47 +00:00
igmp.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
in_cksum.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
in_gif.c Fix IP(v6) over IP tunneling most likely broken with ifnet changes. 2005-06-20 08:39:30 +00:00
in_gif.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
in_pcb.c Remove no-op spl references in in_pcb.c, since in_pcb locking has been 2005-07-19 12:24:27 +00:00
in_pcb.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
in_proto.c Export pfsyncstats via sysctl "net.inet.pfsync" in order to print them with 2005-07-14 22:22:51 +00:00
in_rmx.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
in_systm.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
in_var.h Introduce in_multi_mtx, which will protect IPv4-layer multicast address 2005-08-03 19:29:47 +00:00
in.c Introduce in_multi_mtx, which will protect IPv4-layer multicast address 2005-08-03 19:29:47 +00:00
in.h Add CARP (Common Address Redundancy Protocol), which allows multiple 2005-02-22 13:04:05 +00:00
ip6.h move RFC3542 related definitions into ip6.h. 2005-07-20 10:30:52 +00:00
ip_carp.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
ip_carp.h Add CARP (Common Address Redundancy Protocol), which allows multiple 2005-02-22 13:04:05 +00:00
ip_divert.c In div_output() explicitly set m->m_nextpkt to NULL. If divert socket 2005-05-13 11:44:37 +00:00
ip_divert.h Convert IPDIVERT into a loadable module. This makes use of the dynamic loadability 2004-10-19 21:14:57 +00:00
ip_dummynet.c Add dummynet(4) support to if_bridge, this code is largely based on bridge.c. 2005-06-10 01:25:22 +00:00
ip_dummynet.h Add dummynet(4) support to if_bridge, this code is largely based on bridge.c. 2005-06-10 01:25:22 +00:00
ip_ecn.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_ecn.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_encap.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_encap.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_fastfwd.c Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and 2005-08-09 10:20:02 +00:00
ip_fw2.c include scope6_var.h for in6_clearscope(). 2005-07-26 00:19:58 +00:00
ip_fw_pfil.c Add IPv6 support to IPFW and Dummynet. 2005-04-18 18:35:05 +00:00
ip_fw.h Add support for IPv4 only rules to IPFW2 now that it supports IPv6 as well. 2005-06-03 01:10:28 +00:00
ip_gre.c Add support for IPv6 over GRE [1]. PR kern/80340 includes the 2005-08-01 08:14:21 +00:00
ip_gre.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_icmp.c Add another step of 1280 (gif(4) tunnels) to ip_next_mtu(). 2005-05-04 13:23:54 +00:00
ip_icmp.h Pass icmp_error() the MTU argument directly instead of 2005-05-04 13:09:19 +00:00
ip_id.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_input.c Introduce in_multi_mtx, which will protect IPv4-layer multicast address 2005-08-03 19:29:47 +00:00
ip_mroute.c Add back missing copyright and license statement. This is identical 2005-06-23 18:42:58 +00:00
ip_mroute.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ip_output.c Add helper function ip_findmoptions(), which accepts an inpcb, and attempts 2005-08-09 17:19:21 +00:00
ip_var.h Check the alignment of the IP header before passing the packet up to the 2005-07-02 23:13:31 +00:00
ip.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
ipprotosw.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
pim_var.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
pim.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
raw_ip.c Slight white space tweak. 2005-06-01 11:38:35 +00:00
tcp_debug.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
tcp_debug.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
tcp_fsm.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
tcp_hostcache.c /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
tcp_input.c Fix for a bug in newreno partial ack handling where if a large amount 2005-07-05 19:23:02 +00:00
tcp_output.c Replace t_force with a t_flag (TF_FORCEDATA). 2005-05-21 00:38:29 +00:00
tcp_reass.c Fix for a bug in newreno partial ack handling where if a large amount 2005-07-05 19:23:02 +00:00
tcp_sack.c - Postpone SACK option processing until after PAWS checks. SACK option 2005-06-27 22:27:42 +00:00
tcp_seq.h - Tighten up the Timestamp checks to prevent a spoofed segment from 2005-04-10 05:24:59 +00:00
tcp_subr.c recover the line which was wrongly disappeared during scope cleanup. 2005-08-01 12:08:49 +00:00
tcp_syncache.c Remove no-op spl's and most comment references to spls, as TCP locking 2005-07-19 12:21:26 +00:00
tcp_timer.c Remove no-op spl's and most comment references to spls, as TCP locking 2005-07-19 12:21:26 +00:00
tcp_timer.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
tcp_timewait.c recover the line which was wrongly disappeared during scope cleanup. 2005-08-01 12:08:49 +00:00
tcp_usrreq.c scope cleanup. with this change 2005-07-25 12:31:43 +00:00
tcp_var.h - Postpone SACK option processing until after PAWS checks. SACK option 2005-06-27 22:27:42 +00:00
tcp.h Rewrite of tcp_sack_option(). Kentaro Kurahone (NetBSD) pointed out 2005-05-23 19:22:48 +00:00
tcpip.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
udp_usrreq.c De-spl UDP. 2005-06-01 11:24:00 +00:00
udp_var.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00
udp.h /* -> /*- for license, minor formatting changes 2005-01-07 01:45:51 +00:00