# SPDX-License-Identifier: GPL-2.0-only
config NFS_FS
	tristate "NFS client support"
	depends on INET && FILE_LOCKING && MULTIUSER
	select LOCKD
	select SUNRPC
	select NFS_ACL_SUPPORT if NFS_V3_ACL
	help
	  Choose Y here if you want to access files residing on other
	  computers using Sun's Network File System protocol.  To compile
	  this file system support as a module, choose M here: the module
	  will be called nfs.

	  To mount file systems exported by NFS servers, you also need to
	  install the user space mount.nfs command which can be found in
	  the Linux nfs-utils package, available from http://linux-nfs.org/.
	  Information about using the mount command is available in the
	  mount(8) man page.  More detail about the Linux NFS client
	  implementation is available via the nfs(5) man page.

	  Below you can choose which versions of the NFS protocol are
	  available in the kernel to mount NFS servers.  Support for NFS
	  version 2 (RFC 1094) is always available when NFS_FS is selected.

	  To configure a system which mounts its root file system via NFS
	  at boot time, say Y here, select "Kernel level IP
	  autoconfiguration" in the NETWORK menu, and select "Root file
	  system on NFS" below.  You cannot compile this file system as a
	  module in this case.

	  If unsure, say N.

config NFS_V2
	tristate "NFS client support for NFS version 2"
	depends on NFS_FS
	default y
	help
	  This option enables support for version 2 of the NFS protocol
	  (RFC 1094) in the kernel's NFS client.

	  If unsure, say Y.

config NFS_V3
	tristate "NFS client support for NFS version 3"
	depends on NFS_FS
	default y
	help
	  This option enables support for version 3 of the NFS protocol
	  (RFC 1813) in the kernel's NFS client.

	  If unsure, say Y.

config NFS_V3_ACL
	bool "NFS client support for the NFSv3 ACL protocol extension"
	depends on NFS_V3
	help
	  Some NFS servers support an auxiliary NFSv3 ACL protocol that
	  Sun added to Solaris but never became an official part of the
	  NFS version 3 protocol.  This protocol extension allows
	  applications on NFS clients to manipulate POSIX Access Control
	  Lists on files residing on NFS servers.  NFS servers enforce
	  ACLs on local files whether this protocol is available or not.

	  Choose Y here if your NFS server supports the Solaris NFSv3 ACL
	  protocol extension and you want your NFS client to allow
	  applications to access and modify ACLs on files on the server.

	  Most NFS servers don't support the Solaris NFSv3 ACL protocol
	  extension.  You can choose N here or specify the "noacl" mount
	  option to prevent your NFS client from trying to use the NFSv3
	  ACL protocol.

	  If unsure, say N.

config NFS_V4
	tristate "NFS client support for NFS version 4"
	depends on NFS_FS
	select RPCSEC_GSS_KRB5
	select KEYS
	help
	  This option enables support for version 4 of the NFS protocol
	  (RFC 3530) in the kernel's NFS client.

	  To mount NFS servers using NFSv4, you also need to install user
	  space programs which can be found in the Linux nfs-utils package,
	  available from http://linux-nfs.org/.

	  If unsure, say Y.

config NFS_SWAP
	bool "Provide swap over NFS support"
	default n
	depends on NFS_FS && SWAP
	select SUNRPC_SWAP
	help
	  This option enables swapon to work on files located on NFS mounts.

config NFS_V4_1
	bool "NFS client support for NFSv4.1"
	depends on NFS_V4
	select SUNRPC_BACKCHANNEL
	help
	  This option enables support for minor version 1 of the NFSv4 protocol
	  (RFC 5661) in the kernel's NFS client.

	  If unsure, say N.

config NFS_V4_2
	bool "NFS client support for NFSv4.2"
	depends on NFS_V4_1
	help
	  This option enables support for minor version 2 of the NFSv4 protocol
	  in the kernel's NFS client.

	  If unsure, say N.

config PNFS_FILE_LAYOUT
	tristate
	depends on NFS_V4_1
	default NFS_V4

config PNFS_BLOCK
	tristate
	depends on NFS_V4_1 && BLK_DEV_DM
	default NFS_V4

config PNFS_FLEXFILE_LAYOUT
	tristate
	depends on NFS_V4_1 && NFS_V3
	default NFS_V4

config NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
	string "NFSv4.1 Implementation ID Domain"
	depends on NFS_V4_1
	default "kernel.org"
	help
	  This option defines the domain portion of the implementation ID that
	  may be sent in the NFS exchange_id operation.  The value must be in
	  the format of a DNS domain name and should be set to the DNS domain
	  name of the distribution.
	  If the NFS client is unchanged from the upstream kernel, this
	  option should be set to the default "kernel.org".

config NFS_V4_1_MIGRATION
	bool "NFSv4.1 client support for migration"
	depends on NFS_V4_1
	default n
	help
	  This option makes the NFS client advertise to NFSv4.1 servers that
          it can support NFSv4 migration.

          The NFSv4.1 pieces of the Linux NFSv4 migration implementation are
          still experimental.  If you are not an NFSv4 developer, say N here.

config NFS_V4_SECURITY_LABEL
	bool
	depends on NFS_V4_2 && SECURITY
	default y

config ROOT_NFS
	bool "Root file system on NFS"
	depends on NFS_FS=y && IP_PNP
	help
	  If you want your system to mount its root file system via NFS,
	  choose Y here.  This is common practice for managing systems
	  without local permanent storage.  For details, read
	  <file:Documentation/admin-guide/nfs/nfsroot.rst>.

	  Most people say N here.

config NFS_FSCACHE
	bool "Provide NFS client caching support"
	depends on NFS_FS=m && FSCACHE || NFS_FS=y && FSCACHE=y
	help
	  Say Y here if you want NFS data to be cached locally on disc through
	  the general filesystem cache manager

config NFS_USE_LEGACY_DNS
	bool "Use the legacy NFS DNS resolver"
	depends on NFS_V4
	help
	  The kernel now provides a method for translating a host name into an
	  IP address.  Select Y here if you would rather use your own DNS
	  resolver script.

	  If unsure, say N

config NFS_USE_KERNEL_DNS
	bool
	depends on NFS_V4 && !NFS_USE_LEGACY_DNS
	select DNS_RESOLVER
	default y

config NFS_DEBUG
	bool
	depends on NFS_FS && SUNRPC_DEBUG
	select CRC32
	default y

config NFS_DISABLE_UDP_SUPPORT
       bool "NFS: Disable NFS UDP protocol support"
       depends on NFS_FS
       default y
       help
	 Choose Y here to disable the use of NFS over UDP. NFS over UDP
	 on modern networks (1Gb+) can lead to data corruption caused by
	 fragmentation during high loads.

config NFS_V4_2_READ_PLUS
	bool "NFS: Enable support for the NFSv4.2 READ_PLUS operation"
	depends on NFS_V4_2
	default n
	help
	 This is intended for developers only. The READ_PLUS operation has
	 been shown to have issues under specific conditions and should not
	 be used in production.
