# Bluetooth mesh configuration options

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

menuconfig BT_MESH
	bool "Bluetooth mesh support"
	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

###################################################################################################
# Invisible options
###################################################################################################

# Virtual option enabled whenever Proxy Server or Client is needed
config BT_MESH_PROXY
	bool

config BT_MESH_GATT
	bool

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

config BT_MESH_GATT_CLIENT
	bool
	select BT_MESH_GATT

config BT_MESH_GATT_SERVER
	bool
	select BT_MESH_GATT
	select BT_GATT_DYNAMIC_DB

config BT_MESH_PB_GATT_COMMON
	bool

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

###################################################################################################
# Visible options
###################################################################################################

menu "Advertiser"

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

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

	  WARNING: The legacy advertiser can occasionally do more message
	  retransmissions than requested because of limitations of HCI
	  interface API.

if BT_MESH_ADV_LEGACY

config BT_MESH_ADV_STACK_SIZE
	int "Mesh advertiser thread stack size"
	default 1024 if BT_HOST_CRYPTO
	default 776 if BT_MESH_PRIV_BEACONS
	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"
	default 7
	help
	  Priority of bt mesh adv thread.

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

endif # BT_MESH_ADV_LEGACY

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

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_RELAY_USING_MAIN_ADV_SET
	bool "Use the main advertising set to relay messages"
	depends on BT_MESH_RELAY_ADV_SETS > 0
	help
	  When this option is enabled, there is a message that needs to be
	  relayed, all relay advertising sets defined by
	  CONFIG_BT_MESH_RELAY_ADV_SETS are busy with relaying messages
	  and the main advertising set is not busy with sending local
	  messages, the stack will use the main advertising set to relay
	  the message. This maximizes the utilization efficiency of
	  advertising sets, which is helpful for the sending of dense
	  relays. With CONFIG_BT_MESH_RELAY_RETRANSMIT_COUNT value
	  greater than zero, this can noticeably delay transmission of
	  local messages. When Friend feature is enabled and the node is
	  in a friendship, this option can delay transmission of local
	  messages thus requiring bigger CONFIG_BT_MESH_FRIEND_RECV_WIN
	  value. This in turn will result in increase of the power
	  consumption of the Low Power node.

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 a shared advertising set will be used.

config BT_MESH_ADV_EXT_FRIEND_SEPARATE
	bool "Use a separate extended advertising set for Friend advertising"
	depends on BT_MESH_FRIEND
	help
	  Use a separate extended advertising set for Friend advertising,
	  otherwise a shared advertising set will be used. Using the separate
	  extended advertising set makes the Friend node send friendship
	  messages as close to the start of the ReceiveWindow as possible,
	  thus reducing the scanning time on the Low Power node.

endif # BT_MESH_ADV_EXT

endchoice

config BT_MESH_ADV_BUF_COUNT
	int "Number of advertising buffers for local messages"
	default 6
	range 1 256
	help
	  Number of advertising buffers available for sending local messages.
	  This should be chosen based on the number of local messages that the node
	  can send simultaneously.

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.

endmenu # Advertiser

menu "Provisioning"

menuconfig BT_MESH_PB_ADV
	bool "PB-ADV support"
	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.

if BT_MESH_PB_ADV

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.

endif # BT_MESH_PB_ADV

if BT_CONN

config BT_MESH_PB_GATT
	bool "PB-GATT Server support"
	select BT_MESH_GATT_SERVER
	select BT_MESH_PROV
	select BT_MESH_PB_GATT_COMMON
	select BT_MESH_PROV_DEVICE
	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_PB_GATT_CLIENT
	bool "PB-GATT Client support"
	select BT_MESH_PROV
	select BT_GATT_CLIENT
	select BT_MESH_GATT_CLIENT
	select BT_MESH_PB_GATT_COMMON
	select BT_MESH_PROVISIONER
	depends on BT_CENTRAL
	help
	  Enable this option to allow the provisioner provisioning the
	  device over GATT.

endif # BT_CONN

config BT_MESH_PROV_DEVICE
	bool "Provisioning device role support"
	depends on BT_MESH_PB_ADV || BT_MESH_PB_GATT
	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"
	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_PROVISIONER
	bool "Provisioner support"
	depends on BT_MESH_CDB
	depends on BT_MESH_PROV
	depends on BT_MESH_PB_ADV || BT_MESH_PB_GATT_CLIENT
	help
	  Enable this option to have support for provisioning remote devices.

menuconfig BT_MESH_CDB
	bool "Mesh Configuration Database"

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

endmenu # Provisioning

menu "Network layer"

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

config BT_MESH_MSG_CACHE_SIZE
	int "Network message cache size"
	default 32
	range 2 65535
	help
	  Number of messages that are cached by the node to avoid acting on the
	  recently seen duplicate messages. This option is similar to
	  the replay protection list, but has a different purpose. Network message
	  cache helps prevent unnecessary decryption operations. This also prevents
	  unnecessary relaying and helps in getting rid of relay loops. Setting
	  this value to a very low number can cause unnecessary network traffic.
	  Setting this value to a very large number can impact the processing time
	  for each received network PDU and increases RAM footprint proportionately.

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 feature enabled by default"
	default y
	help
	  Controls whether the Relay feature is enabled by default when the
	  device boots up for the first time or unprovisioned. Can be changed
	  at runtime using bt_mesh_relay_set() function.

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.

config BT_MESH_RELAY_BUF_COUNT
	int "Number of advertising buffers for relayed messages"
	default 32
	range 1 256
	help
	  Number of advertising buffers available for messages to be relayed.
	  High number of advertising buffers increases the reliability of the
	  mesh network. Low number of advertising buffers reduces the message
	  latency on the Relay Node, but at the same time increases the amount
	  of packet drops. When considering the message latency, also consider
	  the values of BT_MESH_RELAY_RETRANSMIT_COUNT and
	  BT_MESH_RELAY_RETRANSMIT_INTERVAL. A higher number of
	  BT_MESH_RELAY_ADV_SETS allows the increase in the number of buffers
	  while maintaining the latency.

endif # BT_MESH_RELAY

endmenu # Network layer

menu "Transport layer"

menu "Transport SAR configuration"

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

	  Note that: Since Mesh Segmentation/reassembling is a mandatory
	  feature of specification, set to zero will not allow send any
	  Mesh Segment message.

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

	  Note that: Since Mesh Segmentation/reassemblying is a mandatory
	  feature of specification, set to zero will not allow receive any
	  Mesh Segment message.

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 6 if BT_MESH_BLOB_SRV || BT_MESH_BLOB_CLI || \
		     BT_MESH_RPR_SRV || BT_MESH_RPR_CLI
	default 3
	range 1 32
	depends on BT_MESH_RX_SEG_MSG_COUNT > 0
	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 6 if BT_MESH_BLOB_SRV || BT_MESH_BLOB_CLI || \
		     BT_MESH_RPR_SRV || BT_MESH_RPR_CLI
	default 3
	range 1 32
	depends on BT_MESH_TX_SEG_MSG_COUNT > 0
	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.

if !BT_MESH_V1d1

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_SEG_ACK_BASE_TIMEOUT
	int "SegAck transmission base timeout"
	default 150
	range 150 400
	help
	  Defines a base timeout for the acknowledgment timer used to delay
	  transmission of the Segmented Acknowledgment message.

config BT_MESH_SEG_ACK_PER_HOP_TIMEOUT
	int "SegAck transmission timeout per hop"
	default 50
	range 50 250
	help
	  Defines an additional per-hop timeout for the acknowledgment timer
	  used to delay transmission of the Segmented Acknowledgment message.

config BT_MESH_SEG_ACK_PER_SEGMENT_TIMEOUT
	int "SegAck transmission timeout per segment not yet received"
	default 0
	range 0 100
	help
	  Defines an additional timeout for the acknowledgment timer for every
	  segment not yet received.

endif # !BT_MESH_V1d1

endmenu # Transport SAR configuration

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.

menu "Replay Protection List"

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.

choice BT_MESH_RPL_STORAGE_MODE
	prompt "Replay protection list storage mode"
	default BT_MESH_RPL_STORAGE_MODE_SETTINGS

config BT_MESH_RPL_STORAGE_MODE_SETTINGS
	bool "Persistent storage of RPL in Settings"
	help
	  Persistent storage of RPL in Settings. If BT_SETTINGS is not
	  enabled this choise will provide a non-persistent implementation
	  variant of the RPL list.

endchoice

endmenu # Replay Protection List

endmenu # Transport layer

menu "Access layer"

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

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

config BT_MESH_LABEL_NO_RECOVER
	bool "[DEPRECATED] Don't recover Label UUIDs from groups address subscription list"
	select DEPRECATED
	depends on BT_MESH_LABEL_COUNT > 0
	help
	  After adding support for virtual addresses with collision (where two Label UUIDs have the
	  same virtual address), the format of the data in the persistent storage with the Label
	  UUIDs which a model is subscribed to or publishes to has been changed. The recovery
	  code is added and the Label UUIDs will be recovered by picking first Label UUID matching
	  to the virtual address in the subscription list or model publication. This options can
	  disable the recovery code and save some flash if the recovery is not required (e.g.
	  virtual address support wasn't enabled before this option was added, or the devices were
	  unprovisioned before upgrading to the version with this option). The option is marked as
	  deprecated to remove the recovery code eventually.

endmenu # Access layer

menu "Models"

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

if BT_MESH_CFG_CLI

config BT_MESH_CFG_CLI_TIMEOUT
	int "Config Client model timeout in milliseconds"
	default 5000
	help
	  This timeout controls how long config client waits for a response
	  message to arrive. This value can be changed at runtime using
	  @ref bt_mesh_cfg_cli_timeout_set.

endif # BT_MESH_CFG_CLI

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

if BT_MESH_HEALTH_CLI

config BT_MESH_HEALTH_CLI_TIMEOUT
	int "Health Client model timeout in milliseconds"
	default 2000
	help
	  This timeout controls how long health client waits for a response
	  message to arrive. This value can be changed at runtime using
	  @ref bt_mesh_health_cli_timeout_set.

endif # BT_MESH_HEALTH_CLI

endmenu # Models

menu "Proxy"
	visible if BT_CONN

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

if BT_MESH_GATT_PROXY

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"
	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"
	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 16
	range 1 32767
	help
	  This option specifies how many Proxy Filter entries the local
	  node supports. This helps in reducing unwanted traffic getting sent to
	  the proxy client. This value is application specific and should be large
	  enough so that proxy client can communicate with several devices through
	  this proxy server node using the default accept list filter type.

endif # BT_MESH_GATT_PROXY

config BT_MESH_PROXY_CLIENT
	bool "Proxy client support"
	select BT_GATT_CLIENT
	select BT_MESH_GATT_CLIENT
	depends on BT_CENTRAL
	help
	  This option enables support for the Mesh GATT Proxy Client,
	  i.e. the ability to act as a proxy between a Mesh GATT Service
	  and a Mesh network.

endmenu # Proxy

choice BT_MESH_CRYPTO_LIB
	prompt "Crypto library:"
	default BT_MESH_USES_TFM_PSA if BUILD_WITH_TFM
	default BT_MESH_USES_TINYCRYPT
	help
	  Crypto library selection for mesh security.

config BT_MESH_USES_TINYCRYPT
	bool "TinyCrypt"
	select TINYCRYPT
	select TINYCRYPT_AES
	select TINYCRYPT_AES_CMAC
	select TINYCRYPT_ECC_DH
	select TINYCRYPT_SHA256
	select TINYCRYPT_SHA256_HMAC
	select BT_HOST_CCM
	help
	  Use TinyCrypt library to perform crypto operations.

config BT_MESH_USES_MBEDTLS_PSA
	bool "mbed TLS PSA [EXPERIMENTAL]"
	select EXPERIMENTAL
	select MBEDTLS
	select MBEDTLS_ZEPHYR_ENTROPY
	select MBEDTLS_PSA_CRYPTO_C
	select MBEDTLS_MAC_CMAC_ENABLED
	select MBEDTLS_CIPHER_AES_ENABLED
	select MBEDTLS_AES_ROM_TABLES
	select MBEDTLS_CIPHER_CCM_ENABLED
	select MBEDTLS_ECP_C
	select MBEDTLS_ECDH_C
	select MBEDTLS_ECDSA_C
	select MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
	select MBEDTLS_ECP_DP_SECP256R1_ENABLED
	select MBEDTLS_PK_WRITE_C
	help
	  Use mbed TLS library to perform crypto operations. Support of
	  mbed TLS and PSA is experimental and only BabbleSim tests were run.
	  Mbed TLS still does not support ITS (internal trust storage) based
	  on Zephyr's settings subsystem.
	  Not possible to use for embedded devices yet.

config BT_MESH_USES_TFM_PSA
	bool "Use TF-M PSA [EXPERIMENTAL]"
	select EXPERIMENTAL
	depends on BUILD_WITH_TFM
	help
	  Use TF-M that implements PSA security framework. Support of TF-M is
	  experimental. It is only possible to use with platforms that TF-M supports.
	  For more platform details see TF-M documentation.

endchoice

if BT_MESH_USES_MBEDTLS_PSA || BT_MESH_USES_TFM_PSA

config BT_MESH_PSA_KEY_ID_USER_MIN_OFFSET
	int "Offset of BLE Mesh key id range regarding PSA_KEY_ID_USER_MIN"
	default 0
	help
	  The PSA specification mandates to set key identifiers for keys
	  with persistent lifetime. The users of the PSA API is responsible
	  (BLE Mesh is user of PSA API) to provide correct and unique identifiers.
	  The BLE Mesh identifier range should be between PSA_KEY_ID_USER_MIN and
	  PSA_KEY_ID_USER_MAX. BLE Mesh requires two ids for each subnetwork, two ids
	  for each application key, and two ids for the device key and device key candidate.
	  It should consider the Mesh Configuration Database instances if database enabled.

endif # BT_MESH_USES_MBEDTLS_PSA || BT_MESH_USES_TFM_PSA

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.

menu "IV Index & Sequence number"

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_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).

endmenu # IV Index & Sequence number

menuconfig 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 50 255 if BT_MESH_ADV_LEGACY
	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. When BT_MESH_ADV_LEGACY is used,
	  the minimal value for the delay can not be less than 50ms due
	  to a limitation in the legacy advertiser implementation.

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 15
	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

menuconfig 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 by default"
	default y
	help
	  Controls whether the Friend feature is enabled by default when the
	  device boots up for the first time or unprovisioned. Can be changed
	  at runtime using bt_mesh_friend_set() function.

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.

config BT_MESH_FRIEND_ADV_LATENCY
	int "Latency for enabling advertising"
	range 0 4
	default 0
	help
	  Latency in milliseconds between request for and start of Friend
	  advertising. Used to tune the ReceiveDelay, making Friend
	  start sending a message earlier thus compensating for the time between
	  pushing the message to the Bluetooth host and the actual advertising
	  start.

endif # BT_MESH_FRIEND

menuconfig BT_MESH_V1d1
	bool "Bluetooth mesh v1.1 support [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  This option enables Bluetooth mesh v1.1 support. Bluetooth mesh v1.1
	  is backward compatible with v1.0.1. The stack cannot be qualified
	  with this option enabled because the Bluetooth mesh v1.1 specification
	  is in a draft state.

config BT_MESH_ECDH_P256_CMAC_AES128_AES_CCM
	bool "Support CMAC AES128 for OOB authentication" if BT_MESH_V1d1
	depends on BT_MESH_PROV
	default y
	help
	  Enable this option to support CMAC AES128 for OOB authentication.

if BT_MESH_V1d1

config BT_MESH_ECDH_P256_HMAC_SHA256_AES_CCM
	bool "Support HMAC SHA256 for OOB authentication"
	depends on BT_MESH_PROV
	default y
	help
	  Enable this option to support HMAC SHA256 for OOB authentication.

config BT_MESH_OOB_AUTH_REQUIRED
	bool "OOB authentication mandates to use HMAC SHA256"
	depends on BT_MESH_ECDH_P256_HMAC_SHA256_AES_CCM

menuconfig BT_MESH_BLOB_SRV
	bool "Support for BLOB Transfer Server model"
	help
	  Enable the Binary Large Object (BLOB) Transfer Server model.

if BT_MESH_BLOB_SRV

config BT_MESH_BLOB_SRV_PULL_REQ_COUNT
	int "Number of chunks to request for each pull"
	default 4
	range 1 16
	help
	  In Pull mode (Pull BLOB Transfer Mode), the BLOB Transfer Server
	  requests a fixed number of chunks from the Client. Use this option to
	  control the chunk count in the request. If the BLOB Transfer Server
	  is instantiated on a Low Power node, the pull request count will be
	  trimmed to not overflow the Friend queue.

config BT_MESH_BLOB_SIZE_MAX
	int "Largest BLOB size in bytes"
	default 524288
	range 1 3257617792
	help
	  The maximum object size a BLOB Transfer Server can receive.

config BT_MESH_BLOB_BLOCK_SIZE_MIN
	int "Minimum block size"
	default 4096
	range 64 1048576 # 2^6 - 2^20
	help
	  Minimum acceptable block size in a BLOB transfer. The transfer block
	  size will be some number that is a power of two, and is between block
	  size min and block size max. If no such number exists, a compile
	  time warning will be issued.

config BT_MESH_BLOB_BLOCK_SIZE_MAX
	int "Maximum block size"
	default 4096
	range BT_MESH_BLOB_BLOCK_SIZE_MIN 1048576
	help
	  Maximum acceptable block size in a BLOB transfer. The transfer block
	  size will be some number that is a power of two, and is between block
	  size min and block size max. If no such number exists, a compile
	  time warning will be issued.

config BT_MESH_BLOB_REPORT_TIMEOUT
	int "Partial Block Report interval in Pull mode"
	default 10
	range 1 31
	help
	  The timer value that Pull BLOB Transfer Server uses to report missed chunks.

endif # BT_MESH_BLOB_SRV

menuconfig BT_MESH_BLOB_CLI
	bool "Support for BLOB Transfer Client model"
	help
	  Enable the Binary Large Object (BLOB) Transfer Client model.

if BT_MESH_BLOB_CLI

config BT_MESH_BLOB_CLI_BLOCK_RETRIES
	int "Number of retries per block"
	default 5
	help
	  Controls the number of times the client will attempt to resend missing
	  chunks to the BLOB receivers for every block.

endif

menu "BLOB models common configuration"
	visible if BT_MESH_BLOB_SRV || BT_MESH_BLOB_CLI

config BT_MESH_BLOB_CHUNK_COUNT_MAX
	int "Maximum chunk count per block"
	default 256
	range 1 2992
	help
	  A BLOB transfer contains several blocks. Each block is made up of
	  several chunks. This option controls the maximum chunk count per
	  block.

endmenu

config BT_MESH_BLOB_IO_FLASH
	bool "BLOB flash stream"
	default y
	depends on BT_MESH_BLOB_SRV || BT_MESH_BLOB_CLI
	depends on FLASH_MAP
	help
	  Enable the BLOB flash stream for reading and writing BLOBs directly to
	  and from flash.

config BT_MESH_DFU_SRV
	bool "Support for Firmware Update Server model"
	depends on BT_MESH_BLOB_SRV
	help
	  Enable the Firmware Update Server model.

config BT_MESH_DFU_CLI
	bool "Support for Firmware Update Client model"
	depends on BT_MESH_BLOB_CLI
	help
	  Enable the Firmware Update Client model.

menu "Firmware Update model configuration"
	visible if BT_MESH_DFU_SRV || BT_MESH_DFU_CLI

config BT_MESH_DFU_FWID_MAXLEN
	int "DFU FWID max length"
	default 16
	range 0 106
	help
	  This value defines the maximum length of an image's firmware ID.

config BT_MESH_DFU_METADATA_MAXLEN
	int "DFU metadata max length"
	default 32
	range 18 255 if BT_MESH_DFU_METADATA
	range 0 255
	help
	  This value defines the maximum length of an image's metadata.

config BT_MESH_DFU_METADATA
	bool "Support for the default metadata format"
	help
	  This option adds a set of functions that can be used to encode and decode a firmware
	  metadata using the format defined in the Bluetooth mesh DFU subsystem.

config BT_MESH_DFU_URI_MAXLEN
	int "DFU URI max length"
	default 32
	range 0 255
	help
	  This value defines the maximum length of an image's URI, not including
	  a string terminator.

endmenu

menuconfig BT_MESH_DFU_SLOTS
	bool "Firmware image slot manager"
	default y if BT_MESH_DFU_CLI
	help
	  Enable the DFU image slot manager, for managing firmware distribution slots
	  for the Firmware Update Client model.

if BT_MESH_DFU_SLOTS

config BT_MESH_DFU_SLOT_CNT
	int "Number of firmware image slots"
	default 1
	range 1 32767
	help
	  This value defines the number of firmware slots the DFU image slot manager
	  can keep simultaneously.

endif

menuconfig BT_MESH_DFD_SRV
	bool "Support for Firmware Distribution Server model"
	depends on BT_MESH_BLOB_SRV
	depends on BT_MESH_DFU_CLI
	help
	  Enable the Firmware Distribution Server model.

if BT_MESH_DFD_SRV

config BT_MESH_DFD_SRV_SLOT_MAX_SIZE
	int "Largest DFU image that can be stored"
	default BT_MESH_BLOB_SIZE_MAX
	range 0 BT_MESH_BLOB_SIZE_MAX
	help
	  This value defines the largest DFU image a single slot can store.

config BT_MESH_DFD_SRV_SLOT_SPACE
	int "Total DFU image storage space"
	default BT_MESH_DFD_SRV_SLOT_MAX_SIZE
	range 0 4294967295
	help
	  This value defines the total storage space dedicated to storing DFU
	  images on the Firmware Distribution Server.

config BT_MESH_DFD_SRV_TARGETS_MAX
	int "Maximum Target node count"
	default 8
	range 1 65535
	help
	  This value defines the maximum number of Target nodes the Firmware
	  Distribution Server can target simultaneously.

config BT_MESH_DFD_SRV_OOB_UPLOAD
	bool "Support for DFU image OOB upload"
	help
	  This enables support for OOB upload of firmware images for
	  distribution. This makes several callbacks and use of the init
	  macro BT_MESH_DFD_SRV_INIT_OOB mandatory. See the API documentation
	  for bt_mesh_dfd_srv_cb for details about the mandatory callbacks.

endif

config BT_MESH_RPR_SRV
	bool "Support for Remote Provisioning Server model"
	help
	  The Remote Provisioning Server is the proxy for a provisioning
	  process, allowing provisioners to tunnel their provisioning
	  messages through the mesh to the Remote Provisioning Server, which
	  communicates directly with the unprovisioned node.

config BT_MESH_RPR_CLI
	bool "Support for Remote Provisioning Client model"
	depends on BT_MESH_PROVISIONER
	help
	  The Remote Provisioning Client is instantiated on the provisioner
	  node, and allows provisioning of new devices through the mesh network
	  by tunnelling provisioning messages to a Remote Provisioning Server.

menu "Remote Provisioning configuration"
	visible if BT_MESH_RPR_SRV || BT_MESH_RPR_CLI

config BT_MESH_RPR_AD_TYPES_MAX
	int "Max AD types in extended scanning"
	default 1
	range 1 16
	help
	  During extended scanning, the Remote Provisioning Server can include
	  a set of AD types in the scan reports, collected from the
	  unprovisioned device's advertisement data. This option controls
	  the highest number of AD types a single server can scan for, and a
	  Client can request.

config BT_MESH_RPR_SRV_SCANNED_ITEMS_MAX
	int "Max scannable unprovisioned devices for Remote Provisioning Server"
	default 4
	range 4 255
	help
	  Max number of unique unprovisioned devices a single Remote
	  Provisioning Server can hold.

config BT_MESH_RPR_SRV_AD_DATA_MAX
	int "Max additional advertisement data to report"
	default 31
	range 3 255
	help
	  Buffer size for the additional advertisement data reported during
	  extended scanning.
endmenu

config BT_MESH_SAR_CFG
	bool

config BT_MESH_SAR_CFG_SRV
	bool "Support for SAR Configuration Server model"
	select BT_MESH_SAR_CFG
	help
	  Enable support for the SAR configuration server model.

config BT_MESH_SAR_CFG_CLI
	bool "Support for SAR Configuration Client Model"
	select BT_MESH_SAR_CFG
	help
	  Enable support for the SAR configuration client model.

config BT_MESH_OP_AGG
	bool

config BT_MESH_OP_AGG_SRV
	bool "Support for Opcode Aggregator Server Model"
	select BT_MESH_OP_AGG
	help
	  Enable support for the Opcode Aggregator Server model.

config BT_MESH_OP_AGG_CLI
	bool "Support for Opcode Aggregator Client Model"
	select BT_MESH_OP_AGG
	help
	  Enable support for the Opcode Aggregator Client model.

if BT_MESH_OP_AGG_CLI

config BT_MESH_OP_AGG_CLI_TIMEOUT
	int "Opcodes Aggregator Client model timeout in milliseconds"
	default 10000
	help
	  This timeout controls how long Opcodes Aggregator Client waits
	  for a response message to arrive. This value can be changed at
	  runtime using @ref bt_mesh_op_agg_cli_timeout_set.

endif # BT_MESH_OP_AGG_CLI

config BT_MESH_LARGE_COMP_DATA_SRV
	bool "Support for Large Composition Data Server Model"
	help
	  Enable support for the Large Composition Data Server model.

if BT_MESH_LARGE_COMP_DATA_SRV

config BT_MESH_MODELS_METADATA_PAGE_LEN
	int "Maximum length of the Models Metadata Page"
	default 150
	help
	  This value is the combined total metadata length for
	  all models on the device.

endif # BT_MESH_LARGE_COMP_DATA_SRV

config BT_MESH_LARGE_COMP_DATA_CLI
	bool "Support for Large Composition Data Client model"
	help
	  Enable support for the Large Composition Data Client model.

config BT_MESH_PRIV_BEACONS
	bool "Support for private beacons"
	default y
	help
	  Enable support for private beacons.

if BT_MESH_PRIV_BEACONS

config BT_MESH_PRIV_BEACON_SRV
	bool "Support for Private Beacon Server Model"
	help
	  Enable support for the Private Beacon Server model.

config BT_MESH_PRIV_BEACON_CLI
	bool "Support for Private Beacon Client Model"
	help
	  Enable support for the Private Beacon Client model.

endif # BT_MESH_PRIV_BEACONS

config BT_MESH_COMP_PST_BUF_SIZE
	int "Composition Data Page persistence buffer size"
	default 100
	help
	  Stack allocated buffer used to temporarily hold Composition
	  Data Pages during flash operations. Should reflect the size
	  of the largest Composition Data Page present in the application.
	  Note that this buffer should still be large enough to restore previously stored
	  pages after a performed device firmware update.

config BT_MESH_COMP_PAGE_1
	bool "Support for Composition Data Page 1"
	depends on BT_MESH_MODEL_EXTENSIONS
	help
	  Enable support for Composition Data Page 1.

config BT_MESH_COMP_PAGE_2
	bool "Support for Composition Data Page 2"
	help
	  Enable support for Composition Data Page 2.

config BT_MESH_MODEL_EXTENSION_LIST_SIZE
	int "Model extensions list size"
	depends on BT_MESH_COMP_PAGE_1
	range 1 255
	default 10
	help
	  This option specifies how many models relations can be saved.
	  Equals to the number of `bt_mesh_model_extend` and `bt_mesh_model_correspond` calls.
	  This information is used to construct Composition Data Page 1.

config BT_MESH_SOLICITATION
	bool

config BT_MESH_PROXY_SOLICITATION
	bool "Proxy solicitation feature for Proxy Client support"
	depends on BT_MESH_PROXY_CLIENT
	select BT_MESH_SOLICITATION
	help
	  This option enables support for sending Solicitation PDUs for Proxy Client.

config BT_MESH_SOL_ADV_XMIT
	int "Solicitation PDU retransmission count"
	depends on BT_MESH_PROXY_SOLICITATION
	range 0 10
	default 2
	help
	  How many times Solicitation PDU advertisements will be repeated. 0 means that there will be
	  1 transmission without retransmissions.

config BT_MESH_OD_PRIV_PROXY_CLI
	bool "Support for On-Demand Private Proxy Client model"
	help
	  On-Demand Private Proxy Client allows to configure and check the state
	  of On-Demand Private Proxy Servers. The state determines if the peers will
	  advertise the Private Network Identity type after receiving a Solicitation PDU.


config BT_MESH_OD_PRIV_PROXY_CLI_TIMEOUT
	int "Solicitation PDU RPL Configuration Client model timeout in milliseconds"
	default 5000
	depends on BT_MESH_OD_PRIV_PROXY_CLI
	help
	  This timeout controls how long the On-Demand Private Proxy Client waits
	  for a response message to arrive. This value can be changed at runtime
	  using @ref bt_mesh_od_priv_proxy_cli_timeout_set.

config BT_MESH_OD_PRIV_PROXY_SRV
	bool "Support for On-Demand Private Proxy Server model"
	depends on BT_MESH_PRIV_BEACON_SRV
	select BT_MESH_SOLICITATION
	help
	  The On-Demand Private Proxy Server is used to support configuration of
	  advertising with Private Network Identity type of a node.
	  When enabled, the Solicitation PDU RPL Configuration Server model is also enabled.

config BT_MESH_PROXY_SRPL_SIZE
	int "Size of solicitation replay protection list (SRPL)"
	depends on BT_MESH_OD_PRIV_PROXY_SRV
	default 10
	range 1 255
	help
	  Size of SRPL. The list is used to determine if a received Solicitation PDU
	  is valid. It is valid when the SSRC field value of the received Solicitation PDU
	  is stored in the SRPL and the SSEQ field value is bigger than the corresponding
	  stored SSEQ value, or if the SSRC was not stored in the RPL and the SRPL still has
	  space for new entries.

config BT_MESH_SOL_PDU_RPL_CLI
	bool "Support for Solicitation PDU RPL Configuration Client model"
	help
	  The Solicitation PDU RPL Configuration Client is used to support the
	  functionality of removing addresses from the solicitation replay
	  protection list (SRPL) of a node that supports the Solicitation
	  PDU RPL Configuration Server model.

config BT_MESH_SOL_PDU_RPL_CLI_TIMEOUT
	int "Solicitation PDU RPL Configuration Client model timeout in milliseconds"
	default 5000
	depends on BT_MESH_SOL_PDU_RPL_CLI
	help
	  This timeout controls how long Solicitation PDU RPL Configuration Client waits
	  for a response message to arrive. This value can be changed at runtime
	  using @ref bt_mesh_sol_pdu_rpl_cli_timeout_set.

menu "Transport SAR configuration"

config BT_MESH_SAR_TX_SEG_INT_STEP
	hex "Interval between sending two consecutive segments"
	range 0x00 0x0F
	default 0x05
	help
	  This value controls the interval between sending two consecutive
	  segments in a segmented message. The interval is measured in
	  milliseconds and calculated using the following formula:
	  (CONFIG_BT_MESH_SAR_TX_SEG_INT_STEP + 1) * 10 ms.

config BT_MESH_SAR_TX_UNICAST_RETRANS_COUNT
	hex "Maximum number of retransmissions to unicast address"
	range 0x00 0x0F
	default 0x02
	help
	  This value controls the maximum number of retransmissions of a
	  segmented message to a unicast address before giving up the transfer.

config BT_MESH_SAR_TX_UNICAST_RETRANS_WITHOUT_PROG_COUNT
	hex "Maximum number of retransmissions without progress to a unicast address"
	range 0x00 0x0F
	default 0x02
	help
	  This value defines the maximum number of retransmissions of a
	  segmented message to a unicast address that the stack will send if no
	  acknowledgment was received during timeout, or if an
	  acknowledgment with already confirmed segments was received.

config BT_MESH_SAR_TX_UNICAST_RETRANS_INT_STEP
	hex "Retransmissions interval step of missing segments to unicast address"
	range 0x00 0x0F
	default 0x07
	help
	  This value controls the interval step used for delaying the
	  retransmissions of unacknowledged segments of a segmented message to
	  a unicast address. The interval step is measured in milliseconds and
	  calculated using the following formula:
	  (CONFIG_BT_MESH_SAR_TX_UNICAST_RETRANS_INT_STEP + 1) * 25 ms.

config BT_MESH_SAR_TX_UNICAST_RETRANS_INT_INC
	hex "Retransmissions interval increment of missing segments to unicast address"
	range 0x00 0x0F
	default 0x01
	help
	  This value controls the interval increment used for delaying the
	  retransmissions of unacknowledged segments of a segmented message to
	  a unicast address. The increment is measured in milliseconds and
	  calculated using the following formula:
	  (CONFIG_BT_MESH_SAR_TX_UNICAST_RETRANS_INT_INC + 1) * 25 ms.

config BT_MESH_SAR_TX_MULTICAST_RETRANS_COUNT
	hex "Total number of retransmissions to multicast address"
	range 0x00 0x0F
	default 0x02
	help
	  This value controls the total number of retransmissions of a segmented
	  message to a multicast address.

config BT_MESH_SAR_TX_MULTICAST_RETRANS_INT
	hex "Interval between retransmissions to multicast address"
	range 0x00 0x0F
	default 0x09
	help
	  This value controls the interval between retransmissions of all
	  segments in a segmented message to a multicast address. The
	  interval is measured in milliseconds and calculated using the
	  following formula:
	  (CONFIG_BT_MESH_SAR_TX_MULTICAST_RETRANS_INT + 1) * 25 ms.

config BT_MESH_SAR_RX_SEG_THRESHOLD
	hex "Acknowledgments retransmission threshold"
	range 0x00 0x1F
	default 0x03
	help
	  This value defines a threshold in number of segments of a segmented
	  message for acknowledgment retransmissions. When the number of
	  segments of a segmented message is above this threshold, the stack
	  will additionally retransmit every acknowledgment message the
	  number of times given by value of CONFIG_BT_MESH_SAR_RX_ACK_RETRANS_COUNT.

config BT_MESH_SAR_RX_ACK_DELAY_INC
	hex "Acknowledgment delay increment"
	range 0x00 0x07
	default 0x01
	help
	  This value controls the delay increment of an interval used for
	  delaying the transmission of an acknowledgment message after
	  receiving a new segment. The increment is measured in segments
	  and calculated using the following formula:
	  CONFIG_BT_MESH_SAR_RX_ACK_DELAY_INC + 1.5.

config BT_MESH_SAR_RX_SEG_INT_STEP
	hex "Segments reception interval step"
	range 0x00 0x0F
	default 0x05
	help
	  This value defines the segments reception interval step used for
	  delaying the transmission of an acknowledgment message after
	  receiving a new segmnet. The interval is measured in milliseconds
	  and calculated using the following formula:
	  (CONFIG_BT_MESH_SAR_RX_SEG_INT_STEP + 1) * 10 ms

config BT_MESH_SAR_RX_DISCARD_TIMEOUT
	hex "Discard timeout for reception of a segmented message"
	range 0x00 0x0F
	default 0x01
	help
	  This value defines the time since the last successfully received
	  segment before giving up the reception of a segmented message.

config BT_MESH_SAR_RX_ACK_RETRANS_COUNT
	hex "Total number of acknowledgment message retransmission"
	range 0x00 0x03
	default 0x00
	help
	  This value defines the total number of retranmissions of an
	  acknowledgment message that the stack will additionally send when the
	  size of segments in a segmented message is above the
	  CONFIG_BT_MESH_SAR_RX_SEG_THRESHOLD value.

endmenu

endif # BT_MESH_V1d1

menu "Capabilities"

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

endmenu # Capabilities

menu "Persistent storage"
	visible 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
	default 1 if !BT_SETTINGS # To keep compiling the code
	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.

if BT_MESH_RPL_STORAGE_MODE_SETTINGS && BT_SETTINGS

config BT_MESH_RPL_STORE_TIMEOUT
	int "Minimum interval after which unsaved RPL and SRPL entries are updated in the settings subsystem"
	range -1 1000000
	default 5
	help
	  This value defines time in seconds until unsaved RPL and SRPL entries
	  are 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.
	  Failure to store the RPL and becoming vulnerable after reboot
	  will cause the device to not perform the replay protection
	  required by the spec.

endif # BT_MESH_RPL_STORAGE_MODE_SETTINGS && BT_SETTINGS

config BT_MESH_SETTINGS_WORKQ
	bool "Store the Bluetooth mesh settings in a separate work queue"
	default y
	help
	  This option enables a separate cooperative thread which is used to
	  store Bluetooth mesh configuration. When this option is disabled,
	  the stack's configuration is stored in the system workqueue. This
	  means that the system workqueue will be blocked for the time needed
	  to store the pending data. This time may significantly increase if
	  the flash driver does the erase operation. Enabling this option
	  allows Bluetooth mesh not to block the system workqueue, and thus
	  process the incoming and outgoing messages while the flash driver
	  waits for the controller to allocate the time needed to write the
	  data and/or erase the required flash pages.

if BT_MESH_SETTINGS_WORKQ

config BT_MESH_SETTINGS_WORKQ_PRIO
	int
	default 1

config BT_MESH_SETTINGS_WORKQ_STACK_SIZE
	int "Stack size of the settings workq"
	default 1200 if BT_MESH_RPR_SRV
	default 880
	help
	  Size of the settings workqueue stack.

endif # BT_MESH_SETTINGS_WORKQ

endmenu # Persistent storage

rsource "shell/Kconfig"

if BT_CONN

config BT_MESH_MAX_CONN
	int "Maximum number of simultaneous Bluetooth connections"
	default BT_MAX_CONN
	range 1 BT_MAX_CONN
	help
	  Maximum number of simultaneous Bluetooth connections that the Bluetooth
	  mesh stack can use.

endif # BT_CONN

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_STATISTIC
	bool "The frame handling statistics [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  The module gathers statistics of received, relayed, and transmitted
	  frames. This helps to estimate the quality of the communication and
	  the sufficiency of configured advertiser instances.

endif # BT_MESH
