# SPDX-License-Identifier: GPL-2.0-only
#
# DECnet configuration
#
config DECNET
	tristate "DECnet Support"
	help
	  The DECnet networking protocol was used in many products made by
	  Digital (now Compaq).  It provides reliable stream and sequenced
	  packet communications over which run a variety of services similar
	  to those which run over TCP/IP.

	  To find some tools to use with the kernel layer support, please
	  look at Patrick Caulfield's web site:
	  <http://linux-decnet.sourceforge.net/>.

	  More detailed documentation is available in
	  <file:Documentation/networking/decnet.rst>.

	  Be sure to say Y to "/proc file system support" and "Sysctl support"
	  below when using DECnet, since you will need sysctl support to aid
	  in configuration at run time.

	  The DECnet code is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module is called decnet.

config DECNET_ROUTER
	bool "DECnet: router support"
	depends on DECNET
	select FIB_RULES
	help
	  Add support for turning your DECnet Endnode into a level 1 or 2
	  router.  This is an experimental, but functional option.  If you
	  do say Y here, then make sure that you also say Y to "Kernel/User
	  network link driver", "Routing messages" and "Network packet
	  filtering".  The first two are required to allow configuration via
	  rtnetlink (you will need Alexey Kuznetsov's iproute2 package
	  from <ftp://ftp.tux.org/pub/net/ip-routing/>). The "Network packet
	  filtering" option will be required for the forthcoming routing daemon
	  to work.

	  See <file:Documentation/networking/decnet.rst> for more information.
