# SPDX-License-Identifier: GPL-2.0-only
#
# Amateur Radio protocols and AX.25 device configuration
#

menuconfig HAMRADIO
	depends on NET && !S390
	bool "Amateur Radio support"
	help
	  If you want to connect your Linux box to an amateur radio, answer Y
	  here. You want to read <http://www.tapr.org/>
	  and more specifically about AX.25 on Linux
	  <http://www.linux-ax25.org/>.

	  Note that the answer to this question won't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about amateur radio.

comment "Packet Radio protocols"
	depends on HAMRADIO

config AX25
	tristate "Amateur Radio AX.25 Level 2 protocol"
	depends on HAMRADIO
	help
	  This is the protocol used for computer communication over amateur
	  radio. It is either used by itself for point-to-point links, or to
	  carry other protocols such as tcp/ip. To use it, you need a device
	  that connects your Linux box to your amateur radio. You can either
	  use a low speed TNC (a Terminal Node Controller acts as a kind of
	  modem connecting your computer's serial port to your radio's
	  microphone input and speaker output) supporting the KISS protocol or
	  one of the various SCC cards that are supported by the generic Z8530
	  or the DMA SCC driver. Another option are the Baycom modem serial
	  and parallel port hacks or the sound card modem (supported by their
	  own drivers). If you say Y here, you also have to say Y to one of
	  those drivers.

	  Information about where to get supporting software for Linux amateur
	  radio as well as information about how to configure an AX.25 port is
	  contained in the AX25-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. You might also want to
	  check out the file <file:Documentation/networking/ax25.txt> in the
	  kernel source. More information about digital amateur radio in
	  general is on the WWW at
	  <http://www.tapr.org/>.

	  To compile this driver as a module, choose M here: the
	  module will be called ax25.

config AX25_DAMA_SLAVE
	bool "AX.25 DAMA Slave support"
	default y
	depends on AX25
	help
	  DAMA is a mechanism to prevent collisions when doing AX.25
	  networking. A DAMA server (called "master") accepts incoming traffic
	  from clients (called "slaves") and redistributes it to other slaves.
	  If you say Y here, your Linux box will act as a DAMA slave; this is
	  transparent in that you don't have to do any special DAMA
	  configuration. Linux cannot yet act as a DAMA server.  This option
	  only compiles DAMA slave support into the kernel.  It still needs to
	  be enabled at runtime.  For more about DAMA see
	  <http://www.linux-ax25.org>.  If unsure, say Y.

# placeholder until implemented
config AX25_DAMA_MASTER
	bool 'AX.25 DAMA Master support'
	depends on AX25_DAMA_SLAVE && BROKEN
	help
	  DAMA is a mechanism to prevent collisions when doing AX.25
	  networking. A DAMA server (called "master") accepts incoming traffic
	  from clients (called "slaves") and redistributes it to other slaves.
	  If you say Y here, your Linux box will act as a DAMA master; this is
	  transparent in that you don't have to do any special DAMA
	  configuration. Linux cannot yet act as a DAMA server.  This option
	  only compiles DAMA slave support into the kernel.  It still needs to
	  be explicitly enabled, so if unsure, say Y.

config NETROM
	tristate "Amateur Radio NET/ROM protocol"
	depends on AX25
	help
	  NET/ROM is a network layer protocol on top of AX.25 useful for
	  routing.

	  A comprehensive listing of all the software for Linux amateur radio
	  users as well as information about how to configure an AX.25 port is
	  contained in the Linux Ham Wiki, available from
	  <http://www.linux-ax25.org>. You also might want to check out the
	  file <file:Documentation/networking/ax25.txt>. More information about
	  digital amateur radio in general is on the WWW at
	  <http://www.tapr.org/>.

	  To compile this driver as a module, choose M here: the
	  module will be called netrom.

config ROSE
	tristate "Amateur Radio X.25 PLP (Rose)"
	depends on AX25
	help
	  The Packet Layer Protocol (PLP) is a way to route packets over X.25
	  connections in general and amateur radio AX.25 connections in
	  particular, essentially an alternative to NET/ROM.

	  A comprehensive listing of all the software for Linux amateur radio
	  users as well as information about how to configure an AX.25 port is
	  contained in the Linux Ham Wiki, available from
	  <http://www.linux-ax25.org>.  You also might want to check out the
	  file <file:Documentation/networking/ax25.txt>. More information about
	  digital amateur radio in general is on the WWW at
	  <http://www.tapr.org/>.

	  To compile this driver as a module, choose M here: the
	  module will be called rose.

menu "AX.25 network device drivers"
	depends on HAMRADIO && AX25

source "drivers/net/hamradio/Kconfig"

endmenu
