# Bluetooth mesh configuration options

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

menuconfig BT_MESH
	bool "Bluetooth mesh support"
	select TINYCRYPT
	select TINYCRYPT_AES
	select TINYCRYPT_AES_CMAC
	select BT_HOST_CCM
	depends on BT_OBSERVER && BT_BROADCASTER
	help
	  This option enables Bluetooth mesh support. The specific
	  features that are available may depend on other features
	  that have been enabled in the stack, such as GATT support.

if BT_MESH

# Virtual option enabled whenever Generic Provisioning layer is needed
config BT_MESH_PROV
	bool

config BT_MESH_PROV_DEVICE
	bool "Provisioning device role support"
	depends on BT_MESH_PROV
	default y
	help
	  Enable this option to allow the device to be provisioned into a mesh network.

config BT_MESH_PROV_OOB_PUBLIC_KEY
	bool "OOB Public key support"
	select TINYCRYPT_ECC_DH
	depends on BT_MESH_PROV_DEVICE
	help
	  Enable this option if public key is to be exchanged via Out of Band (OOB) technology.

config BT_MESH_PB_ADV
	bool "Provisioning support using the advertising bearer (PB-ADV)"
	select BT_MESH_PROV
	default y
	help
	  Enable this option to allow the device to be provisioned over
	  the advertising bearer.

config BT_MESH_UNPROV_BEACON_INT
	int
	prompt "The interval (in seconds) to send the unprovisioned beacon" if BT_MESH_PB_ADV
	default 5
	range 1 10
	help
	  This option specifies the interval (in seconds) at which the
	  device sends unprovisioned beacon.

config BT_MESH_PB_ADV_RETRANS_TIMEOUT
	int "Timeout value of retransmit provisioning PDUs"
	default 500
	range 100 800
	help
	  Timeout value of retransmit provisioning PDUs.

config BT_MESH_PROVISIONER
	bool "Provisioner support"
	depends on BT_MESH_PROV
	depends on BT_MESH_PB_ADV
	help
	  Enable this option to have support for provisioning remote devices.

config BT_MESH_CDB
	bool "Mesh Configuration Database [EXPERIMENTAL]"
	default y if BT_MESH_PROVISIONER
	select EXPERIMENTAL

if BT_MESH_CDB

config BT_MESH_CDB_NODE_COUNT
	int "Maximum number of nodes in the database"
	default 8
	range 1 4096
	help
	  This option specifies how many nodes each network can at most
	  save in the configuration database.

config BT_MESH_CDB_SUBNET_COUNT
	int "Maximum number of subnets in the database"
	default 1
	range 1 4096
	help
	  This option specifies how many subnets that can at most be
	  saved in the configuration database.

config BT_MESH_CDB_APP_KEY_COUNT
	int "Maximum number of application keys in the database"
	default 1
	range 1 4096
	help
	  This option specifies how many application keys that can at most
	  be saved in the configuration database.

endif # BT_MESH_CDB

if BT_CONN

# Virtual option enabled whenever any Proxy protocol is needed
config BT_MESH_PROXY
	bool

config BT_MESH_GATT
	bool

config BT_MESH_PROXY_MSG_LEN
	int
	depends on BT_MESH_GATT
	default 66 if BT_MESH_PB_GATT
	default 33 if BT_MESH_GATT_PROXY

config BT_MESH_GATT_SERVER
	bool
	select BT_MESH_GATT
	select BT_GATT_DYNAMIC_DB

config BT_MESH_PB_GATT
	bool "Provisioning support using GATT (PB-GATT)"
	select BT_MESH_GATT_SERVER
	select BT_MESH_PROV
	help
	  Enable this option to allow the device to be provisioned over
	  GATT.

config BT_MESH_PB_GATT_USE_DEVICE_NAME
	bool "Include Bluetooth device name in scan response"
	depends on BT_MESH_PB_GATT
	default y
	help
	  This option includes GAP device name in scan response when
	  the PB-GATT is enabled.

config BT_MESH_GATT_PROXY
	bool "GATT Proxy Service support"
	select BT_MESH_GATT_SERVER
	select BT_MESH_PROXY
	help
	  This option enables support for the Mesh GATT Proxy Service,
	  i.e. the ability to act as a proxy between a Mesh GATT Client
	  and a Mesh network.

config BT_MESH_GATT_PROXY_ENABLED
	bool "GATT Proxy enabled"
	depends on BT_MESH_GATT_PROXY
	default y
	help
	  Controls whether the GATT Proxy feature is enabled by default.
	  Can be changed through runtime configuration.

config BT_MESH_NODE_ID_TIMEOUT
	int "Node Identity advertising timeout"
	depends on BT_MESH_GATT_PROXY
	range 1 60
	default 60
	help
	  This option determines for how long the local node advertises
	  using Node Identity. The given value is in seconds. The
	  specification limits this to 60 seconds, and implies that to
	  be the appropriate value as well, so just leaving this as the
	  default is the safest option.

config BT_MESH_PROXY_USE_DEVICE_NAME
	bool "Include Bluetooth device name in scan response"
	depends on BT_MESH_GATT_PROXY
	help
	  This option includes GAP device name in scan response when
	  the GATT Proxy feature is enabled.

config BT_MESH_PROXY_FILTER_SIZE
	int "Maximum number of filter entries per Proxy Client"
	default 3
	range 1 32767
	depends on BT_MESH_GATT_PROXY
	help
	  This option specifies how many Proxy Filter entries the local
	  node supports.

endif # BT_CONN

config BT_MESH_ACCESS_LAYER_MSG
	bool "Enable direct Bluetooth message access layer messages"
	help
	  This option allows the applicaiton to directly access
	  Bluetooth access layer messages without the need to
	  instantiate Bluetooth mesh models.

config BT_MESH_SELF_TEST
	bool "Perform self-tests"
	help
	  This option adds extra self-tests which are run every time
	  mesh networking is initialized.

config BT_MESH_IV_UPDATE_TEST
	bool "Test the IV Update Procedure"
	help
	  This option removes the 96 hour limit of the IV Update
	  Procedure and lets the state be changed at any time.

config BT_MESH_SUBNET_COUNT
	int "Maximum number of mesh subnets per network"
	default 1
	range 1 4096
	help
	  This option specifies how many subnets a Mesh network can
	  participate in at the same time.

config BT_MESH_APP_KEY_COUNT
	int "Maximum number of application keys per network"
	default 1
	range 1 4096
	help
	  This option specifies how many application keys the device can
	  store per network.

config BT_MESH_MODEL_KEY_COUNT
	int "Maximum number of application keys per model"
	default 1
	range 1 4096
	help
	  This option specifies how many application keys each model can
	  at most be bound to.

config BT_MESH_MODEL_GROUP_COUNT
	int "Maximum number of group address subscriptions per model"
	default 1
	range 1 4096
	help
	  This option specifies how many group addresses each model can
	  at most be subscribed to.

config BT_MESH_MODEL_VND_MSG_CID_FORCE
	bool "Force vendor model to use the corresponding CID field message"
	default y
	help
	  This option forces vendor model to use messages for the
	  corresponding CID field.

config BT_MESH_LABEL_COUNT
	int "Maximum number of Label UUIDs used for Virtual Addresses"
	default 1
	range 0 4096
	help
	  This option specifies how many Label UUIDs can be stored.

config BT_MESH_CRPL
	int "Maximum capacity of the replay protection list"
	default 10
	range 2 65535
	help
	  This options specifies the maximum capacity of the replay
	  protection list. This option is similar to the network message
	  cache size, but has a different purpose.

config BT_MESH_MSG_CACHE_SIZE
	int "Network message cache size"
	default 10
	range 2 65535
	help
	  Number of messages that are cached for the network. This helps
	  prevent unnecessary decryption operations and unnecessary
	  relays. This option is similar to the replay protection list,
	  but has a different purpose.

config BT_MESH_ADV_BUF_COUNT
	int "Number of advertising buffers"
	default 6
	range 1 256
	help
	  Number of advertising buffers available. This should be chosen
	  based on what kind of features the local node should have. E.g.
	  a relay will perform better the more buffers it has. Another
	  thing to consider is outgoing segmented messages. There must
	  be at least three more advertising buffers than the maximum
	  supported outgoing segment count (BT_MESH_TX_SEG_MAX).

choice BT_MESH_ADV
	prompt "Advertiser mode"
	default BT_MESH_ADV_EXT if BT_EXT_ADV
	default BT_MESH_ADV_LEGACY

config BT_MESH_ADV_LEGACY
	bool "Legacy advertising"
	help
	  Use legacy advertising commands for mesh sending. Legacy
	  advertising is significantly slower than the extended advertising, but
	  is supported by all controllers.

config BT_MESH_ADV_EXT
	bool "Extended advertising"
	depends on BT_CTLR_ADV_EXT || !BT_CTLR
	depends on BT_EXT_ADV
	help
	  Use extended advertising commands for operating the advertiser.
	  Extended advertising is faster and uses less memory than legacy
	  advertising, but isn't supported by all controllers.

endchoice

if BT_MESH_ADV_EXT

config BT_MESH_RELAY_ADV_SETS
	int "Maximum of simultaneous relay message support"
	default 0
	range 0 BT_EXT_ADV_MAX_ADV_SET
	depends on BT_MESH_RELAY
	help
	  Maximum of simultaneous relay message support. Requires controller support
	  multiple advertising sets.

config BT_MESH_ADV_EXT_GATT_SEPARATE
	bool "Use a separate extended advertising set for GATT Server Advertising"
	depends on BT_MESH_GATT_SERVER
	help
	  Use a separate extended advertising set for GATT Server Advertising,
	  otherwise will be used a shared advertising set.

endif # BT_MESH_ADV_EXT

config BT_MESH_ADV_STACK_SIZE
	int "Mesh advertiser thread stack size"
	depends on BT_MESH_ADV_LEGACY
	default 1024 if BT_HOST_CRYPTO
	default 768
	help
	  Size of bt mesh adv thread stack.

	  NOTE: This is an advanced setting and should not be changed unless
	  absolutely necessary

config BT_MESH_ADV_PRIO
	int "Mesh advertiser thread priority"
	depends on BT_MESH_ADV_LEGACY
	default 7
	help
	  Priority of bt mesh adv thread.

	  NOTE: This is an advanced setting and should not be changed unless
	  absolutely necessary

config BT_MESH_IV_UPDATE_SEQ_LIMIT
	hex "Sequence number limit to start iv update"
	default 0x800000
	range 0x000001 0xFFFFFE
	help
	  This option specifies the sequence number value to start iv update.

config BT_MESH_IVU_DIVIDER
	int "Divider for IV Update state refresh timer"
	default 4
	range 2 96
	help
	  When the IV Update state enters Normal operation or IV Update
	  in Progress, we need to keep track of how many hours has passed
	  in the state, since the specification requires us to remain in
	  the state at least for 96 hours (Update in Progress has an
	  additional upper limit of 144 hours).

	  In order to fulfill the above requirement, even if the node might
	  be powered off once in a while, we need to store persistently
	  how many hours the node has been in the state. This doesn't
	  necessarily need to happen every hour (thanks to the flexible
	  duration range). The exact cadence will depend a lot on the
	  ways that the node will be used and what kind of power source it
	  has.

	  Since there is no single optimal answer, this configuration
	  option allows specifying a divider, i.e. how many intervals
	  the 96 hour minimum gets split into. After each interval the
	  duration that the node has been in the current state gets
	  stored to flash. E.g. the default value of 4 means that the
	  state is saved every 24 hours (96 / 4).

config BT_MESH_TX_SEG_MSG_COUNT
	int "Maximum number of simultaneous outgoing segmented messages"
	default 1
	range 1 255
	help
	  Maximum number of simultaneous outgoing multi-segment and/or
	  reliable messages.

config BT_MESH_RX_SEG_MSG_COUNT
	int "Maximum number of simultaneous incoming segmented messages"
	default 1
	range 1 255
	help
	  Maximum number of simultaneous incoming multi-segment and/or
	  reliable messages.

config BT_MESH_SEG_BUFS
	int "Number of segment buffers available"
	default 64
	range BT_MESH_RX_SEG_MAX 16384 if BT_MESH_RX_SEG_MAX > \
					  BT_MESH_TX_SEG_MAX
	range BT_MESH_TX_SEG_MAX 16384
	help
	  The incoming and outgoing segmented messages allocate their
	  segments from the same pool. Each segment is a 12 byte block,
	  and may only be used by one message at the time.

	  Outgoing messages will allocate their segments at the start of the
	  transmission, and release them one by one as soon as they have been
	  acknowledged by the receiver. Incoming messages allocate all their
	  segments at the start of the transaction, and won't release them until
	  the message is fully received.

config BT_MESH_RX_SEG_MAX
	int "Maximum number of segments in incoming messages"
	default 3
	range 2 32
	help
	  Maximum number of segments supported for incoming messages.
	  This value should typically be fine-tuned based on what
	  models the local node supports, i.e. what's the largest
	  message payload that the node needs to be able to receive.
	  This value affects memory and call stack consumption, which
	  is why the default is lower than the maximum that the
	  specification would allow (32 segments).

	  The maximum incoming SDU size is 12 times this number (out of
	  which 4 or 8 bytes is used for the Transport Layer MIC). For
	  example, 5 segments means the maximum SDU size is 60 bytes,
	  which leaves 56 bytes for application layer data using a
	  4-byte MIC and 52 bytes using an 8-byte MIC.

config BT_MESH_TX_SEG_MAX
	int "Maximum number of segments in outgoing messages"
	default 3
	range 2 32
	help
	  Maximum number of segments supported for outgoing messages.
	  This value should typically be fine-tuned based on what
	  models the local node supports, i.e. what's the largest
	  message payload that the node needs to be able to send.
	  This value affects memory consumption, which is why the
	  default is lower than the maximum that the specification
	  would allow (32 segments).

	  The maximum outgoing SDU size is 12 times this number (out of
	  which 4 or 8 bytes is used for the Transport Layer MIC). For
	  example, 5 segments means the maximum SDU size is 60 bytes,
	  which leaves 56 bytes for application layer data using a
	  4-byte MIC and 52 bytes using an 8-byte MIC.

config BT_MESH_DEFAULT_TTL
	int "Default TTL value"
	default 7
	range 0 128
	help
	  Controls the default TTL value for outgoing messages. Can be changed
	  through runtime configuration.

config BT_MESH_LOOPBACK_BUFS
	int "Number of loopback buffers"
	default 3
	help
	  The number of buffers allocated for the network loopback mechanism.
	  Loopback is used when the device sends messages to itself.

config BT_MESH_TX_SEG_RETRANS_COUNT
	int "Transport message segment retransmit attempts"
	default 4
	range 1 8
	help
	  Maximum number of transport message segment retransmit attempts
	  for outgoing segment message.

config BT_MESH_TX_SEG_RETRANS_TIMEOUT_UNICAST
	int "Transport message segment retransmit interval for unicast messages"
	default 400
	range 200 500
	help
	  Maximum time of retransmit segment message to unicast address.

config BT_MESH_TX_SEG_RETRANS_TIMEOUT_GROUP
	int "Transport message segment retransmit interval for group messages"
	default 50
	range 20 200
	help
	  Maximum time of retransmit segment message to group address.

config BT_MESH_NETWORK_TRANSMIT_COUNT
	int "Network Transmit Count"
	default 2
	range 0 7
	help
	  Controls the initial number of retransmissions of original messages,
	  in addition to the first transmission. Can be changed through runtime
	  configuration.

config BT_MESH_NETWORK_TRANSMIT_INTERVAL
	int "Network Transmit Interval"
	default 20
	range 10 330
	help
	  Controls the initial interval between retransmissions of original
	  messages, in milliseconds. Can be changed through runtime
	  configuration.

menuconfig BT_MESH_RELAY
	bool "Relay support"
	help
	  Support for acting as a Mesh Relay Node.

if BT_MESH_RELAY

config BT_MESH_RELAY_ENABLED
	bool "Relay enabled"
	default y
	help
	  Controls whether the Mesh Relay feature is enabled by default. Can be
	  changed through runtime configuration.

config BT_MESH_RELAY_RETRANSMIT_COUNT
	int "Relay Retransmit Count"
	default 2
	range 0 7
	help
	  Controls the initial number of retransmissions of relayed messages, in
	  addition to the first transmission. Can be changed through runtime
	  configuration.

config BT_MESH_RELAY_RETRANSMIT_INTERVAL
	int "Relay Retransmit Interval"
	default 20
	range 10 330
	help
	  Controls the initial interval between retransmissions of relayed
	  messages, in milliseconds. Can be changed through runtime
	  configuration.

endif

config BT_MESH_BEACON_ENABLED
	bool "Secure network beacon enabled"
	default y
	help
	  Controls whether the Secure network beacon feature is enabled by
	  default. Can be changed through runtime configuration.

config BT_MESH_LOW_POWER
	bool "Support for Low Power features"
	help
	  Enable this option to be able to act as a Low Power Node.

if BT_MESH_LOW_POWER

config BT_MESH_LPN_ESTABLISHMENT
	bool "Perform Friendship establishment using low power"
	default y
	help
	  Perform the Friendship establishment using low power, with
	  the help of a reduced scan duty cycle. The downside of this
	  is that the node may miss out on messages intended for it
	  until it has successfully set up Friendship with a Friend
	  node.

config BT_MESH_LPN_AUTO
	bool "Automatically start looking for Friend nodes once provisioned"
	default y
	help
	  Automatically enable LPN functionality once provisioned and start
	  looking for Friend nodes. If this option is disabled LPN mode
	  needs to be manually enabled by calling bt_mesh_lpn_set(true).

config BT_MESH_LPN_AUTO_TIMEOUT
	int "Time from last received message before going to LPN mode"
	default 15
	range 0 3600
	depends on BT_MESH_LPN_AUTO
	help
	  Time in seconds from the last received message, that the node
	  will wait before starting to look for Friend nodes.

config BT_MESH_LPN_RETRY_TIMEOUT
	int "Retry timeout for Friend requests"
	default 8
	range 1 3600
	help
	  Time in seconds between Friend Requests, if a previous Friend
	  Request did not receive any acceptable Friend Offers.

config BT_MESH_LPN_RSSI_FACTOR
	int "RSSIFactor, used in the Friend Offer Delay calculation"
	range 0 3
	default 0
	help
	  The contribution of the RSSI measured by the Friend node used
	  in Friend Offer Delay calculations. 0 = 1, 1 = 1.5, 2 = 2, 3 = 2.5.

config BT_MESH_LPN_RECV_WIN_FACTOR
	int "ReceiveWindowFactor, used in the Friend Offer Delay calculation"
	range 0 3
	default 0
	help
	  The contribution of the supported Receive Window used in
	  Friend Offer Delay calculations. 0 = 1, 1 = 1.5, 2 = 2, 3 = 2.5.

config BT_MESH_LPN_MIN_QUEUE_SIZE
	int "Minimum size of acceptable friend queue (MinQueueSizeLog)"
	range 1 7
	default 1
	help
	  The MinQueueSizeLog field is defined as log_2(N), where N is
	  the minimum number of maximum size Lower Transport PDUs that
	  the Friend node can store in its Friend Queue. As an example,
	  MinQueueSizeLog value 1 gives N = 2, and value 7 gives N = 128.

config BT_MESH_LPN_RECV_DELAY
	int "Receive delay requested by the local node"
	range 10 255
	default 100
	help
	  The ReceiveDelay is the time between the Low Power node
	  sending a request and listening for a response. This delay
	  allows the Friend node time to prepare the response. The value
	  is in units of milliseconds.

config BT_MESH_LPN_POLL_TIMEOUT
	int "The value of the PollTimeout timer"
	range 10 244735
	default 300
	help
	  PollTimeout timer is used to measure time between two
	  consecutive requests sent by the Low Power node. If no
	  requests are received by the Friend node before the
	  PollTimeout timer expires, then the friendship is considered
	  terminated. The value is in units of 100 milliseconds, so e.g.
	  a value of 300 means 30 seconds.

config BT_MESH_LPN_INIT_POLL_TIMEOUT
	int "The starting value of the PollTimeout timer"
	range 10 BT_MESH_LPN_POLL_TIMEOUT
	default BT_MESH_LPN_POLL_TIMEOUT
	help
	  The initial value of the PollTimeout timer when Friendship
	  gets established for the first time. After this the timeout
	  will gradually grow toward the actual PollTimeout, doubling
	  in value for each iteration. The value is in units of 100
	  milliseconds, so e.g. a value of 300 means 30 seconds.

config BT_MESH_LPN_SCAN_LATENCY
	int "Latency for enabling scanning"
	range 0 50
	default 10
	help
	  Latency in milliseconds that it takes to enable scanning. This
	  is in practice how much time in advance before the Receive Window
	  that scanning is requested to be enabled.

config BT_MESH_LPN_GROUPS
	int "Number of groups the LPN can subscribe to"
	range 0 16384
	default 8
	help
	  Maximum number of groups that the LPN can subscribe to.

config BT_MESH_LPN_SUB_ALL_NODES_ADDR
	bool "Automatically subscribe all nodes address"
	help
	  Automatically subscribe all nodes address when friendship
	  established.

endif # BT_MESH_LOW_POWER

config BT_MESH_FRIEND
	bool "Support for acting as a Friend Node"
	help
	  Enable this option to be able to act as a Friend Node.

if BT_MESH_FRIEND

config BT_MESH_FRIEND_ENABLED
	bool "Friend feature enabled"
	default y
	help
	  Controls whether the Friend feature is enabled by default. Can be
	  changed through runtime configuration.

config BT_MESH_FRIEND_RECV_WIN
	int "Friend Receive Window"
	range 1 255
	default 255
	help
	  Receive Window in milliseconds supported by the Friend node.

config BT_MESH_FRIEND_QUEUE_SIZE
	int "Minimum number of buffers supported per Friend Queue"
	range 2 65536
	default 16
	help
	  Minimum number of buffers available to be stored for each
	  local Friend Queue.

config BT_MESH_FRIEND_SUB_LIST_SIZE
	int "Friend Subscription List Size"
	range 0 1023
	default 3
	help
	  Size of the Subscription List that can be supported by a
	  Friend node for a Low Power node.

config BT_MESH_FRIEND_LPN_COUNT
	int "Number of supported LPN nodes"
	range 1 1000
	default 2
	help
	  Number of Low Power Nodes the Friend can have a Friendship
	  with simultaneously.

config BT_MESH_FRIEND_SEG_RX
	int "Number of incomplete segment lists per LPN"
	range 1 1000
	default 1
	help
	  Number of incomplete segment lists that we track for each LPN
	  that we are Friends for. In other words, this determines how
	  many elements we can simultaneously be receiving segmented
	  messages from when the messages are going into the Friend queue.

endif # BT_MESH_FRIEND

config BT_MESH_CFG_CLI
	bool "Support for Configuration Client Model"
	help
	  Enable support for the configuration client model.

config BT_MESH_HEALTH_CLI
	bool "Support for Health Client Model"
	help
	  Enable support for the health client model.

config BT_MESH_SHELL
	bool "Enable Bluetooth mesh shell"
	select SHELL
	help
	  Activate shell module that provides Bluetooth mesh commands to
	  the console.

config BT_MESH_MODEL_EXTENSIONS
	bool "Support for Model extensions"
	help
	  Enable support for the model extension concept, allowing the Access
	  layer to know about mesh model relationships.

if BT_SETTINGS

config BT_MESH_STORE_TIMEOUT
	int "Delay (in seconds) before storing anything persistently"
	range 0 1000000
	default 2
	help
	  This value defines in seconds how soon any pending changes
	  are actually written into persistent storage (flash) after
	  a change occurs.

config BT_MESH_SEQ_STORE_RATE
	int "How often the sequence number gets updated in storage"
	range 0 1000000
	default 128
	help
	  This value defines how often the local sequence number gets
	  updated in persistent storage (i.e. flash). E.g. a value of 100
	  means that the sequence number will be stored to flash on every
	  100th increment. If the node sends messages very frequently a
	  higher value makes more sense, whereas if the node sends
	  infrequently a value as low as 0 (update storage for every
	  increment) can make sense. When the stack gets initialized it
	  will add this number to the last stored one, so that it starts
	  off with a value that's guaranteed to be larger than the last
	  one used before power off.

config BT_MESH_RPL_STORE_TIMEOUT
	int "Minimum interval after which unsaved RPL entries are updated in storage"
	range -1 1000000
	default 5
	help
	  This value defines in seconds how soon unsaved RPL entries
	  gets written to the persistent storage. Setting this value
	  to a large number may lead to security vulnerabilities if a node
	  gets powered off before the timer is fired. When flash is used
	  as the persistent storage setting this value to a low number
	  may wear out flash sooner or later. However, if the RPL gets
	  updated infrequently a value as low as 0 (write immediately)
	  may make sense. Setting this value to -1 will disable this timer.
	  In this case, a user is responsible to store pending RPL entries
	  using @ref bt_mesh_rpl_pending_store. In the mean time, when
	  IV Index is updated, the outdated RPL entries will still be
	  stored by @ref BT_MESH_STORE_TIMEOUT. Finding the right balance
	  between this timeout and calling @ref bt_mesh_rpl_pending_store
	  may reduce a risk of security vulnerability and flash wear out.

endif # BT_SETTINGS

config BT_MESH_DEBUG
	bool "Enable debug logs"
	depends on BT_DEBUG
	help
	  Use this option to enable debug logs for the Bluetooth
	  Mesh functionality.

if BT_MESH_DEBUG

config BT_MESH_DEBUG_USE_ID_ADDR
	bool "Use identity address for all advertising"
	help
	  This option forces the usage of the local identity address for
	  all advertising. This can be a help for debugging (analyzing
	  traces), however it should never be enabled for a production
	  build as it compromises the privacy of the device.

config BT_MESH_DEBUG_NET
	bool "Network layer debug"
	help
	  Use this option to enable Network layer debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_RPL
	bool "Replay protection list debug"
	help
	  Use this option to enable Replay protection list debug logs
	  for the Bluetooth mesh functionality.

config BT_MESH_DEBUG_TRANS
	bool "Transport layer debug"
	help
	  Use this option to enable Transport layer debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_BEACON
	bool "Beacon debug"
	help
	  Use this option to enable Beacon-related debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_CRYPTO
	bool "Crypto debug"
	help
	  Use this option to enable cryptographic debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_KEYS
	bool "Key management debug"
	help
	  Use this option to enable key management debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_PROV
	bool "Provisioning debug"
	help
	  Use this option to enable Provisioning debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_PROVISIONER
	bool "Provisioner debug"
	help
	  Use this option to enable Provisioner debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_PROV_DEVICE
	bool "Provisioning device debug"
	help
	  Use this option to enable Provisioning device debug logs for the
	  Bluetooth Mesh functionality.

config BT_MESH_DEBUG_ACCESS
	bool "Access layer debug"
	help
	  Use this option to enable Access layer and device composition
	  related debug logs for Bluetooth mesh.

config BT_MESH_DEBUG_MODEL
	bool "Foundation model debug"
	help
	  Use this option to enable debug logs for the Foundation
	  Models.

config BT_MESH_DEBUG_ADV
	bool "Advertising debug"
	help
	  Use this option to enable advertising debug logs for
	  the Bluetooth mesh functionality.

config BT_MESH_DEBUG_LOW_POWER
	bool "Low Power debug"
	help
	  Use this option to enable Low Power debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_FRIEND
	bool "Friend debug"
	help
	  Use this option to enable Friend debug logs for the
	  Bluetooth mesh functionality.

config BT_MESH_DEBUG_PROXY
	bool "Proxy debug"
	depends on BT_MESH_GATT
	help
	  Use this option to enable Proxy protocol debug logs.

config BT_MESH_DEBUG_SETTINGS
	bool "Persistent settings debug"
	depends on BT_SETTINGS
	help
	  Use this option to enable persistent settings debug logs.

config BT_MESH_DEBUG_CDB
	bool "Configuration database debug"
	depends on BT_MESH_CDB
	help
	  Use this option to enable configuration database debug logs.

config BT_MESH_DEBUG_CFG
	bool "Configuration debug"
	help
	  Use this option to enable node configuration debug logs for the
	  Bluetooth mesh functionality.

endif # BT_MESH_DEBUG

endif # BT_MESH
