#
# Network device configuration
#

menuconfig NETDEVICES
	default y if UML
	depends on NET
	bool "Network device support"
	---help---
	  You can say N here if you don't intend to connect your Linux box to
	  any other computer at all.

	  You'll have to say Y if your computer contains a network card that
	  you want to use under Linux. If you are going to run SLIP or PPP over
	  telephone line or null modem cable you need say Y here. Connecting
	  two machines with parallel ports using PLIP needs this, as well as
	  AX.25/KISS for sending Internet traffic over amateur radio links.

	  See also "The Linux Network Administrator's Guide" by Olaf Kirch and
	  Terry Dawson. Available at <http://www.tldp.org/guides.html>.

	  If unsure, say Y.

# All the following symbols are dependent on NETDEVICES - do not repeat
# that for each of the symbols.
if NETDEVICES

config MII
	tristate

config NET_CORE
	default y
	bool "Network core driver support"
	---help---
	  You can say N here if you do not intend to use any of the
	  networking core drivers (i.e. VLAN, bridging, bonding, etc.)

if NET_CORE

config BONDING
	tristate "Bonding driver support"
	depends on INET
	depends on IPV6 || IPV6=n
	---help---
	  Say 'Y' or 'M' if you wish to be able to 'bond' multiple Ethernet
	  Channels together. This is called 'Etherchannel' by Cisco,
	  'Trunking' by Sun, 802.3ad by the IEEE, and 'Bonding' in Linux.

	  The driver supports multiple bonding modes to allow for both high
	  performance and high availability operation.

	  Refer to <file:Documentation/networking/bonding.txt> for more
	  information.

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

config DUMMY
	tristate "Dummy net driver support"
	---help---
	  This is essentially a bit-bucket device (i.e. traffic you send to
	  this device is consigned into oblivion) with a configurable IP
	  address. It is most commonly used in order to make your currently
	  inactive SLIP address seem like a real address for local programs.
	  If you use SLIP or PPP, you might want to say Y here. It won't
	  enlarge your kernel. What a deal. Read about it in the Network
	  Administrator's Guide, available from
	  <http://www.tldp.org/docs.html#guide>.

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

config EQUALIZER
	tristate "EQL (serial line load balancing) support"
	---help---
	  If you have two serial connections to some other computer (this
	  usually requires two modems and two telephone lines) and you use
	  SLIP (the protocol for sending Internet traffic over telephone
	  lines) or PPP (a better SLIP) on them, you can make them behave like
	  one double speed connection using this driver.  Naturally, this has
	  to be supported at the other end as well, either with a similar EQL
	  Linux driver or with a Livingston Portmaster 2e.

	  Say Y if you want this and read
	  <file:Documentation/networking/eql.txt>.  You may also want to read
	  section 6.2 of the NET-3-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

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

config NET_FC
	bool "Fibre Channel driver support"
	depends on SCSI && PCI
	help
	  Fibre Channel is a high speed serial protocol mainly used to connect
	  large storage devices to the computer; it is compatible with and
	  intended to replace SCSI.

	  If you intend to use Fibre Channel, you need to have a Fibre channel
	  adaptor card in your computer; say Y here and to the driver for your
	  adaptor below. You also should have said Y to "SCSI support" and
	  "SCSI generic support".

config IFB
	tristate "Intermediate Functional Block support"
	depends on NET_CLS_ACT
	---help---
	  This is an intermediate driver that allows sharing of
	  resources.
	  To compile this driver as a module, choose M here: the module
	  will be called ifb.  If you want to use more than one ifb
	  device at a time, you need to compile this driver as a module.
	  Instead of 'ifb', the devices will then be called 'ifb0',
	  'ifb1' etc.
	  Look at the iproute2 documentation directory for usage etc

source "drivers/net/team/Kconfig"

config MACVLAN
	tristate "MAC-VLAN support"
	---help---
	  This allows one to create virtual interfaces that map packets to
	  or from specific MAC addresses to a particular interface.

	  Macvlan devices can be added using the "ip" command from the
	  iproute2 package starting with the iproute2-2.6.23 release:

	  "ip link add link <real dev> [ address MAC ] [ NAME ] type macvlan"

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

config MACVTAP
	tristate "MAC-VLAN based tap driver"
	depends on MACVLAN
	depends on INET
	select TAP
	help
	  This adds a specialized tap character device driver that is based
	  on the MAC-VLAN network interface, called macvtap. A macvtap device
	  can be added in the same way as a macvlan device, using 'type
	  macvtap', and then be accessed through the tap user space interface.

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


config IPVLAN
    tristate "IP-VLAN support"
    depends on INET
    depends on IPV6 || !IPV6
    depends on NETFILTER
    select NET_L3_MASTER_DEV
    ---help---
      This allows one to create virtual devices off of a main interface
      and packets will be delivered based on the dest L3 (IPv6/IPv4 addr)
      on packets. All interfaces (including the main interface) share L2
      making it transparent to the connected L2 switch.

      Ipvlan devices can be added using the "ip" command from the
      iproute2 package starting with the iproute2-3.19 release:

      "ip link add link <main-dev> [ NAME ] type ipvlan"

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

config IPVTAP
	tristate "IP-VLAN based tap driver"
	depends on IPVLAN
	depends on INET
	select TAP
	---help---
	  This adds a specialized tap character device driver that is based
	  on the IP-VLAN network interface, called ipvtap. An ipvtap device
	  can be added in the same way as a ipvlan device, using 'type
	  ipvtap', and then be accessed through the tap user space interface.

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

config VXLAN
       tristate "Virtual eXtensible Local Area Network (VXLAN)"
       depends on INET
       select NET_UDP_TUNNEL
       select GRO_CELLS
       ---help---
	  This allows one to create vxlan virtual interfaces that provide
	  Layer 2 Networks over Layer 3 Networks. VXLAN is often used
	  to tunnel virtual network infrastructure in virtualized environments.
	  For more information see:
	    http://tools.ietf.org/html/draft-mahalingam-dutt-dcops-vxlan-02

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

config GENEVE
       tristate "Generic Network Virtualization Encapsulation"
       depends on INET && NET_UDP_TUNNEL
       depends on IPV6 || !IPV6
       select NET_IP_TUNNEL
       select GRO_CELLS
       ---help---
	  This allows one to create geneve virtual interfaces that provide
	  Layer 2 Networks over Layer 3 Networks. GENEVE is often used
	  to tunnel virtual network infrastructure in virtualized environments.
	  For more information see:
	    http://tools.ietf.org/html/draft-gross-geneve-02

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

config GTP
	tristate "GPRS Tunneling Protocol datapath (GTP-U)"
	depends on INET
	select NET_UDP_TUNNEL
	---help---
	  This allows one to create gtp virtual interfaces that provide
	  the GPRS Tunneling Protocol datapath (GTP-U). This tunneling protocol
	  is used to prevent subscribers from accessing mobile carrier core
	  network infrastructure. This driver requires a userspace software that
	  implements the signaling protocol (GTP-C) to update its PDP context
	  base, such as OpenGGSN <http://git.osmocom.org/openggsn/). This
	  tunneling protocol is implemented according to the GSM TS 09.60 and
	  3GPP TS 29.060 standards.

	  To compile this drivers as a module, choose M here: the module
	  wil be called gtp.

config MACSEC
	tristate "IEEE 802.1AE MAC-level encryption (MACsec)"
	select CRYPTO
	select CRYPTO_AES
	select CRYPTO_GCM
	select GRO_CELLS
	---help---
	   MACsec is an encryption standard for Ethernet.

config NETCONSOLE
	tristate "Network console logging support"
	---help---
	If you want to log kernel messages over the network, enable this.
	See <file:Documentation/networking/netconsole.txt> for details.

config NETCONSOLE_DYNAMIC
	bool "Dynamic reconfiguration of logging targets"
	depends on NETCONSOLE && SYSFS && CONFIGFS_FS && \
			!(NETCONSOLE=y && CONFIGFS_FS=m)
	help
	  This option enables the ability to dynamically reconfigure target
	  parameters (interface, IP addresses, port numbers, MAC addresses)
	  at runtime through a userspace interface exported using configfs.
	  See <file:Documentation/networking/netconsole.txt> for details.

config NETPOLL
	def_bool NETCONSOLE
	select SRCU

config NET_POLL_CONTROLLER
	def_bool NETPOLL

config NTB_NETDEV
	tristate "Virtual Ethernet over NTB Transport"
	depends on NTB_TRANSPORT

config RIONET
	tristate "RapidIO Ethernet over messaging driver support"
	depends on RAPIDIO

config RIONET_TX_SIZE
	int "Number of outbound queue entries"
	depends on RIONET
	default "128"

config RIONET_RX_SIZE
	int "Number of inbound queue entries"
	depends on RIONET
	default "128"

config TUN
	tristate "Universal TUN/TAP device driver support"
	depends on INET
	select CRC32
	---help---
	  TUN/TAP provides packet reception and transmission for user space
	  programs.  It can be viewed as a simple Point-to-Point or Ethernet
	  device, which instead of receiving packets from a physical media,
	  receives them from user space program and instead of sending packets
	  via physical media writes them to the user space program.

	  When a program opens /dev/net/tun, driver creates and registers
	  corresponding net device tunX or tapX.  After a program closed above
	  devices, driver will automatically delete tunXX or tapXX device and
	  all routes corresponding to it.

	  Please read <file:Documentation/networking/tuntap.txt> for more
	  information.

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

	  If you don't know what to use this for, you don't need it.

config TAP
	tristate
	---help---
	  This option is selected by any driver implementing tap user space
	  interface for a virtual interface to re-use core tap functionality.

config TUN_VNET_CROSS_LE
	bool "Support for cross-endian vnet headers on little-endian kernels"
	default n
	---help---
	  This option allows TUN/TAP and MACVTAP device drivers in a
	  little-endian kernel to parse vnet headers that come from a
	  big-endian legacy virtio device.

	  Userspace programs can control the feature using the TUNSETVNETBE
	  and TUNGETVNETBE ioctls.

	  Unless you have a little-endian system hosting a big-endian virtual
	  machine with a legacy virtio NIC, you should say N.

config VETH
	tristate "Virtual ethernet pair device"
	---help---
	  This device is a local ethernet tunnel. Devices are created in pairs.
	  When one end receives the packet it appears on its pair and vice
	  versa.

config VIRTIO_NET
	tristate "Virtio network driver"
	depends on VIRTIO
	select NET_FAILOVER
	---help---
	  This is the virtual network driver for virtio.  It can be used with
	  QEMU based VMMs (like KVM or Xen).  Say Y or M.

config NLMON
	tristate "Virtual netlink monitoring device"
	---help---
	  This option enables a monitoring net device for netlink skbs. The
	  purpose of this is to analyze netlink messages with packet sockets.
	  Thus applications like tcpdump will be able to see local netlink
	  messages if they tap into the netlink device, record pcaps for further
	  diagnostics, etc. This is mostly intended for developers or support
	  to debug netlink issues. If unsure, say N.

config NET_VRF
	tristate "Virtual Routing and Forwarding (Lite)"
	depends on IP_MULTIPLE_TABLES
	depends on NET_L3_MASTER_DEV
	depends on IPV6 || IPV6=n
	depends on IPV6_MULTIPLE_TABLES || IPV6=n
	---help---
	  This option enables the support for mapping interfaces into VRF's. The
	  support enables VRF devices.

config VSOCKMON
    tristate "Virtual vsock monitoring device"
    depends on VHOST_VSOCK
    ---help---
     This option enables a monitoring net device for vsock sockets. It is
     mostly intended for developers or support to debug vsock issues. If
     unsure, say N.

endif # NET_CORE

config SUNGEM_PHY
	tristate

source "drivers/net/arcnet/Kconfig"

source "drivers/atm/Kconfig"

source "drivers/net/caif/Kconfig"

source "drivers/net/dsa/Kconfig"

source "drivers/net/ethernet/Kconfig"

source "drivers/net/fddi/Kconfig"

source "drivers/net/hippi/Kconfig"

config NET_SB1000
	tristate "General Instruments Surfboard 1000"
	depends on PNP
	---help---
	  This is a driver for the General Instrument (also known as
	  NextLevel) SURFboard 1000 internal
	  cable modem. This is an ISA card which is used by a number of cable
	  TV companies to provide cable modem access. It's a one-way
	  downstream-only cable modem, meaning that your upstream net link is
	  provided by your regular phone modem.

	  At present this driver only compiles as a module, so say M here if
	  you have this card. The module will be called sb1000. Then read
	  <file:Documentation/networking/README.sb1000> for information on how
	  to use this module, as it needs special ppp scripts for establishing
	  a connection. Further documentation and the necessary scripts can be
	  found at:

	  <http://www.jacksonville.net/~fventuri/>
	  <http://home.adelphia.net/~siglercm/sb1000.html>
	  <http://linuxpower.cx/~cable/>

	  If you don't have this card, of course say N.

source "drivers/net/phy/Kconfig"

source "drivers/net/plip/Kconfig"

source "drivers/net/ppp/Kconfig"

source "drivers/net/slip/Kconfig"

source "drivers/s390/net/Kconfig"

source "drivers/net/usb/Kconfig"

source "drivers/net/wireless/Kconfig"

source "drivers/net/wimax/Kconfig"

source "drivers/net/wan/Kconfig"

source "drivers/net/ieee802154/Kconfig"

config XEN_NETDEV_FRONTEND
	tristate "Xen network device frontend driver"
	depends on XEN
	select XEN_XENBUS_FRONTEND
	default y
	help
	  This driver provides support for Xen paravirtual network
	  devices exported by a Xen network driver domain (often
	  domain 0).

	  The corresponding Linux backend driver is enabled by the
	  CONFIG_XEN_NETDEV_BACKEND option.

	  If you are compiling a kernel for use as Xen guest, you
	  should say Y here. To compile this driver as a module, chose
	  M here: the module will be called xen-netfront.

config XEN_NETDEV_BACKEND
	tristate "Xen backend network device"
	depends on XEN_BACKEND
	help
	  This driver allows the kernel to act as a Xen network driver
	  domain which exports paravirtual network devices to other
	  Xen domains. These devices can be accessed by any operating
	  system that implements a compatible front end.

	  The corresponding Linux frontend driver is enabled by the
	  CONFIG_XEN_NETDEV_FRONTEND configuration option.

	  The backend driver presents a standard network device
	  endpoint for each paravirtual network device to the driver
	  domain network stack. These can then be bridged or routed
	  etc in order to provide full network connectivity.

	  If you are compiling a kernel to run in a Xen network driver
	  domain (often this is domain 0) you should say Y here. To
	  compile this driver as a module, chose M here: the module
	  will be called xen-netback.

config VMXNET3
	tristate "VMware VMXNET3 ethernet driver"
	depends on PCI && INET
	depends on !(PAGE_SIZE_64KB || ARM64_64K_PAGES || \
		     IA64_PAGE_SIZE_64KB || MICROBLAZE_64K_PAGES || \
		     PARISC_PAGE_SIZE_64KB || PPC_64K_PAGES)
	help
	  This driver supports VMware's vmxnet3 virtual ethernet NIC.
	  To compile this driver as a module, choose M here: the
	  module will be called vmxnet3.

config FUJITSU_ES
	tristate "FUJITSU Extended Socket Network Device driver"
	depends on ACPI
	help
	  This driver provides support for Extended Socket network device
          on Extended Partitioning of FUJITSU PRIMEQUEST 2000 E2 series.

config THUNDERBOLT_NET
	tristate "Networking over Thunderbolt cable"
	depends on THUNDERBOLT && INET
	help
	  Select this if you want to create network between two
	  computers over a Thunderbolt cable. The driver supports Apple
	  ThunderboltIP protocol and allows communication with any host
	  supporting the same protocol including Windows and macOS.

	  To compile this driver a module, choose M here. The module will be
	  called thunderbolt-net.

source "drivers/net/hyperv/Kconfig"

config NETDEVSIM
	tristate "Simulated networking device"
	depends on DEBUG_FS
	depends on MAY_USE_DEVLINK
	help
	  This driver is a developer testing tool and software model that can
	  be used to test various control path networking APIs, especially
	  HW-offload related.

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

config NET_FAILOVER
	tristate "Failover driver"
	select FAILOVER
	help
	  This provides an automated failover mechanism via APIs to create
	  and destroy a failover master netdev and manages a primary and
	  standby slave netdevs that get registered via the generic failover
	  infrastructure. This can be used by paravirtual drivers to enable
	  an alternate low latency datapath. It alsoenables live migration of
	  a VM with direct attached VF by failing over to the paravirtual
	  datapath when the VF is unplugged.

endif # NETDEVICES
