# SPDX-License-Identifier: GPL-2.0-only
#
# 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 WIREGUARD
	tristate "WireGuard secure network tunnel"
	depends on NET && INET
	depends on IPV6 || !IPV6
	select NET_UDP_TUNNEL
	select DST_CACHE
	select CRYPTO
	select CRYPTO_LIB_CURVE25519
	select CRYPTO_LIB_CHACHA20POLY1305
	select CRYPTO_LIB_BLAKE2S
	select CRYPTO_CHACHA20_X86_64 if X86 && 64BIT
	select CRYPTO_POLY1305_X86_64 if X86 && 64BIT
	select CRYPTO_BLAKE2S_X86 if X86 && 64BIT
	select CRYPTO_CURVE25519_X86 if X86 && 64BIT
	select ARM_CRYPTO if ARM
	select ARM64_CRYPTO if ARM64
	select CRYPTO_CHACHA20_NEON if (ARM || ARM64) && KERNEL_MODE_NEON
	select CRYPTO_POLY1305_NEON if ARM64 && KERNEL_MODE_NEON
	select CRYPTO_POLY1305_ARM if ARM
	select CRYPTO_CURVE25519_NEON if ARM && KERNEL_MODE_NEON
	select CRYPTO_CHACHA_MIPS if CPU_MIPS32_R2
	select CRYPTO_POLY1305_MIPS if CPU_MIPS32 || (CPU_MIPS64 && 64BIT)
	help
	  WireGuard is a secure, fast, and easy to use replacement for IPSec
	  that uses modern cryptography and clever networking tricks. It's
	  designed to be fairly general purpose and abstract enough to fit most
	  use cases, while at the same time remaining extremely simple to
	  configure. See www.wireguard.com for more info.

	  It's safe to say Y or M here, as the driver is very lightweight and
	  is only in use when an administrator chooses to add an interface.

config WIREGUARD_DEBUG
	bool "Debugging checks and verbose messages"
	depends on WIREGUARD
	help
	  This will write log messages for handshake and other events
	  that occur for a WireGuard interface. It will also perform some
	  extra validation checks and unit tests at various points. This is
	  only useful for debugging.

	  Say N here unless you know what you're doing.

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_L3S
	depends on NETFILTER
	depends on IPVLAN
	def_bool y
	select NET_L3_MASTER_DEV

config IPVLAN
	tristate "IP-VLAN support"
	depends on INET
	depends on IPV6 || !IPV6
	---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
	depends on IPV6 || !IPV6
	select NET_UDP_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/device_drivers/sb1000.txt> 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 USB4_NET
	tristate "Networking over USB4 and Thunderbolt cables"
	depends on USB4 && INET
	help
	  Select this if you want to create network between two computers
	  over a USB4 and Thunderbolt cables. 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 INET
	depends on IPV6 || IPV6=n
	select NET_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 also enables live migration of
	  a VM with direct attached VF by failing over to the paravirtual
	  datapath when the VF is unplugged.

endif # NETDEVICES
