FreeBSD src
Go to file
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
bin Add tests for ln(1) 2017-06-08 19:09:55 +00:00
cddl New sentences start on new lines, fix two violations 2017-06-08 01:39:17 +00:00
contrib Import mandoc snapshot 2017-06-08 2017-06-08 19:40:00 +00:00
crypto Merge OpenSSL 1.0.2l. 2017-05-25 20:52:16 +00:00
etc Add tests for ln(1) 2017-06-08 19:09:55 +00:00
gnu Remove groff from base 2017-06-07 23:00:34 +00:00
include Use __BSD_VISIBLE test instead checking for absense of _POSIX_SOURCE. 2017-05-24 09:25:13 +00:00
kerberos5 Disconnect heimdal version of qsort.c from build because we are already 2017-05-26 06:09:11 +00:00
lib Import libxo-0.8.0: 2017-06-08 13:04:01 +00:00
libexec Add MLINKS for atf-sh(3) to each of the functions it implements 2017-06-07 21:18:28 +00:00
release Remove groff from base 2017-06-07 23:00:34 +00:00
rescue DIRDEPS_BUILD: Update dependencies. 2017-05-09 01:48:23 +00:00
sbin ipfw.8: Note that the ipfw_nat kernel module must be loaded or that the 2017-06-01 09:14:49 +00:00
secure Merge OpenSSL 1.0.2l. 2017-05-25 20:52:16 +00:00
share Add the infrastructure to support loading multiple versions of TCP 2017-06-08 20:41:28 +00:00
sys Listening sockets improvements. 2017-06-08 21:30:34 +00:00
targets Enable llvm-objdump by default per r310775 2017-05-16 03:12:51 +00:00
tests Import libxo 0.8.0 2017-06-08 12:58:33 +00:00
tools Make the test to leave one connection on the incomplete queue 2017-06-08 06:13:53 +00:00
usr.bin Listening sockets improvements. 2017-06-08 21:30:34 +00:00
usr.sbin Make the VNC authentication build with LibreSSL on HardenedBSD and TrueOS. 2017-06-08 04:54:15 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint phabricator related changes: 2015-04-20 20:33:22 +00:00
COPYRIGHT Bump copyright year. 2016-12-31 12:41:42 +00:00
LOCKS Explicitly require Security Officer's approval for kernel PRNG bits. 2013-09-17 14:19:05 +00:00
MAINTAINERS Due to time constraints remove myself as a vmm(4) maintainer. 2017-04-15 22:42:23 +00:00
Makefile Import mandoc 2017-06-08 2017-06-08 19:29:07 +00:00
Makefile.inc1 Fix src.conf.5 generation 2017-06-08 00:41:25 +00:00
Makefile.libcompat Support skipping 'make obj' tree-walk. 2017-05-09 20:21:38 +00:00
ObsoleteFiles.inc Correct an obsolete path to delete. 2017-06-08 18:20:32 +00:00
README Correct the URL to instructions for updated system sources. 2017-05-15 15:18:36 +00:00
README.md Remove hard line breaks from README.md 2017-03-01 15:39:58 +00:00
UPDATING Remove groff from base 2017-06-07 23:00:34 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

For copyright information, please see the file COPYRIGHT in this directory (additional copyright information also exists for some sources in this tree - please see the specific source directories for more information).

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7) and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html for more information, including setting make(1) variables.

The buildkernel and installkernel targets build and install the kernel and the modules (see below). Please see the top of the Makefile in this directory for more information on the standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process. See build(7), config(8), and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information.

Note: If you want to build and install the kernel with the buildkernel and installkernel targets, you might need to build world before. More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf sub-directory. GENERIC is the default configuration used in release builds. NOTES contains entries and documentation for all possible devices, not just those commonly used.

Source Roadmap:

bin				System/user commands.

cddl			Various commands and libraries under the Common Development  
				and Distribution License.

contrib			Packages contributed by 3rd parties.

crypto			Cryptography stuff (see crypto/README).

etc				Template files for /etc.

gnu				Various commands and libraries under the GNU Public License.  
				Please see gnu/COPYING* for more information.

include			System include files.

kerberos5		Kerberos5 (Heimdal) package.

lib				System libraries.

libexec			System daemons.

release			Release building Makefile & associated tools.

rescue			Build system for statically linked /rescue utilities.

sbin			System commands.

secure			Cryptographic libraries and commands.

share			Shared resources.

sys				Kernel sources.

tests			Regression tests which can be run by Kyua.  See tests/README
				for additional information.

tools			Utilities for regression testing and miscellaneous tasks.

usr.bin			User commands.

usr.sbin		System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html