# SPDX-License-Identifier: GPL-2.0

menu "UML Character Devices"

config STDERR_CONSOLE
	bool "stderr console"
	default y
	help
	  console driver which dumps all printk messages to stderr.

config SSL
	bool "Virtual serial line"
	help
	  The User-Mode Linux environment allows you to create virtual serial
	  lines on the UML that are usually made to show up on the host as
	  ttys or ptys.

	  See <http://user-mode-linux.sourceforge.net/old/input.html> for more
	  information and command line examples of how to use this facility.

	  Unless you have a specific reason for disabling this, say Y.

config NULL_CHAN
	bool "null channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to a device similar to /dev/null.  Data written to it disappears
	  and there is never any data to be read.

config PORT_CHAN
	bool "port channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to host portals.  They may be accessed with 'telnet <host>
	  <port number>'.  Any number of consoles and serial lines may be
	  attached to a single portal, although what UML device you get when
	  you telnet to that portal will be unpredictable.
	  It is safe to say 'Y' here.

config PTY_CHAN
	bool "pty channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to host pseudo-terminals.  Access to both traditional
	  pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled
	  with this option.  The assignment of UML devices to host devices
	  will be announced in the kernel message log.
	  It is safe to say 'Y' here.

config TTY_CHAN
	bool "tty channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to host terminals.  Access to both virtual consoles
	  (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and
	  /dev/pts/*) are controlled by this option.
	  It is safe to say 'Y' here.

config XTERM_CHAN
	bool "xterm channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to xterms.  Each UML device so assigned will be brought up in
	  its own xterm.
	  It is safe to say 'Y' here.

config XTERM_CHAN_DEFAULT_EMULATOR
	string "xterm channel default terminal emulator"
	depends on XTERM_CHAN
	default "xterm"
	help
	  This option allows changing the default terminal emulator.

config NOCONFIG_CHAN
	bool
	default !(XTERM_CHAN && TTY_CHAN && PTY_CHAN && PORT_CHAN && NULL_CHAN)

config CON_ZERO_CHAN
	string "Default main console channel initialization"
	default "fd:0,fd:1"
	help
	  This is the string describing the channel to which the main console
	  will be attached by default.  This value can be overridden from the
	  command line.  The default value is "fd:0,fd:1", which attaches the
	  main console to stdin and stdout.
	  It is safe to leave this unchanged.

config CON_CHAN
	string "Default console channel initialization"
	default "xterm"
	help
	  This is the string describing the channel to which all consoles
	  except the main console will be attached by default.  This value can
	  be overridden from the command line.  The default value is "xterm",
	  which brings them up in xterms.
	  It is safe to leave this unchanged, although you may wish to change
	  this if you expect the UML that you build to be run in environments
	  which don't have X or xterm available.

config SSL_CHAN
	string "Default serial line channel initialization"
	default "pty"
	help
	  This is the string describing the channel to which the serial lines
	  will be attached by default.  This value can be overridden from the
	  command line.  The default value is "pty", which attaches them to
	  traditional pseudo-terminals.
	  It is safe to leave this unchanged, although you may wish to change
	  this if you expect the UML that you build to be run in environments
	  which don't have a set of /dev/pty* devices.

config UML_SOUND
	tristate "Sound support"
	depends on SOUND
	select SOUND_OSS_CORE
	help
	  This option enables UML sound support.  If enabled, it will pull in
	  the UML hostaudio relay, which acts as a intermediary
	  between the host's dsp and mixer devices and the UML sound system.
	  It is safe to say 'Y' here.

endmenu

menu "UML Network Devices"
	depends on NET

# UML virtual driver
config UML_NET
	bool "Virtual network device"
	help
	  While the User-Mode port cannot directly talk to any physical
	  hardware devices, this choice and the following transport options
	  provide one or more virtual network devices through which the UML
	  kernels can talk to each other, the host, and with the host's help,
	  machines on the outside world.

	  For more information, including explanations of the networking and
	  sample configurations, see
	  <http://user-mode-linux.sourceforge.net/old/networking.html>.

	  If you'd like to be able to enable networking in the User-Mode
	  linux environment, say Y; otherwise say N.  Note that you must
	  enable at least one of the following transport options to actually
	  make use of UML networking.

config UML_NET_ETHERTAP
	bool "Ethertap transport (obsolete)"
	depends on UML_NET
	help
	  The Ethertap User-Mode Linux network transport allows a single
	  running UML to exchange packets with its host over one of the
	  host's Ethertap devices, such as /dev/tap0.  Additional running
	  UMLs can use additional Ethertap devices, one per running UML.
	  While the UML believes it's on a (multi-device, broadcast) virtual
	  Ethernet network, it's in fact communicating over a point-to-point
	  link with the host.

	  To use this, your host kernel must have support for Ethertap
	  devices.  Also, if your host kernel is 2.4.x, it must have
	  CONFIG_NETLINK_DEV configured as Y or M.

	  For more information, see
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
	  has examples of the UML command line to use to enable Ethertap
	  networking.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_TUNTAP
	bool "TUN/TAP transport (obsolete)"
	depends on UML_NET
	help
	  The UML TUN/TAP network transport allows a UML instance to exchange
	  packets with the host over a TUN/TAP device.  This option will only
	  work with a 2.4 host, unless you've applied the TUN/TAP patch to
	  your 2.2 host kernel.

	  To use this transport, your host kernel must have support for TUN/TAP
	  devices, either built-in or as a module.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_SLIP
	bool "SLIP transport (obsolete)"
	depends on UML_NET
	help
	  The slip User-Mode Linux network transport allows a running UML to
	  network with its host over a point-to-point link.  Unlike Ethertap,
	  which can carry any Ethernet frame (and hence even non-IP packets),
	  the slip transport can only carry IP packets.

	  To use this, your host must support slip devices.

	  For more information, see
	  <http://user-mode-linux.sourceforge.net/old/networking.html>.
	  has examples of the UML command line to use to enable slip
	  networking, and details of a few quirks with it.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_DAEMON
	bool "Daemon transport (obsolete)"
	depends on UML_NET
	help
	  This User-Mode Linux network transport allows one or more running
	  UMLs on a single host to communicate with each other, but not to
	  the host.

	  To use this form of networking, you'll need to run the UML
	  networking daemon on the host.

	  For more information, see
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
	  has examples of the UML command line to use to enable Daemon
	  networking.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_DAEMON_DEFAULT_SOCK
	string "Default socket for daemon transport"
	default "/tmp/uml.ctl"
	depends on UML_NET_DAEMON
	help
	  This option allows setting the default socket for the daemon
	  transport, normally it defaults to /tmp/uml.ctl.

config UML_NET_VECTOR
	bool "Vector I/O high performance network devices"
	depends on UML_NET
	select MAY_HAVE_RUNTIME_DEPS
	help
	  This User-Mode Linux network driver uses multi-message send
	  and receive functions. The host running the UML guest must have
	  a linux kernel version above 3.0 and a libc version > 2.13.
	  This driver provides tap, raw, gre and l2tpv3 network transports
	  with up to 4 times higher network throughput than the UML network
	  drivers.

config UML_NET_VDE
	bool "VDE transport (obsolete)"
	depends on UML_NET
	depends on !MODVERSIONS
	select MAY_HAVE_RUNTIME_DEPS
	help
	  This User-Mode Linux network transport allows one or more running
	  UMLs on a single host to communicate with each other and also
	  with the rest of the world using Virtual Distributed Ethernet,
	  an improved fork of uml_switch.

	  You must have libvdeplug installed in order to build the vde
	  transport into UML.

	  To use this form of networking, you will need to run vde_switch
	  on the host.

	  For more information, see <http://wiki.virtualsquare.org/>
	  That site has a good overview of what VDE is and also examples
	  of the UML command line to use to enable VDE networking.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_MCAST
	bool "Multicast transport (obsolete)"
	depends on UML_NET
	help
	  This Multicast User-Mode Linux network transport allows multiple
	  UMLs (even ones running on different host machines!) to talk to
	  each other over a virtual ethernet network.  However, it requires
	  at least one UML with one of the other transports to act as a
	  bridge if any of them need to be able to talk to their hosts or any
	  other IP machines.

	  To use this, your host kernel(s) must support IP Multicasting.

	  For more information, see
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
	  has examples of the UML command line to use to enable Multicast
	  networking, and notes about the security of this approach.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_PCAP
	bool "pcap transport (obsolete)"
	depends on UML_NET
	depends on !MODVERSIONS
	select MAY_HAVE_RUNTIME_DEPS
	help
	  The pcap transport makes a pcap packet stream on the host look
	  like an ethernet device inside UML.  This is useful for making
	  UML act as a network monitor for the host.  You must have libcap
	  installed in order to build the pcap transport into UML.

	  For more information, see
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
	  has examples of the UML command line to use to enable this option.

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

config UML_NET_SLIRP
	bool "SLiRP transport (obsolete)"
	depends on UML_NET
	help
	  The SLiRP User-Mode Linux network transport allows a running UML
	  to network by invoking a program that can handle SLIP encapsulated
	  packets.  This is commonly (but not limited to) the application
	  known as SLiRP, a program that can re-socket IP packets back onto
	  he host on which it is run.  Only IP packets are supported,
	  unlike other network transports that can handle all Ethernet
	  frames.  In general, slirp allows the UML the same IP connectivity
	  to the outside world that the host user is permitted, and unlike
	  other transports, SLiRP works without the need of root level
	  privileges, setuid binaries, or SLIP devices on the host.  This
	  also means not every type of connection is possible, but most
	  situations can be accommodated with carefully crafted slirp
	  commands that can be passed along as part of the network device's
	  setup string.  The effect of this transport on the UML is similar
	  that of a host behind a firewall that masquerades all network
	  connections passing through it (but is less secure).

	  NOTE: THIS TRANSPORT IS DEPRECATED AND WILL BE REMOVED SOON!!! Please
	  migrate to UML_NET_VECTOR.

	  If unsure, say N.

	  Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp"

endmenu

config VIRTIO_UML
	bool "UML driver for virtio devices"
	select VIRTIO
	help
	  This driver provides support for virtio based paravirtual device
	  drivers over vhost-user sockets.

config UML_RTC
	bool "UML RTC driver"
	depends on RTC_CLASS
	# there's no use in this if PM_SLEEP isn't enabled ...
	depends on PM_SLEEP
	help
	  When PM_SLEEP is configured, it may be desirable to wake up using
	  rtcwake, especially in time-travel mode. This driver enables that
	  by providing a fake RTC clock that causes a wakeup at the right
	  time.

config UML_PCI_OVER_VIRTIO
	bool "Enable PCI over VIRTIO device simulation"
	# in theory, just VIRTIO is enough, but that causes recursion
	depends on VIRTIO_UML
	select FORCE_PCI
	select UML_IOMEM_EMULATION
	select UML_DMA_EMULATION
	select PCI_MSI
	select PCI_LOCKLESS_CONFIG

config UML_PCI_OVER_VIRTIO_DEVICE_ID
	int "set the virtio device ID for PCI emulation"
	default -1
	depends on UML_PCI_OVER_VIRTIO
	help
	  There's no official device ID assigned (yet), set the one you
	  wish to use for experimentation here. The default of -1 is
	  not valid and will cause the driver to fail at probe.
