#
# Old ISDN4Linux config
#

if ISDN_I4L

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"

# end ISDN_I4L
endif

