#
# 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_SLIP_TUN
	help
	Add a dummy L2 layer driver, usually in case you need SLIP in
	TUN mode.

config NET_L2_ETHERNET
	bool "Enable Ethernet support"
	default n
	help
	Add support for Ethernet, enabling selecting relevant hardware drivers.
	If 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
	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
	depends on NET_LOG
	depends on NET_OFFLOAD
	help
	Enables offload TCP/IP stack output debug messages.

config NET_L2_BLUETOOTH
	bool "Enable Bluetooth support"
	select BLUETOOTH
	select BLUETOOTH_PERIPHERAL
	select BLUETOOTH_CENTRAL
	select BLUETOOTH_SMP
	select BLUETOOTH_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_BLUETOOTH_ZEP1656
	bool "***Workaround to work with Linux.***"
	depends on NET_L2_BLUETOOTH
	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_BLUETOOTH_SEC_LEVEL
	int "Security level of Bluetooth Link"
	depends on NET_L2_BLUETOOTH
	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_BLUETOOTH
	bool "Debug Bluetooth L2 layer"
	default n
	depends on NET_LOG
	depends on NET_L2_BLUETOOTH
	help
	Enables Bluetooth L2 output debug messages

config NET_L2_BLUETOOTH_MGMT
	bool "Enable Bluetooth Network Management support"
	depends on NET_L2_BLUETOOTH
	select NET_MGMT
	select NET_MGMT_EVENT
	default n

config NET_L2_BLUETOOTH_SHELL
	bool "Enable Bluetooth shell module"
	default n
	select CONSOLE_SHELL
	select NET_L2_BLUETOOTH_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
	help
	Enables core ARP code part to output debug messages

endmenu
