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

menuconfig NET_L2_IEEE802154
	bool "Enable IEEE 802.15.4 Radio"
	help
	  Add support for low rate WPAN IEEE 802.15.4 technology.

if NET_L2_IEEE802154

config NET_L2_IEEE802154_MGMT
	bool
	select NET_MGMT
	select NET_MGMT_EVENT

config NET_L2_IEEE802154_SUB_GHZ
	bool
	help
	  Enable support for Sub-GHz devices. This will add a tiny bit more
	  logic in L2 code for channel management. This option is automatically
	  selected when relevant device driver is enabled.

module = NET_L2_IEEE802154
module-dep = NET_LOG
module-str = Log level for IEEE 802.15.4
module-help = Enables IEEE 802.15.4 code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

config NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET
	bool "Enable IEEE 802.15.4 packet display"
	depends on NET_LOG
	help
	  Enable printing out in/out 802.15.4 packets. This is extremely
	  verbose, do not enable this unless you know what you are doing.

choice
	prompt "Which packet do you want to print-out?"
	default NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET_FULL
	depends on NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET

config NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET_FULL
	bool "Print-out both RX and TX packets"
	help
	  This will print-out both received and transmitted packets.

config NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET_RX
	bool "Print-out only RX packets"
	help
	  This will print-out received packets only.

config NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET_TX
	bool "Print-out only TX packets"
	help
	  This will print-out transmitted packets only.

endchoice

config NET_L2_IEEE802154_ACK_REPLY
	bool "Enable IEEE 802.15.4 ACK reply logic"
	help
	  Enable inner stack's logic on handling ACK request. Note that
	  if the hw driver has an AUTOACK feature, this is then unnecessary.

choice
	prompt "Device features level support"
	default NET_L2_IEEE802154_RFD
	help
	  Select which features level you want on the device. Depending on it,
	  the device might expose more or less 802.15.4 protocol features.
	  Only RFD is supported for now.

config NET_L2_IEEE802154_RFD
	bool "Support Reduced Functionality Device level"
	select NET_L2_IEEE802154_MGMT
	help
	  This is the level for PAN device, not PAN coordinator. This will make
	  possible to do active and/or passive scans, as well as associating
	  and disassociating to/from a PAN. Current support is very fragile,
	  thus it is not set as the default level.
endchoice

config NET_L2_IEEE802154_SHELL
	bool "Enable IEEE 802.15.4 shell module"
	select SHELL
	depends on NET_L2_IEEE802154_RFD
	help
	  This can be used for testing 15.4 through the console via exposing
	  a shell module named "ieee15_4".

config NET_L2_IEEE802154_FRAGMENT
	bool "Enable 802.15.4 fragmentation support"
	default y
	depends on NET_6LO
	help
	  If IPv6 packets size more than 802.15.4 MTU, packet is fragmented
	  and reassemble incoming packets according to RFC4944/6282.

config NET_L2_IEEE802154_FRAGMENT_REASS_CACHE_SIZE
	int "IEEE 802.15.4 Reassembly cache size"
	depends on NET_L2_IEEE802154_FRAGMENT
	default 1
	help
	  Simultaneously reassemble 802.15.4 fragments depending on
	  cache size.

config NET_L2_IEEE802154_REASSEMBLY_TIMEOUT
	int "IEEE 802.15.4 Reassembly timeout in seconds"
	depends on NET_L2_IEEE802154_FRAGMENT
	default 5
	range 1 60
	help
	  Reassembly timer will start as soon as first packet received
	  from peer. Reassembly should be finished within a given time.
	  Otherwise all accumulated fragments are dropped.

config NET_L2_IEEE802154_SECURITY
	bool "Enable IEEE 802.15.4 security [EXPERIMENTAL]"
	help
	  Enable 802.15.4 frame security handling, in order to bring data
	  confidentiality and authenticity.

config NET_L2_IEEE802154_SECURITY_CRYPTO_DEV_NAME
	string "Crypto device name used for <en/de>cryption"
	default ""
	depends on NET_L2_IEEE802154_SECURITY
	help
	  This option should be used to set the crypto device name that
	  IEEE 802.15.4 soft MAC will use to run authentication, encryption and
	  decryption operations on incoming/outgoing frames.

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

endif
