# 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
	depends on TLS || TLS_DEVICE=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.rst> 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_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_BLAKE2S_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 MIPS
	select CRYPTO_CHACHA_S390 if S390
	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.rst>.  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_ACT_MIRRED || NFT_FWD_NETDEV
	select NET_REDIRECT
	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 BAREUDP
	tristate "Bare UDP Encapsulation"
	depends on INET
	depends on IPV6 || !IPV6
	select NET_UDP_TUNNEL
	select GRO_CELLS
	help
	  This adds a bare UDP tunnel module for tunnelling different
	  kinds of traffic like MPLS, IP, etc. inside a UDP tunnel.

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

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
	  will be called gtp.

config AMT
	tristate "Automatic Multicast Tunneling (AMT)"
	depends on INET && IP_MULTICAST
	depends on IPV6 || !IPV6
	select NET_UDP_TUNNEL
	help
	  This allows one to create AMT(Automatic Multicast Tunneling)
	  virtual interfaces that provide multicast tunneling.
	  There are two roles, Gateway, and Relay.
	  Gateway Encapsulates IGMP/MLD traffic from listeners to the Relay.
	  Gateway Decapsulates multicast traffic from the Relay to Listeners.
	  Relay Encapsulates multicast traffic from Sources to Gateway.
	  Relay Decapsulates IGMP/MLD traffic from Gateway.

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

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.rst> 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.rst> 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.rst> 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.

config MHI_NET
	tristate "MHI network driver"
	depends on MHI_BUS
	help
	  This is the network driver for MHI bus.  It can be used with
	  QCOM based WWAN modems for IP or QMAP/rmnet protocol (like SDX55).
	  Say Y or M.

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"

source "drivers/net/ipa/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/cable/sb1000.rst> 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/can/Kconfig"

source "drivers/net/mctp/Kconfig"

source "drivers/net/mdio/Kconfig"

source "drivers/net/pcs/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/wan/Kconfig"

source "drivers/net/ieee802154/Kconfig"

source "drivers/net/wwan/Kconfig"

config XEN_NETDEV_FRONTEND
	tristate "Xen network device frontend driver"
	depends on XEN
	select XEN_XENBUS_FRONTEND
	select PAGE_POOL
	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_LESS_THAN_64KB
	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
	depends on PSAMPLE || PSAMPLE=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.

config NETDEV_LEGACY_INIT
	bool
	depends on ISA
	help
	  Drivers that call netdev_boot_setup_check() should select this
	  symbol, everything else no longer needs it.

endif # NETDEVICES
