#
# Network configuration
#

menu "Networking"

config NET
	bool "Networking support"
	---help---
	  Unless you really know what you are doing, you should say Y here.
	  The reason is that some programs need kernel networking support even
	  when running on a stand-alone machine that isn't connected to any
	  other computer.
	  
	  If you are upgrading from an older kernel, you
	  should consider updating your networking tools too because changes
	  in the kernel and the tools often go hand in hand. The tools are
	  contained in the package net-tools, the location and version number
	  of which are given in <file:Documentation/Changes>.

	  For a general introduction to Linux networking, it is highly
	  recommended to read the NET-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

menu "Networking options"
	depends on NET

config PACKET
	tristate "Packet socket"
	---help---
	  The Packet protocol is used by applications which communicate
	  directly with network devices without an intermediate network
	  protocol implemented in the kernel, e.g. tcpdump.  If you want them
	  to work, choose Y.

	  To compile this driver as a module, choose M here: the module will
	  be called af_packet.

	  If unsure, say Y.

config PACKET_MMAP
	bool "Packet socket: mmapped IO"
	depends on PACKET
	help
	  If you say Y here, the Packet protocol driver will use an IO
	  mechanism that results in faster communication.

	  If unsure, say N.

config UNIX
	tristate "Unix domain sockets"
	---help---
	  If you say Y here, you will include support for Unix domain sockets;
	  sockets are the standard Unix mechanism for establishing and
	  accessing network connections.  Many commonly used programs such as
	  the X Window system and syslog use these sockets even if your
	  machine is not connected to any network.  Unless you are working on
	  an embedded system or something similar, you therefore definitely
	  want to say Y here.

	  To compile this driver as a module, choose M here: the module will be
	  called unix.  Note that several important services won't work
	  correctly if you say M here and then neglect to load the module.

	  Say Y unless you know what you are doing.

config NET_KEY
	tristate "PF_KEY sockets"
	select XFRM
	---help---
	  PF_KEYv2 socket family, compatible to KAME ones.
	  They are required if you are going to use IPsec tools ported
	  from KAME.

	  Say Y unless you know what you are doing.

config INET
	bool "TCP/IP networking"
	---help---
	  These are the protocols used on the Internet and on most local
	  Ethernets. It is highly recommended to say Y here (this will enlarge
	  your kernel by about 144 KB), since some programs (e.g. the X window
	  system) use TCP/IP even if your machine is not connected to any
	  other computer. You will get the so-called loopback device which
	  allows you to ping yourself (great fun, that!).

	  For an excellent introduction to Linux networking, please read the
	  Linux Networking HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  If you say Y here and also to "/proc file system support" and
	  "Sysctl support" below, you can change various aspects of the
	  behavior of the TCP/IP code by writing to the (virtual) files in
	  /proc/sys/net/ipv4/*; the options are explained in the file
	  <file:Documentation/networking/ip-sysctl.txt>.

	  Short answer: say Y.

source "net/ipv4/Kconfig"

#   IPv6 as module will cause a CRASH if you try to unload it
config IPV6
	tristate "The IPv6 protocol"
	depends on INET
	default m
	select CRYPTO if IPV6_PRIVACY
	select CRYPTO_MD5 if IPV6_PRIVACY
	---help---
	  This is complemental support for the IP version 6.
	  You will still be able to do traditional IPv4 networking as well.

	  For general information about IPv6, see
	  <http://playground.sun.com/pub/ipng/html/ipng-main.html>.
	  For Linux IPv6 development information, see <http://www.linux-ipv6.org>.
	  For specific information about IPv6 under Linux, read the HOWTO at
	  <http://www.bieringer.de/linux/IPv6/>.

	  To compile this protocol support as a module, choose M here: the 
	  module will be called ipv6.

source "net/ipv6/Kconfig"

menuconfig NETFILTER
	bool "Network packet filtering (replaces ipchains)"
	---help---
	  Netfilter is a framework for filtering and mangling network packets
	  that pass through your Linux box.

	  The most common use of packet filtering is to run your Linux box as
	  a firewall protecting a local network from the Internet. The type of
	  firewall provided by this kernel support is called a "packet
	  filter", which means that it can reject individual network packets
	  based on type, source, destination etc. The other kind of firewall,
	  a "proxy-based" one, is more secure but more intrusive and more
	  bothersome to set up; it inspects the network traffic much more
	  closely, modifies it and has knowledge about the higher level
	  protocols, which a packet filter lacks. Moreover, proxy-based
	  firewalls often require changes to the programs running on the local
	  clients. Proxy-based firewalls don't need support by the kernel, but
	  they are often combined with a packet filter, which only works if
	  you say Y here.

	  You should also say Y here if you intend to use your Linux box as
	  the gateway to the Internet for a local network of machines without
	  globally valid IP addresses. This is called "masquerading": if one
	  of the computers on your local network wants to send something to
	  the outside, your box can "masquerade" as that computer, i.e. it
	  forwards the traffic to the intended outside destination, but
	  modifies the packets to make it look like they came from the
	  firewall box itself. It works both ways: if the outside host
	  replies, the Linux box will silently forward the traffic to the
	  correct local computer. This way, the computers on your local net
	  are completely invisible to the outside world, even though they can
	  reach the outside and can receive replies. It is even possible to
	  run globally visible servers from within a masqueraded local network
	  using a mechanism called portforwarding. Masquerading is also often
	  called NAT (Network Address Translation).

	  Another use of Netfilter is in transparent proxying: if a machine on
	  the local network tries to connect to an outside host, your Linux
	  box can transparently forward the traffic to a local server,
	  typically a caching proxy server.

	  Yet another use of Netfilter is building a bridging firewall. Using
	  a bridge with Network packet filtering enabled makes iptables "see"
	  the bridged traffic. For filtering on the lower network and Ethernet
	  protocols over the bridge, use ebtables (under bridge netfilter
	  configuration).

	  Various modules exist for netfilter which replace the previous
	  masquerading (ipmasqadm), packet filtering (ipchains), transparent
	  proxying, and portforwarding mechanisms. Please see
	  <file:Documentation/Changes> under "iptables" for the location of
	  these packages.

	  Make sure to say N to "Fast switching" below if you intend to say Y
	  here, as Fast switching currently bypasses netfilter.

	  Chances are that you should say Y here if you compile a kernel which
	  will run as a router and N for regular hosts. If unsure, say N.

if NETFILTER

config NETFILTER_DEBUG
	bool "Network packet filtering debugging"
	depends on NETFILTER
	help
	  You can say Y here if you want to get additional messages useful in
	  debugging the netfilter code.

config BRIDGE_NETFILTER
	bool "Bridged IP/ARP packets filtering"
	depends on BRIDGE && NETFILTER && INET
	default y
	---help---
	  Enabling this option will let arptables resp. iptables see bridged
	  ARP resp. IP traffic. If you want a bridging firewall, you probably
	  want this option enabled.
	  Enabling or disabling this option doesn't enable or disable
	  ebtables.

	  If unsure, say N.

source "net/ipv4/netfilter/Kconfig"
source "net/ipv6/netfilter/Kconfig"
source "net/decnet/netfilter/Kconfig"
source "net/bridge/netfilter/Kconfig"

endif

config XFRM
       bool
       depends on NET

source "net/xfrm/Kconfig"

source "net/sctp/Kconfig"

config ATM
	tristate "Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	---help---
	  ATM is a high-speed networking technology for Local Area Networks
	  and Wide Area Networks.  It uses a fixed packet size and is
	  connection oriented, allowing for the negotiation of minimum
	  bandwidth requirements.

	  In order to participate in an ATM network, your Linux box needs an
	  ATM networking card. If you have that, say Y here and to the driver
	  of your ATM card below.

	  Note that you need a set of user-space programs to actually make use
	  of ATM.  See the file <file:Documentation/networking/atm.txt> for
	  further details.

config ATM_CLIP
	tristate "Classical IP over ATM (EXPERIMENTAL)"
	depends on ATM && INET
	help
	  Classical IP over ATM for PVCs and SVCs, supporting InARP and
	  ATMARP. If you want to communication with other IP hosts on your ATM
	  network, you will typically either say Y here or to "LAN Emulation
	  (LANE)" below.

config ATM_CLIP_NO_ICMP
	bool "Do NOT send ICMP if no neighbour (EXPERIMENTAL)"
	depends on ATM_CLIP
	help
	  Normally, an "ICMP host unreachable" message is sent if a neighbour
	  cannot be reached because there is no VC to it in the kernel's
	  ATMARP table. This may cause problems when ATMARP table entries are
	  briefly removed during revalidation. If you say Y here, packets to
	  such neighbours are silently discarded instead.

config ATM_LANE
	tristate "LAN Emulation (LANE) support (EXPERIMENTAL)"
	depends on ATM
	help
	  LAN Emulation emulates services of existing LANs across an ATM
	  network. Besides operating as a normal ATM end station client, Linux
	  LANE client can also act as an proxy client bridging packets between
	  ELAN and Ethernet segments. You need LANE if you want to try MPOA.

config ATM_MPOA
	tristate "Multi-Protocol Over ATM (MPOA) support (EXPERIMENTAL)"
	depends on ATM && INET && ATM_LANE!=n
	help
	  Multi-Protocol Over ATM allows ATM edge devices such as routers,
	  bridges and ATM attached hosts establish direct ATM VCs across
	  subnetwork boundaries. These shortcut connections bypass routers
	  enhancing overall network performance.

config ATM_BR2684
	tristate "RFC1483/2684 Bridged protocols"
	depends on ATM && INET
	help
	  ATM PVCs can carry ethernet PDUs according to RFC2684 (formerly 1483)
	  This device will act like an ethernet from the kernels point of view,
	  with the traffic being carried by ATM PVCs (currently 1 PVC/device).
	  This is sometimes used over DSL lines.  If in doubt, say N.

config ATM_BR2684_IPFILTER
	bool "Per-VC IP filter kludge"
	depends on ATM_BR2684
	help
	  This is an experimental mechanism for users who need to terminate a
	  large number of IP-only vcc's.  Do not enable this unless you are sure
	  you know what you are doing.

config BRIDGE
	tristate "802.1d Ethernet Bridging"
	---help---
	  If you say Y here, then your Linux box will be able to act as an
	  Ethernet bridge, which means that the different Ethernet segments it
	  is connected to will appear as one Ethernet to the participants.
	  Several such bridges can work together to create even larger
	  networks of Ethernets using the IEEE 802.1 spanning tree algorithm.
	  As this is a standard, Linux bridges will cooperate properly with
	  other third party bridge products.

	  In order to use the Ethernet bridge, you'll need the bridge
	  configuration tools; see <file:Documentation/networking/bridge.txt>
	  for location. Please read the Bridge mini-HOWTO for more
	  information.

	  If you enable iptables support along with the bridge support then you
	  turn your bridge into a bridging IP firewall.
	  iptables will then see the IP packets being bridged, so you need to
	  take this into account when setting up your firewall rules.
	  Enabling arptables support when bridging will let arptables see
	  bridged ARP traffic in the arptables FORWARD chain.

	  To compile this code as a module, choose M here: the module
	  will be called bridge.

	  If unsure, say N.

config VLAN_8021Q
	tristate "802.1Q VLAN Support"
	---help---
	  Select this and you will be able to create 802.1Q VLAN interfaces
	  on your ethernet interfaces.  802.1Q VLAN supports almost
	  everything a regular ethernet interface does, including
	  firewalling, bridging, and of course IP traffic.  You will need
	  the 'vconfig' tool from the VLAN project in order to effectively
	  use VLANs.  See the VLAN web page for more information:
	  <http://www.candelatech.com/~greear/vlan.html>

	  To compile this code as a module, choose M here: the module
	  will be called 8021q.

	  If unsure, say N.

config DECNET
	tristate "DECnet Support"
	---help---
	  The DECnet networking protocol was used in many products made by
	  Digital (now Compaq).  It provides reliable stream and sequenced
	  packet communications over which run a variety of services similar
	  to those which run over TCP/IP.

	  To find some tools to use with the kernel layer support, please
	  look at Patrick Caulfield's web site:
	  <http://linux-decnet.sourceforge.net/>.

	  More detailed documentation is available in
	  <file:Documentation/networking/decnet.txt>.

	  Be sure to say Y to "/proc file system support" and "Sysctl support"
	  below when using DECnet, since you will need sysctl support to aid
	  in configuration at run time.

	  The DECnet code is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module is called decnet.

source "net/decnet/Kconfig"

source "net/llc/Kconfig"

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.

source "net/ipx/Kconfig"

config ATALK
	tristate "Appletalk protocol support"
	select LLC
	---help---
	  AppleTalk is the protocol that Apple computers can use to communicate
	  on a network.  If your Linux box is connected to such a network and you
	  wish to connect to it, say Y.  You will need to use the netatalk package
	  so that your Linux box can act as a print and file server for Macs as
	  well as access AppleTalk printers.  Check out
	  <http://www.zettabyte.net/netatalk/> on the WWW for details.
	  EtherTalk is the name used for AppleTalk over Ethernet and the
	  cheaper and slower LocalTalk is AppleTalk over a proprietary Apple
	  network using serial links.  EtherTalk and LocalTalk are fully
	  supported by Linux.

	  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
	  NET-3-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>, contains valuable
	  information as well.

	  To compile this driver as a module, choose M here: the module will be
	  called appletalk. You almost certainly want to compile it as a
	  module so you can restart your AppleTalk stack without rebooting
	  your machine. I hear that the GNU boycott of Apple is over, so
	  even politically correct people are allowed to say Y here.

source "drivers/net/appletalk/Kconfig"

config X25
	tristate "CCITT X.25 Packet Layer (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	---help---
	  X.25 is a set of standardized network protocols, similar in scope to
	  frame relay; the one physical line from your box to the X.25 network
	  entry point can carry several logical point-to-point connections
	  (called "virtual circuits") to other computers connected to the X.25
	  network. Governments, banks, and other organizations tend to use it
	  to connect to each other or to form Wide Area Networks (WANs). Many
	  countries have public X.25 networks. X.25 consists of two
	  protocols: the higher level Packet Layer Protocol (PLP) (say Y here
	  if you want that) and the lower level data link layer protocol LAPB
	  (say Y to "LAPB Data Link Driver" below if you want that).

	  You can read more about X.25 at <http://www.sangoma.com/x25.htm> and
	  <http://www.cisco.com/univercd/cc/td/doc/product/software/ios11/cbook/cx25.htm>.
	  Information about X.25 for Linux is contained in the files
	  <file:Documentation/networking/x25.txt> and
	  <file:Documentation/networking/x25-iface.txt>.

	  One connects to an X.25 network either with a dedicated network card
	  using the X.21 protocol (not yet supported by Linux) or one can do
	  X.25 over a standard telephone line using an ordinary modem (say Y
	  to "X.25 async driver" below) or over Ethernet using an ordinary
	  Ethernet card and the LAPB over Ethernet (say Y to "LAPB Data Link
	  Driver" and "LAPB over Ethernet driver" below).

	  To compile this driver as a module, choose M here: the module
	  will be called x25. If unsure, say N.

config LAPB
	tristate "LAPB Data Link Driver (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	---help---
	  Link Access Procedure, Balanced (LAPB) is the data link layer (i.e.
	  the lower) part of the X.25 protocol. It offers a reliable
	  connection service to exchange data frames with one other host, and
	  it is used to transport higher level protocols (mostly X.25 Packet
	  Layer, the higher part of X.25, but others are possible as well).
	  Usually, LAPB is used with specialized X.21 network cards, but Linux
	  currently supports LAPB only over Ethernet connections. If you want
	  to use LAPB connections over Ethernet, say Y here and to "LAPB over
	  Ethernet driver" below. Read
	  <file:Documentation/networking/lapb-module.txt> for technical
	  details.

	  To compile this driver as a module, choose M here: the
	  module will be called lapb.  If unsure, say N.

config NET_DIVERT
	bool "Frame Diverter (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	---help---
	  The Frame Diverter allows you to divert packets from the
	  network, that are not aimed at the interface receiving it (in
	  promisc. mode). Typically, a Linux box setup as an Ethernet bridge
	  with the Frames Diverter on, can do some *really* transparent www
	  caching using a Squid proxy for example.

	  This is very useful when you don't want to change your router's
	  config (or if you simply don't have access to it).

	  The other possible usages of diverting Ethernet Frames are
	  numberous:
	  - reroute smtp traffic to another interface
	  - traffic-shape certain network streams
	  - transparently proxy smtp connections
	  - etc...

	  For more informations, please refer to:
	  <http://diverter.sourceforge.net/>
	  <http://perso.wanadoo.fr/magpie/EtherDivert.html>

	  If unsure, say N.

config ECONET
	tristate "Acorn Econet/AUN protocols (EXPERIMENTAL)"
	depends on EXPERIMENTAL && INET
	---help---
	  Econet is a fairly old and slow networking protocol mainly used by
	  Acorn computers to access file and print servers. It uses native
	  Econet network cards. AUN is an implementation of the higher level
	  parts of Econet that runs over ordinary Ethernet connections, on
	  top of the UDP packet protocol, which in turn runs on top of the
	  Internet protocol IP.

	  If you say Y here, you can choose with the next two options whether
	  to send Econet/AUN traffic over a UDP Ethernet connection or over
	  a native Econet network card.

	  To compile this driver as a module, choose M here: the module
	  will be called econet.

config ECONET_AUNUDP
	bool "AUN over UDP"
	depends on ECONET
	help
	  Say Y here if you want to send Econet/AUN traffic over a UDP
	  connection (UDP is a packet based protocol that runs on top of the
	  Internet protocol IP) using an ordinary Ethernet network card.

config ECONET_NATIVE
	bool "Native Econet"
	depends on ECONET
	help
	  Say Y here if you have a native Econet network card installed in
	  your computer.

config WAN_ROUTER
	tristate "WAN router"
	depends on EXPERIMENTAL
	---help---
	  Wide Area Networks (WANs), such as X.25, frame relay and leased
	  lines, are used to interconnect Local Area Networks (LANs) over vast
	  distances with data transfer rates significantly higher than those
	  achievable with commonly used asynchronous modem connections.
	  Usually, a quite expensive external device called a `WAN router' is
	  needed to connect to a WAN.

	  As an alternative, WAN routing can be built into the Linux kernel.
	  With relatively inexpensive WAN interface cards available on the
	  market, a perfectly usable router can be built for less than half
	  the price of an external router.  If you have one of those cards and
	  wish to use your Linux box as a WAN router, say Y here and also to
	  the WAN driver for your card, below.  You will then need the
	  wan-tools package which is available from <ftp://ftp.sangoma.com/>.
	  Read <file:Documentation/networking/wan-router.txt> for more
	  information.

	  To compile WAN routing support as a module, choose M here: the
	  module will be called wanrouter.

	  If unsure, say N.

menu "QoS and/or fair queueing"

config NET_SCHED
	bool "QoS and/or fair queueing"
	---help---
	  When the kernel has several packets to send out over a network
	  device, it has to decide which ones to send first, which ones to
	  delay, and which ones to drop. This is the job of the packet
	  scheduler, and several different algorithms for how to do this
	  "fairly" have been proposed.

	  If you say N here, you will get the standard packet scheduler, which
	  is a FIFO (first come, first served). If you say Y here, you will be
	  able to choose from among several alternative algorithms which can
	  then be attached to different network devices. This is useful for
	  example if some of your network devices are real time devices that
	  need a certain minimum data flow rate, or if you need to limit the
	  maximum data flow rate for traffic which matches specified criteria.
	  This code is considered to be experimental.

	  To administer these schedulers, you'll need the user-level utilities
	  from the package iproute2+tc at <ftp://ftp.tux.org/pub/net/ip-routing/>.
	  That package also contains some documentation; for more, check out
	  <http://snafu.freedom.org/linux2.2/iproute-notes.html>.

	  This Quality of Service (QoS) support will enable you to use
	  Differentiated Services (diffserv) and Resource Reservation Protocol
	  (RSVP) on your Linux router if you also say Y to "QoS support",
	  "Packet classifier API" and to some classifiers below. Documentation
	  and software is at <http://diffserv.sourceforge.net/>.

	  If you say Y here and to "/proc file system" below, you will be able
	  to read status information about packet schedulers from the file
	  /proc/net/psched.

	  The available schedulers are listed in the following questions; you
	  can say Y to as many as you like. If unsure, say N now.

source "net/sched/Kconfig"

endmenu

menu "Network testing"

config NET_PKTGEN
	tristate "Packet Generator (USE WITH CAUTION)"
	depends on PROC_FS
	---help---
	  This module will inject preconfigured packets, at a configurable
	  rate, out of a given interface.  It is used for network interface
	  stress testing and performance analysis.  If you don't understand
	  what was just said, you don't need it: say N.

	  Documentation on how to use the packet generator can be found
	  at <file:Documentation/networking/pktgen.txt>.

	  To compile this code as a module, choose M here: the
	  module will be called pktgen.

endmenu

endmenu

config NETPOLL
	def_bool NETCONSOLE

config NETPOLL_RX
	bool "Netpoll support for trapping incoming packets"
	default n
	depends on NETPOLL

config NETPOLL_TRAP
	bool "Netpoll traffic trapping"
	default n
	depends on NETPOLL

config NET_POLL_CONTROLLER
	def_bool NETPOLL

source "net/ax25/Kconfig"

source "net/irda/Kconfig"

source "net/bluetooth/Kconfig"

endmenu # Networking

