# 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.

if NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET

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

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

endif # NET_DEBUG_L2_IEEE802154_DISPLAY_PACKET

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
