#
# Old ISDN4Linux config
#

config ISDN_PPP
	bool "Support synchronous PPP"
	depends on INET
	select SLHC
	help
	  Over digital connections such as ISDN, there is no need to
	  synchronize sender and recipient's clocks with start and stop bits
	  as is done over analog telephone lines. Instead, one can use
	  "synchronous PPP". Saying Y here will include this protocol. This
	  protocol is used by Cisco and Sun for example. So you want to say Y
	  here if the other end of your ISDN connection supports it. You will
	  need a special version of pppd (called ipppd) for using this
	  feature. See <file:Documentation/isdn/README.syncppp> and
	  <file:Documentation/isdn/syncPPP.FAQ> for more information.

config ISDN_PPP_VJ
	bool "Use VJ-compression with synchronous PPP"
	depends on ISDN_PPP
	help
	  This enables Van Jacobson header compression for synchronous PPP.
	  Say Y if the other end of the connection supports it.

config ISDN_MPP
	bool "Support generic MP (RFC 1717)"
	depends on ISDN_PPP
	help
	  With synchronous PPP enabled, it is possible to increase throughput
	  by bundling several ISDN-connections, using this protocol. See
	  <file:Documentation/isdn/README.syncppp> for more information.

config IPPP_FILTER
	bool "Filtering for synchronous PPP"
	depends on ISDN_PPP
	help
	  Say Y here if you want to be able to filter the packets passing over
	  IPPP interfaces.  This allows you to control which packets count as
	  activity (i.e. which packets will reset the idle timer or bring up
	  a demand-dialled link) and which packets are to be dropped entirely.
	  You need to say Y here if you wish to use the pass-filter and
	  active-filter options to ipppd.

config ISDN_PPP_BSDCOMP
	tristate "Support BSD compression"
	depends on ISDN_PPP
	help
	  Support for the BSD-Compress compression method for PPP, which uses
	  the LZW compression method to compress each PPP packet before it is
	  sent over the wire. The machine at the other end of the PPP link
	  (usually your ISP) has to support the BSD-Compress compression
	  method as well for this to be useful. Even if they don't support it,
	  it is safe to say Y here.

config ISDN_AUDIO
	bool "Support audio via ISDN"
	help
	  If you say Y here, the modem-emulator will support a subset of the
	  EIA Class 8 Voice commands. Using a getty with voice-support
	  (mgetty+sendfax by <gert@greenie.muc.de> with an extension, available
	  with the ISDN utility package for example), you will be able to use
	  your Linux box as an ISDN-answering machine. Of course, this must be
	  supported by the lowlevel driver also. Currently, the HiSax driver
	  is the only voice-supporting driver. See
	  <file:Documentation/isdn/README.audio> for more information.

config ISDN_TTY_FAX
	bool "Support AT-Fax Class 1 and 2 commands"
	depends on ISDN_AUDIO
	help
	  If you say Y here, the modem-emulator will support a subset of the
	  Fax Class 1 and 2 commands. Using a getty with fax-support
	  (mgetty+sendfax, hylafax), you will be able to use your Linux box as
	  an ISDN-fax-machine. This must be supported by the lowlevel driver
	  also. See <file:Documentation/isdn/README.fax> for more information.

config ISDN_X25
	bool "X.25 PLP on top of ISDN"
	depends on X25
	help
	  This feature provides the X.25 protocol over ISDN connections.
	  See <file:Documentation/isdn/README.x25> for more information
	  if you are thinking about using this.


menu "ISDN feature submodules"

config ISDN_DRV_LOOP
	tristate "isdnloop support"
	depends on BROKEN_ON_SMP
	help
	  This driver provides a virtual ISDN card. Its primary purpose is
	  testing of linklevel features or configuration without getting
	  charged by your service-provider for lots of phone calls.
	  You need will need the loopctrl utility from the latest isdn4k-utils
	  package to set up this driver.

config ISDN_DIVERSION
	tristate "Support isdn diversion services"
	help
	  This option allows you to use some supplementary diversion
	  services in conjunction with the HiSax driver on an EURO/DSS1
	  line.

	  Supported options are CD (call deflection), CFU (Call forward
	  unconditional), CFB (Call forward when busy) and CFNR (call forward
	  not reachable). Additionally the actual CFU, CFB and CFNR state may
	  be interrogated.

	  The use of CFU, CFB, CFNR and interrogation may be limited to some
	  countries. The keypad protocol is still not implemented. CD should
	  work in all countries if the service has been subscribed to.

	  Please read the file <file:Documentation/isdn/README.diversion>.

endmenu

comment "ISDN4Linux hardware drivers"

source "drivers/isdn/hisax/Kconfig"


menu "Active cards"

source "drivers/isdn/icn/Kconfig"

source "drivers/isdn/pcbit/Kconfig"

source "drivers/isdn/sc/Kconfig"

source "drivers/isdn/act2000/Kconfig"

source "drivers/isdn/hysdn/Kconfig"

endmenu
