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

menu "Link layer options"

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_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_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://github.com/zephyrproject-rtos/zephyr/issues/3111

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/ethernet/Kconfig"

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

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

config NET_L2_WIFI_MGMT
	bool "Enable WiFi Management support"
	default n
	select NET_MGMT
	select NET_MGMT_EVENT
	select NET_MGMT_EVENT_INFO
	help
	Add support for WiFi Management interface.

config NET_DEBUG_L2_WIFI_MGMT
	bool "Debug WiFi Management layer"
	default n
	default y if NET_LOG_GLOBAL
	depends on NET_LOG && NET_L2_WIFI_MGMT
	help
	Enables WiFi management interface to output debug messages

config NET_L2_WIFI_SHELL
	bool "Enable WiFi shell module"
	default n
	select NET_L2_WIFI_MGMT
	help
	  This can be used for controlling WiFi through the console via
	  exposing a shell module named "wifi".

endmenu
