#
# IPX configuration
#
config IPX
	tristate "The IPX protocol"
	select LLC
	---help---
	  This is support for the Novell networking protocol, IPX, commonly
	  used for local networks of Windows machines.  You need it if you
	  want to access Novell NetWare file or print servers using the Linux
	  Novell client ncpfs (available from
	  <ftp://platan.vc.cvut.cz/pub/linux/ncpfs/>) or from
	  within the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO,
	  available from <http://www.tldp.org/docs.html#howto>).  In order
	  to do the former, you'll also have to say Y to "NCP file system
	  support", below.

	  IPX is similar in scope to IP, while SPX, which runs on top of IPX,
	  is similar to TCP. There is also experimental support for SPX in
	  Linux (see "SPX networking", below).

	  To turn your Linux box into a fully featured NetWare file server and
	  IPX router, say Y here and fetch either lwared from
	  <ftp://ibiblio.org/pub/Linux/system/network/daemons/> or
	  mars_nwe from <ftp://www.compu-art.de/mars_nwe/>. For more
	  information, read the IPX-HOWTO available from
	  <http://www.tldp.org/docs.html#howto>.

	  General information about how to connect Linux, Windows machines and
	  Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.

	  The IPX driver would enlarge your kernel by about 16 KB. To compile
	  this driver as a module, choose M here: the module will be called ipx.
	  Unless you want to integrate your Linux box with a local Novell
	  network, say N.

config IPX_INTERN
	bool "IPX: Full internal IPX network"
	depends on IPX
	---help---
	  Every IPX network has an address that identifies it. Sometimes it is
	  useful to give an IPX "network" address to your Linux box as well
	  (for example if your box is acting as a file server for different
	  IPX networks: it will then be accessible from everywhere using the
	  same address). The way this is done is to create a virtual internal
	  "network" inside your box and to assign an IPX address to this
	  network. Say Y here if you want to do this; read the IPX-HOWTO at
	  <http://www.tldp.org/docs.html#howto> for details.

	  The full internal IPX network enables you to allocate sockets on
	  different virtual nodes of the internal network. This is done by
	  evaluating the field sipx_node of the socket address given to the
	  bind call. So applications should always initialize the node field
	  to 0 when binding a socket on the primary network. In this case the
	  socket is assigned the default node that has been given to the
	  kernel when the internal network was created. By enabling the full
	  internal IPX network the cross-forwarding of packets targeted at
	  'special' sockets to sockets listening on the primary network is
	  disabled. This might break existing applications, especially RIP/SAP
	  daemons. A RIP/SAP daemon that works well with the full internal net
	  can be found on <ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/>.

	  If you don't know what you are doing, say N.

