#
# Copyright (c) 2016 Intel Corporation.
#
# SPDX-License-Identifier: Apache-2.0
#

menu "Link layer options"

config NET_L2_DUMMY
	bool "Enable dummy l2 layer"
	default n
	default y if !NET_L2_ETHERNET && NET_TEST
	help
	Add a dummy L2 layer driver. This is usually only needed when
	simulating a network interface when running network stack inside QEMU.

config NET_L2_ETHERNET
	bool "Enable Ethernet support"
	default n
	help
	Add support for Ethernet, enabling selecting relevant hardware drivers.
	If NET_SLIP_TAP is selected, NET_L2_ETHERNET will enable to fully
	simulate Ethernet through SLIP.

config NET_DEBUG_L2_ETHERNET
	bool "Debug Ethernet L2 layer"
	default n
	default y if NET_LOG_GLOBAL
	depends on NET_LOG
	help
	Enables Ethernet L2 output debug messages

config NET_OFFLOAD
	bool "Offload IP stack [EXPERIMENTAL]"
	default n
	help
	Enables TCP/IP stack to be offload to a co-processor.

config NET_DEBUG_NET_OFFLOAD
	bool "Debug Net Offload Layer"
	default n
	default y if NET_LOG_GLOBAL
	depends on NET_LOG
	depends on NET_OFFLOAD
	help
	Enables offload TCP/IP stack output debug messages.

config NET_L2_BT
	bool "Enable Bluetooth support"
	select BT
	select BT_PERIPHERAL
	select BT_CENTRAL
	select BT_SMP
	select BT_L2CAP_DYNAMIC_CHANNEL
	select NET_6LO
	default n
	help
	  Enable Bluetooth driver that send and receives IPv6 packets,
	  does header compression on it and writes it to the
	  Bluetooth stack via L2CAP channel.

config NET_L2_BT_ZEP1656
	bool "***Workaround to work with Linux.***"
	depends on NET_L2_BT
	default n
	help
	This workaround is necessary to interoperate with Linux up to 4.10 but
	it might not be compliant with RFC 7668 as it cause the stack to skip
	Neighbor Discovery cache causing the destination link address to be
	omitted. For more details why this is needed see:
	https://jira.zephyrproject.org/browse/ZEP-1656

config NET_L2_BT_SEC_LEVEL
	int "Security level of Bluetooth Link"
	depends on NET_L2_BT
	default 1
	range 1 4
	help
	Security level of Bluetooth Link:
	Level 1 (BT_SECURITY_LOW) = No encryption or authentication required
	Level 2 (BT_SECURITY_MEDIUM) = Only encryption required
	Level 3 (BT_SECURITY_HIGH) = Encryption and authentication required
	Level 4 (BT_SECURITY_FIPS) = Secure connection required

config NET_DEBUG_L2_BT
	bool "Debug Bluetooth L2 layer"
	default n
	default y if NET_LOG_GLOBAL
	depends on NET_LOG
	depends on NET_L2_BT
	help
	Enables Bluetooth L2 output debug messages

config NET_L2_BT_MGMT
	bool "Enable Bluetooth Network Management support"
	depends on NET_L2_BT
	select NET_MGMT
	select NET_MGMT_EVENT
	default n

config NET_L2_BT_SHELL
	bool "Enable Bluetooth shell module"
	default n
	select CONSOLE_SHELL
	select NET_L2_BT_MGMT
	help
	This can be used for testing Bluetooth management commands through the
	console via a shell module named "net_bt".

source "subsys/net/ip/l2/ieee802154/Kconfig"

config NET_ARP
	bool "Enable ARP"
	default y
	depends on NET_IPV4 && NET_L2_ETHERNET
	help
	Enable ARP support. This is necessary on hardware that requires it to
	get IPv4 working (like Ethernet devices).

config NET_ARP_TABLE_SIZE
	int "Number of entries in ARP table."
	depends on NET_ARP
	default 2
	help
	Each entry in the ARP table consumes 22 bytes of memory.

config NET_DEBUG_ARP
	bool "Debug IPv4 ARP"
	depends on NET_ARP && NET_LOG
	default n
	default y if NET_LOG_GLOBAL
	help
	Enables core ARP code part to output debug messages

endmenu
