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

menu "Link layer options"

config NET_L2_DUMMY
	bool "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 "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 "Bluetooth Network Management support"
	depends on NET_L2_BT
	select NET_MGMT
	select NET_MGMT_EVENT

config NET_L2_BT_SHELL
	bool "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"

config NET_L2_PHY_IEEE802154
	bool
	help
	  A common config for all IEEE 802.15.4 based L2 implementations.

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

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

config NET_L2_CUSTOM_IEEE802154
	bool "Custom IEEE802154 L2"
	select NET_L2_PHY_IEEE802154
	help
	  Enable custom IEEE802154 based L2. Zephyr does not provide
	  implementation for this L2 - users can implement their own L2 using
	  this symbols, on top of the IEEE802154 radio driver.

config NET_L2_CUSTOM_IEEE802154_MTU
	int "MTU for the custom IEEE802154 L2"
	depends on NET_L2_CUSTOM_IEEE802154
	default 127

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

config NET_L2_WIFI_MGMT
	bool "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 "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".

config NET_L2_PTP
	bool "PTP L2 support"
	select NET_PKT_TIMESTAMP
	select PTP_CLOCK
	help
	  Add support for PTP L2 capabilities. Required by gPTP.

endmenu
