# 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 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"
	depends on NET_IPV6
	depends on BT
	depends on BT_PERIPHERAL
	depends on BT_CENTRAL
	depends on BT_SMP
	depends on BT_L2CAP_DYNAMIC_CHANNEL
	select NET_6LO
	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.

if NET_L2_BT
config NET_L2_BT_ZEP1656
	bool "***Workaround to work with Linux.***"
	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"
	default 1
	range 1 4
	help
	  Security level of Bluetooth Link:
	  Level 1 (BT_SECURITY_L1) = No encryption or authentication required
	  Level 2 (BT_SECURITY_L2) = Only encryption required
	  Level 3 (BT_SECURITY_L3) = Encryption and authentication required
	  Level 4 (BT_SECURITY_L4) = LE Secure Connection required

module = NET_L2_BT
module-dep = NET_LOG
module-str = Log level for Bluetooth L2 layer
module-help = Enables Bluetooth L2 to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"
endif

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

config NET_L2_BT_SHELL
	bool "Enable Bluetooth shell module"
	select 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/l2/virtual/Kconfig"

source "subsys/net/l2/ethernet/Kconfig"

source "subsys/net/l2/ppp/Kconfig"

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

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

source "subsys/net/l2/canbus/Kconfig"

config NET_L2_WIFI_MGMT
	bool "Enable Wi-Fi Management support"
	select NET_MGMT
	select NET_MGMT_EVENT
	select NET_MGMT_EVENT_INFO
	help
	  Add support for Wi-Fi Management interface.

if NET_L2_WIFI_MGMT
module = NET_L2_WIFI_MGMT
module-dep = NET_LOG
module-str = Log level for Wi-Fi management layer
module-help = Enables Wi-Fi management interface to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"
endif # NET_L2_WIFI_MGMT

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

endmenu
