# SPDX-License-Identifier: GPL-2.0-only
#
# Unix Domain Sockets
#

config UNIX
	tristate "Unix domain sockets"
	help
	  If you say Y here, you will include support for Unix domain sockets;
	  sockets are the standard Unix mechanism for establishing and
	  accessing network connections.  Many commonly used programs such as
	  the X Window system and syslog use these sockets even if your
	  machine is not connected to any network.  Unless you are working on
	  an embedded system or something similar, you therefore definitely
	  want to say Y here.

	  To compile this driver as a module, choose M here: the module will be
	  called unix.  Note that several important services won't work
	  correctly if you say M here and then neglect to load the module.

	  Say Y unless you know what you are doing.

config UNIX_SCM
	bool
	depends on UNIX
	default y

config	AF_UNIX_OOB
	bool
	depends on UNIX
	default y

config UNIX_DIAG
	tristate "UNIX: socket monitoring interface"
	depends on UNIX
	default n
	help
	  Support for UNIX socket monitoring interface used by the ss tool.
	  If unsure, say Y.
