freebsd-nq/sys/netinet
Gleb Smirnoff 779f106aa1 Listening sockets improvements.
o Separate fields of struct socket that belong to listening from
  fields that belong to normal dataflow, and unionize them.  This
  shrinks the structure a bit.
  - Take out selinfo's from the socket buffers into the socket. The
    first reason is to support braindamaged scenario when a socket is
    added to kevent(2) and then listen(2) is cast on it. The second
    reason is that there is future plan to make socket buffers pluggable,
    so that for a dataflow socket a socket buffer can be changed, and
    in this case we also want to keep same selinfos through the lifetime
    of a socket.
  - Remove struct struct so_accf. Since now listening stuff no longer
    affects struct socket size, just move its fields into listening part
    of the union.
  - Provide sol_upcall field and enforce that so_upcall_set() may be called
    only on a dataflow socket, which has buffers, and for listening sockets
    provide solisten_upcall_set().

o Remove ACCEPT_LOCK() global.
  - Add a mutex to socket, to be used instead of socket buffer lock to lock
    fields of struct socket that don't belong to a socket buffer.
  - Allow to acquire two socket locks, but the first one must belong to a
    listening socket.
  - Make soref()/sorele() to use atomic(9).  This allows in some situations
    to do soref() without owning socket lock.  There is place for improvement
    here, it is possible to make sorele() also to lock optionally.
  - Most protocols aren't touched by this change, except UNIX local sockets.
    See below for more information.

o Reduce copy-and-paste in kernel modules that accept connections from
  listening sockets: provide function solisten_dequeue(), and use it in
  the following modules: ctl(4), iscsi(4), ng_btsocket(4), ng_ksocket(4),
  infiniband, rpc.

o UNIX local sockets.
  - Removal of ACCEPT_LOCK() global uncovered several races in the UNIX
    local sockets.  Most races exist around spawning a new socket, when we
    are connecting to a local listening socket.  To cover them, we need to
    hold locks on both PCBs when spawning a third one.  This means holding
    them across sonewconn().  This creates a LOR between pcb locks and
    unp_list_lock.
  - To fix the new LOR, abandon the global unp_list_lock in favor of global
    unp_link_lock.  Indeed, separating these two locks didn't provide us any
    extra parralelism in the UNIX sockets.
  - Now call into uipc_attach() may happen with unp_link_lock hold if, we
    are accepting, or without unp_link_lock in case if we are just creating
    a socket.
  - Another problem in UNIX sockets is that uipc_close() basicly did nothing
    for a listening socket.  The vnode remained opened for connections.  This
    is fixed by removing vnode in uipc_close().  Maybe the right way would be
    to do it for all sockets (not only listening), simply move the vnode
    teardown from uipc_detach() to uipc_close()?

Sponsored by:		Netflix
Differential Revision:	https://reviews.freebsd.org/D9770
2017-06-08 21:30:34 +00:00
..
cc Fix a variety of cosmetic typos and misspellings 2017-01-15 18:00:45 +00:00
khelp Remove "long" variables from the TCP stack (not including the modular 2016-10-06 16:28:34 +00:00
libalias ipfw nat and natd support multiple aliasing instances with "nat global" feature 2017-05-10 19:41:52 +00:00
tcp_stacks Improve comments to describe what the code does. 2017-06-01 15:11:18 +00:00
accf_data.c
accf_dns.c
accf_http.c
icmp6.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
icmp_var.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
if_ether.c Fix the L2 address printed in the "arp: %s moved from %*D" message. 2017-03-11 04:57:52 +00:00
if_ether.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
igmp_var.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
igmp.c Add some ntohl() love to r315277 2017-03-14 20:57:54 +00:00
igmp.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
in_cksum.c Remove register keyword from sys/ and ANSIfy prototypes 2017-05-17 00:34:34 +00:00
in_debug.c
in_fib.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
in_fib.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
in_gif.c
in_jail.c Allow explicitly assigned IPv4 loopback address to be used in jails 2017-03-31 00:41:54 +00:00
in_kdtrace.c Use estimated RTT for receive buffer auto resizing instead of timestamps 2017-04-10 08:19:35 +00:00
in_kdtrace.h Use estimated RTT for receive buffer auto resizing instead of timestamps 2017-04-10 08:19:35 +00:00
in_mcast.c Add missing braces around MCAST_EXCLUDE check when KTR support is 2017-05-13 18:41:24 +00:00
in_pcb.c o Rearrange struct inpcb fields to optimize the TCP output code path 2017-05-24 17:47:16 +00:00
in_pcb.h o Rearrange struct inpcb fields to optimize the TCP output code path 2017-05-24 17:47:16 +00:00
in_pcbgroup.c Unbreak the RSS/PCBGROUp build. 2016-03-31 00:53:23 +00:00
in_prot.c Remove BSD and USL copyright and update license block in in_prot.c, as the 2016-07-28 18:39:30 +00:00
in_proto.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
in_rmx.c Code duplication but rib_head is special. Not found an easy way to go 2016-02-03 21:56:51 +00:00
in_rss.c
in_rss.h
in_systm.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
in_var.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
in.c Remove register keyword from sys/ and ANSIfy prototypes 2017-05-17 00:34:34 +00:00
in.h Make sysctl identifiers for direct netisr queue unique. 2017-04-11 19:20:20 +00:00
ip6.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip_carp.c After the in_control() changes in r257692, an existing address is 2017-01-25 19:04:08 +00:00
ip_carp.h After the in_control() changes in r257692, an existing address is 2017-01-25 19:04:08 +00:00
ip_divert.c Set M_BCAST and M_MCAST flags on mbuf sent via divert socket. 2017-05-17 09:04:09 +00:00
ip_divert.h
ip_dummynet.h Import Dummynet AQM version 0.2.1 (CoDel, FQ-CoDel, PIE and FQ-PIE). 2016-05-26 21:40:13 +00:00
ip_ecn.c
ip_ecn.h
ip_encap.c Remove sys/eventhandler.h from net/route.h 2016-01-09 09:34:39 +00:00
ip_encap.h
ip_fastfwd.c When we are sending IP fragments, update ip pointers in IP_PROBE() for 2016-12-29 19:57:46 +00:00
ip_fw.h Add O_EXTERNAL_DATA opcode support. 2017-04-03 02:44:40 +00:00
ip_gre.c
ip_icmp.c Enforce the limit on ICMP messages before doing work to formulate the 2017-05-30 14:32:44 +00:00
ip_icmp.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip_id.c Replace a number of conflations of mp_ncpus and mp_maxid with either 2016-07-06 14:09:49 +00:00
ip_input.c Make sysctl identifiers for direct netisr queue unique. 2017-04-11 19:20:20 +00:00
ip_mroute.c Add some ntohl() love to r315277 2017-03-14 20:57:54 +00:00
ip_mroute.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip_options.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip_options.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip_output.c Fix reference count leak with L2 caching. 2017-03-25 15:06:28 +00:00
ip_reass.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip_var.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ip.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
pim_var.h
pim.h
raw_ip.c Reduce in_pcbinfo_init() by two params. No users supply any flags to this 2017-05-15 21:58:36 +00:00
sctp_asconf.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_asconf.h Whitespace changes. 2016-12-06 10:21:25 +00:00
sctp_auth.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_auth.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_bsd_addr.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_bsd_addr.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_cc_functions.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_constants.h Cleanup the names of SSN, SID, TSN, FSN, PPID and MID. 2016-12-07 19:30:59 +00:00
sctp_crc32.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_crc32.h Whitespace changes. 2016-12-06 10:21:25 +00:00
sctp_dtrace_declare.h
sctp_dtrace_define.h This is work done by Michael Tuexen and myself at the IETF. This 2016-04-07 09:10:34 +00:00
sctp_header.h Cleanup the names of SSN, SID, TSN, FSN, PPID and MID. 2016-12-07 19:30:59 +00:00
sctp_indata.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_indata.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_input.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
sctp_input.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_lock_bsd.h netinet/sctp*: minor spelling fixes in comments. 2016-05-02 20:56:11 +00:00
sctp_os_bsd.h Use the SCTP_PCB_FLAGS_ACCEPTING flags to check for listeners. 2017-05-26 16:29:00 +00:00
sctp_os.h
sctp_output.c Use the SCTP_PCB_FLAGS_ACCEPTING flags to check for listeners. 2017-05-26 16:29:00 +00:00
sctp_output.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_pcb.c The desired lock here is socket buffer, not socket. 2017-06-08 06:34:09 +00:00
sctp_pcb.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_peeloff.c
sctp_peeloff.h Whitespace changes. 2016-12-06 10:21:25 +00:00
sctp_ss_functions.c Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_structs.h Whitespace changes. 2016-12-26 11:06:41 +00:00
sctp_syscalls.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
sctp_sysctl.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
sctp_sysctl.h Retire net.inet.sctp.strict_sacks and net.inet.sctp.strict_data_order 2016-05-12 16:34:59 +00:00
sctp_timer.c Don't set the DF-bit on timer based retransmissions. 2017-04-29 09:57:27 +00:00
sctp_timer.h Code cleanup which will silence a warning in PVS / D5245. 2016-02-17 18:04:22 +00:00
sctp_uio.h Whitespace changes. 2016-12-06 10:21:25 +00:00
sctp_usrreq.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
sctp_var.h Use consistently uint32_t for mtu values. 2017-04-26 19:26:40 +00:00
sctp.h This is work done by Michael Tuexen and myself at the IETF. This 2016-04-07 09:10:34 +00:00
sctputil.c This code was missing socket unlock and socket buffer lock, but it 2017-06-08 06:37:11 +00:00
sctputil.h Allow SCTP to use the hostcache. 2017-04-29 19:20:50 +00:00
siftr.c Use SI_SUB_LAST instead of SI_SUB_SMP as the "catch-all" subsystem. 2016-03-11 23:18:06 +00:00
tcp_debug.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
tcp_debug.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
tcp_fastopen.c Fix VIMAGE-related bugs in TFO. The autokey callout vnet context was 2017-02-03 17:02:57 +00:00
tcp_fastopen.h Implementation of server-side TCP Fast Open (TFO) [RFC7413]. 2015-12-24 19:09:48 +00:00
tcp_fsm.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
tcp_hostcache.c Use inet_ntoa_r() instead of inet_ntoa() throughout the kernel 2017-02-16 20:47:41 +00:00
tcp_hostcache.h Remove "long" variables from the TCP stack (not including the modular 2016-10-06 16:28:34 +00:00
tcp_input.c Improve comments to describe what the code does. 2017-06-01 15:11:18 +00:00
tcp_lro.c Flush the LRO ctrl as soon as lro_mbufs fills up. There is no need to 2017-04-24 22:35:00 +00:00
tcp_lro.h tcp/lro: Implement hash table for LRO entries. 2016-08-02 06:36:47 +00:00
tcp_offload.c Augment struct tcpstat with tcps_states[], which is used for book-keeping 2016-01-27 00:45:46 +00:00
tcp_offload.h
tcp_output.c Use estimated RTT for receive buffer auto resizing instead of timestamps 2017-04-10 08:19:35 +00:00
tcp_pcap.c The TCPPCAP debugging feature caches recently-used mbufs for use in 2016-07-06 16:17:13 +00:00
tcp_pcap.h The TCPPCAP debugging feature caches recently-used mbufs for use in 2016-07-06 16:17:13 +00:00
tcp_reass.c There is no good reason for TCP reassembly zone to be UMA_ZONE_NOFREE. 2017-05-10 23:32:31 +00:00
tcp_sack.c Remove a KASSERT which is not always true. 2016-12-25 17:37:18 +00:00
tcp_seq.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
tcp_subr.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
tcp_syncache.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
tcp_syncache.h Fix the ICMP6 handling for TCP. 2017-06-03 21:53:58 +00:00
tcp_timer.c Hide struct inpcb, struct tcpcb from the userland. 2017-03-21 06:39:49 +00:00
tcp_timer.h Hide struct inpcb, struct tcpcb from the userland. 2017-03-21 06:39:49 +00:00
tcp_timewait.c Listening sockets improvements. 2017-06-08 21:30:34 +00:00
tcp_usrreq.c The connect() system call should return -1 and set errno to EAFNOSUPPORT 2017-05-22 15:29:10 +00:00
tcp_var.h Add the infrastructure to support loading multiple versions of TCP 2017-06-08 20:41:28 +00:00
tcp.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
tcpip.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
toecore.c This change re-adds L2 caching for TCP and UDP, as originally added in D4306 2016-06-02 17:51:29 +00:00
toecore.h
udp_usrreq.c Reduce in_pcbinfo_init() by two params. No users supply any flags to this 2017-05-15 21:58:36 +00:00
udp_var.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
udp.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
udplite.h