#
# 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"
	depends on ISDN

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"
	depends on ISDN && ISDN_I4L
	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"
	depends on NET && ISDN && ISDN_I4L

source "drivers/isdn/hisax/Kconfig"


menu "Active cards"
	depends on NET && ISDN && ISDN_I4L!=n

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

source "drivers/isdn/gigaset/Kconfig"
