#
# TIPC configuration
#

menu "TIPC Configuration (EXPERIMENTAL)"
	depends on INET && EXPERIMENTAL

config TIPC
	tristate "The TIPC Protocol (EXPERIMENTAL)"
	---help---
	  The Transparent Inter Process Communication (TIPC) protocol is
	  specially designed for intra cluster communication. This protocol
	  originates from Ericsson where it has been used in carrier grade
	  cluster applications for many years.
	
	  For more information about TIPC, see http://tipc.sourceforge.net.

	  This protocol support is also available as a module ( = code which
	  can be inserted in and removed from the running kernel whenever you
	  want). The module will be called tipc. If you want to compile it
	  as a module, say M here and read <file:Documentation/kbuild/modules.txt>.

	  If in doubt, say N.

config TIPC_ADVANCED
	bool "TIPC: Advanced configuration"
	depends on TIPC
	default n
	help
	  Saying Y here will open some advanced configuration
          for TIPC. Most users do not need to bother, so if
          unsure, just say N.

config TIPC_ZONES
	int "Maximum number of zones in network"
	depends on TIPC && TIPC_ADVANCED
	default "3"
	help
	 Max number of zones inside TIPC network. Max supported value 
         is 255 zones, minimum is 1

	 Default is 3 zones in a network; setting this to higher
	 allows more zones but might use more memory.

config TIPC_CLUSTERS
	int "Maximum number of clusters in a zone"
	depends on TIPC && TIPC_ADVANCED
	default "1"
	help
          ***Only 1 (one cluster in a zone) is supported by current code.
          Any value set here will be overridden.***

          (Max number of clusters inside TIPC zone. Max supported 
          value is 4095 clusters, minimum is 1.

	  Default is 1; setting this to smaller value might save 
          some memory, setting it to higher
	  allows more clusters and might consume more memory.)

config TIPC_NODES
	int "Maximum number of nodes in cluster"
	depends on TIPC && TIPC_ADVANCED
	default "255"
	help
	  Maximum number of nodes inside a TIPC cluster. Maximum 
          supported value is 2047 nodes, minimum is 8. 

	  Setting this to a smaller value saves some memory, 
	  setting it to higher allows more nodes.

config TIPC_SLAVE_NODES
	int "Maximum number of slave nodes in cluster"
	depends on TIPC && TIPC_ADVANCED
	default "0"
	help
          ***This capability is not supported by current code.***
	  
	  Maximum number of slave nodes inside a TIPC cluster. Maximum 
          supported value is 2047 nodes, minimum is 0. 

	  Setting this to a smaller value saves some memory, 
	  setting it to higher allows more nodes.

config TIPC_PORTS
	int "Maximum number of ports in a node"
	depends on TIPC && TIPC_ADVANCED
	default "8191"
	help
	  Maximum number of ports within a node. Maximum 
          supported value is 64535 nodes, minimum is 127. 

	  Setting this to a smaller value saves some memory, 
	  setting it to higher allows more ports.

config TIPC_LOG
	int "Size of log buffer"
	depends on TIPC && TIPC_ADVANCED
	default 0
	help
 	  Size (in bytes) of TIPC's internal log buffer, which records the
	  occurrence of significant events.  Maximum supported value
	  is 32768 bytes, minimum is 0.

	  There is no need to enable the log buffer unless the node will be
	  managed remotely via TIPC.

config TIPC_DEBUG
	bool "Enable debugging support"
	depends on TIPC
	default n
	help
 	  This will enable debugging of TIPC.

	  Only say Y here if you are having trouble with TIPC.  It will
	  enable the display of detailed information about what is going on.

endmenu
