#
# Old ISDN4Linux config
#

config ISDN_PPP
	bool "Support synchronous PPP"
	depends on INET
	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"
