blob: 95599304e0b2ed0659aa33807e26d91b7d549097 [file] [log] [blame]
# Copyright Runtime.io 2018. All rights reserved.
# Copyright Nordic Semiconductor ASA 2020. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
menuconfig MCUMGR
bool "mcumgr Support"
select NET_BUF
select TINYCBOR
help
This option enables the mcumgr management library.
if MCUMGR
module = MCUMGR
module-str = mcumgr
source "subsys/logging/Kconfig.template.log_config"
config APP_LINK_WITH_MCUMGR
bool "Link 'app' with MCUMGR"
default y
help
Add MCUMGR header files to the 'app' include path. It may be
disabled if the include paths for MCUMGR are causing aliasing
issues for 'app'.
config MGMT_CBORATTR_MAX_SIZE
int "The maximum size of a CBOR attribute during decoding"
default 512
help
The maximum size of a CBOR attribute during decoding
config MGMT_CBORATTR_FLOAT_SUPPORT
bool "Enable support for float"
help
The option enables float processing within CBOR attributes.
If your code requires processing of float numbers by CBOR,
the option needs to be enabled.
Disabling the option slightly reduces code footprint.
menu "Command Handlers"
menuconfig MCUMGR_CMD_FS_MGMT
bool "Enable mcumgr handlers for file management (insecure)"
depends on FILE_SYSTEM
help
Enables mcumgr handlers for file management
This option allows mcumgr clients to access anything in the
file system, including application-stored secrets like
private keys. Use of this feature in production is strongly
discouraged.
if MCUMGR_CMD_FS_MGMT
choice FS_MGMT_MAX_FILE_SIZE
prompt "Maximum file size that could be uploaded/downloaded"
default FS_MGMT_MAX_FILE_SIZE_64KB
help
Maximum file size that will be allowed to be downloaded from
device.
This option decides on number of bytes that are reserved in
CBOR frame for storage of offset/size of file downloaded.
config FS_MGMT_MAX_FILE_SIZE_64KB
bool "<= 64KB"
help
Files that have size up to 64KB require 1 to 3 bytes to encode
size/offset within CBOR frame with file chunk.
config FS_MGMT_MAX_FILE_SIZE_4GB
bool "<= 4GB"
help
Files that have size up to 4GB require 1 to 5 bytes to encode
size/offset within CBOR frame with file chunk.
endchoice
config FS_MGMT_MAX_OFFSET_LEN
int
default 3 if FS_MGMT_MAX_FILE_SIZE_64KB
default 5 if FS_MGMT_MAX_FILE_SIZE_4GB
help
Maximal byte length of encoded offset/size, within transferred
CBOR frame containing chunk of downloaded file.
This value affects how much of data will fit into download buffer,
as it selects sizes of fields within headers.
NOTE: This option is hidden intentionally as it is intended
to be assigned from limited set of allowed values, depending on
the selection made in FS_MGMT_MAX_FILE_SIZE menu.
config FS_MGMT_UL_CHUNK_SIZE
int "Maximum chunk size for file uploads"
default 512
help
Limits the maximum chunk size for file uploads, in bytes. A buffer of
this size gets allocated on the stack during handling of a file upload command.
config FS_MGMT_DL_CHUNK_SIZE_LIMIT
bool "Enable setting custom size of download file chunk"
help
By default file chunk, that will be read off storage and fit into
mcumgr frame, is automatically calculated to fit into buffer
of size MCUGMR_BUF_SIZE with all headers.
Enabling this option allows to set MAXIMUM value that will be
allowed for such chunk.
Look inside fs_mgmt_config.h for details.
if FS_MGMT_DL_CHUNK_SIZE_LIMIT
config FS_MGMT_DL_CHUNK_SIZE
int "Maximum chunk size for file downloads"
range 65 MCUMGR_BUF_SIZE
default MCUMGR_BUF_SIZE
help
Sets the MAXIMUM size of chunk which will be rounded down to
number of bytes that, with all the required headers, will fit
into MCUMGR_BUF_SIZE. This means that actual value might be lower
then selected, in which case compiler warning will be issued.
Look inside fs_mgmt_config.h for details.
Note that header sizes are affected by FS_MGMT_MAX_OFFSET_LEN.
endif
config FS_MGMT_PATH_SIZE
int "Maximum file path length"
default 64
help
Limits the maximum path length for file operations, in bytes. A buffer
of this size gets allocated on the stack during handling of file upload
and download commands.
endif
config MCUMGR_CMD_SHELL_MGMT
bool "Enable mcumgr handlers for shell management"
depends on SHELL
select SHELL_BACKEND_DUMMY
help
Enables mcumgr handlers for shell management. The handler will utilize
the dummy backend to execute shell commands and capture the output to
an internal memory buffer. This way, there is no interaction with
physical interfaces outside of the scope of the user.
It is possible to use additional shell backends in coordination
with this handler and they will not interfere.
The SHELL_BACKEND_DUMMY_BUF_SIZE will affect how many characters
will be returned from command output, if your output gets cut, then
increase the value. Remember to set MCUMGR_BUF_SIZE accordingly.
menuconfig MCUMGR_CMD_IMG_MGMT
bool "Enable mcumgr handlers for image management"
select FLASH
select MPU_ALLOW_FLASH_WRITE if ARM_MPU
select IMG_MANAGER
help
Enables mcumgr handlers for image management
if MCUMGR_CMD_IMG_MGMT
config IMG_MGMT_UL_CHUNK_SIZE
int "Maximum chunk size for image uploads"
default 512
depends on MCUMGR_CMD_IMG_MGMT
help
Limits the maximum chunk size for image uploads, in bytes. A buffer of
this size gets allocated on the stack during handling of a image upload
command.
config IMG_MGMT_UPDATABLE_IMAGE_NUMBER
int "Number of supported images"
default UPDATEABLE_IMAGE_NUMBER
range 1 2
help
Sets how many application images are supported (pairs of secondary and primary slots).
Setting this to 2 requires MCUMGR_BUF_SIZE to be at least 512b.
NOTE: The UPDATEABLE_IMAGE_NUMBER of MCUBOOT configuration, even for Zephyr build,
needs to be set to the same value; this is due to the fact that the mcumgr uses
boot_util and the UPDATEABLE_IMAGE_NUMBER controls number of images supported
by that library.
config IMG_MGMT_VERBOSE_ERR
bool "Verbose logging when uploading a new image"
help
Enable verbose logging during a firmware upgrade.
config IMG_MGMT_DUMMY_HDR
bool "Return dummy image header data for imgr functions"
help
Returns dummy image header data for imgr functions,
useful when there are no images present, Eg: unit tests.
config IMG_MGMT_DIRECT_IMAGE_UPLOAD
bool "Allow direct image upload"
help
Enables directly uploading image to selected image partition.
This changes how "image" is understood by mcumgr: normally the mcumgr allows to upload
to first slot of the only image it knows, where image is understood as two slots
(two DTS images for Zephyr); this allows to treat every DTS defined image as direct
target for upload, and more than two may be used (4 at this time).
NOTE: When direct upload is used the image numbers are shifted by + 1, and the default
behaviour is, when image is not selected, to upload to image that represents secndary
slot in normal operation.
config IMG_MGMT_REJECT_DIRECT_XIP_MISMATCHED_SLOT
bool "Reject Direct-XIP applications with mismatched address"
help
When enabled, the mcumgr will compare base address of application,
encoded into .bin file header with use of imgtool, on upload and will
reject binaries that would not be able to start from available
Direct-XIP address.
The base address can be set, to an image binary header, with imgtool,
using the --rom-fixed command line option.
config IMG_MGMT_FRUGAL_LIST
bool "Omit zero, empty or false values from status list"
help
The status list send back from the device will only be filled with data that is non-zero,
non-empty or true. This option slightly reduces number of bytes transferred back from
a device but requires support in client software, which has to default omitted values.
Works correctly with mcumgr-cli.
endif
menuconfig MCUMGR_CMD_OS_MGMT
bool "Enable mcumgr handlers for OS management"
select REBOOT
help
Enables mcumgr handlers for OS management
if MCUMGR_CMD_OS_MGMT
config OS_MGMT_RESET_MS
int "Delay before executing reset command (ms)"
default 250
help
When a reset command is received, the system waits this many milliseconds
before performing the reset. This delay allows time for the mcumgr
response to be delivered.
config OS_MGMT_TASKSTAT
bool "Support for taskstat command"
depends on THREAD_MONITOR
if OS_MGMT_TASKSTAT
config OS_MGMT_TASKSTAT_ONLY_SUPPORTED_STATS
bool "Send only data gathered by Zephyr"
default y
help
Response will not include fields the Zephyr does not collect statistic for.
Enable this if your client software is able to process "taskstat" response
that would be missing "runtime", "cswcnt", "last_checkin" and "next_checkin"
map entries for each listed task.
Enabling this option will slightly reduce code size.
choice OS_MGMT_TASKSTAT_THREAD_NAME_CHOICE
prompt "Characteristic used as thread name in taskstat"
default OS_MGMT_TASKSTAT_USE_THREAD_NAME_FOR_NAME if THREAD_NAME
default OS_MGMT_TASKSTAT_USE_THREAD_PRIO_FOR_NAME
help
Select what will serve as thread name in "taskstat" response.
By default taskstat responses use thread priority, when THREAD_NAME is disabled,
config OS_MGMT_TASKSTAT_USE_THREAD_NAME_FOR_NAME
bool "Thread name"
depends on THREAD_NAME
config OS_MGMT_TASKSTAT_USE_THREAD_IDX_FOR_NAME
bool "Thread index"
config OS_MGMT_TASKSTAT_USE_THREAD_PRIO_FOR_NAME
bool "Thread priority"
endchoice
config OS_MGMT_TASKSTAT_THREAD_NAME_LEN
int "Length of thread name to return in response"
default THREAD_MAX_NAME_LEN if THREAD_NAME
default 5 if !THREAD_NAME
range 3 THREAD_MAX_NAME_LEN if THREAD_NAME
range 3 6 if !THREAD_NAME
help
The length, including terminating 0, of the string that is sent in response
to taskstat command, as a thread name.
When THREAD_NAME is enabled then this defaults to THREAD_MAX_NAME_LEN.
When THREAD_NAME is disabled the name is generated from thread priority,
signed integer, and this number regulates how many digits will be used;
in such case this value should also take into account possible '-'
sign.
config OS_MGMT_TASKSTAT_SIGNED_PRIORITY
bool "Enable signed priorities"
help
Zephyr uses int8_t as thread priorities, but in taskstat response it encodes
them as unsigned. Enabling this option will use signed int for priorities in
responses, which is more natural for Zephyr.
Enable this option only if your client software is able to properly decode
and accept signed integers as priorities.
config OS_MGMT_TASKSTAT_STACK_INFO
bool "Include stack info in taskstat responses"
depends on THREAD_STACK_INFO
help
Enabling this option adds stack information into "taskstat" command
responses, this is default when THREAD_STACK_INFO is selected.
Disable this option only when your client application is able to
process "taskstat" response without the "stksiz" and "stkuse" fields.
It is worth disabling this option when THREAD_STACK_INFO is disabled,
as it will prevent sending zeroed stack information just to fill
all the fields in "taskstat" responses, and it will slightly reduce code size.
endif
config OS_MGMT_ECHO
bool "Support for echo command"
default y
endif
menuconfig MCUMGR_CMD_STAT_MGMT
bool "Enable mcumgr handlers for statistics management"
depends on STATS
help
Enables mcumgr handlers for statistics management.
config STAT_MGMT_MAX_NAME_LEN
int "Maximum stat group name length"
default 32
depends on MCUMGR_CMD_STAT_MGMT
help
Limits the maximum stat group name length in mcumgr requests, in bytes.
A buffer of this size gets allocated on the stack during handling of all
stat read commands. If a stat group's name exceeds this limit, it will
be impossible to retrieve its values with a stat show command.
menuconfig MCUMGR_GRP_ZEPHYR_BASIC
bool "Enable Zephyr specific basic group of commands"
help
Enables mcumgr to processing of Zephyr specific groups.
if MCUMGR_GRP_ZEPHYR_BASIC
config MCUMGR_GRP_BASIC_CMD_STORAGE_ERASE
bool "Enables storage erase command"
help
Enables command that allows to erase storage partition.
module=MGMT_SETTINGS
module-dep=LOG
module-str=SETTINGS
source "${ZEPHYR_BASE}/subsys/logging/Kconfig.template.log_config"
endif
endmenu
config MCUMGR_SMP_BT
bool "Bluetooth mcumgr SMP transport"
select BT
select BT_PERIPHERAL
select BT_GATT_DYNAMIC_DB
help
Enables handling of SMP commands received over Bluetooth.
if MCUMGR_SMP_BT
config MCUMGR_SMP_BT_AUTHEN
bool "Authenticated requirement for Bluetooth mcumgr SMP transport"
select BT_SMP
default y
help
Enables encrypted and authenticated connection requirement to
Bluetooth SMP transport.
config MCUMGR_SMP_BT_LATENCY_CONTROL
bool "Request low latency connection when handling SMP commands"
depends on SYSTEM_WORKQUEUE_PRIORITY < 0
help
Enables support for requesting low latency connection parameter when
SMP commands are handled. This option allows to speed up the command
exchange process.
Its recommended to enable this if SMP is used for DFU.
config MCUMGR_SMP_BT_LATENCY_CONTROL_DEFAULT_LATENCY
int "Default value for connection latency"
depends on MCUMGR_SMP_BT_LATENCY_CONTROL
default BT_PERIPHERAL_PREF_LATENCY if BT_GAP_PERIPHERAL_PREF_PARAMS
default 99
range 0 499
help
The value is a default connection latency that is used when restoring
from low latency mode.
config MCUMGR_SMP_BT_LATENCY_CONTROL_RESTORE_TIME
int "Connection latency restore time in milliseconds"
depends on MCUMGR_SMP_BT_LATENCY_CONTROL
default 5000
range 1 65535
help
The value is a time after which connection latency is restored
to default value
(:kconfig:`MCUMGR_SMP_BT_LATENCY_CONTROL_DEFAULT_LATENCY`). Latency
restoration time could take up to twice as long as specified time.
This is because of limiting CPU time needed to support this feature.
The implementation periodically checks if the low latency is still
needed every :kconfig:`MCUMGR_SMP_BT_LATENCY_CONTROL_RESTORE_TIME`.
The default latency is restored during check only if there was no SMP
command exchanged in period before the check
config MCUMGR_SMP_BT_LATENCY_CONTROL_RESTORE_RETRY_TIME
int "Connection latency restore retry time in milliseconds"
depends on MCUMGR_SMP_BT_LATENCY_CONTROL
default 1000
range 1 5000
help
In case connection latency restoration fails due to an error, this
option specifies the time after retry to set the default latency
(:kconfig:`MCUMGR_SMP_BT_LATENCY_CONTROL_DEFAULT_LATENCY`) would be
executed.
endif # MCUMGR_SMP_BT
config MCUMGR_SMP_SHELL
bool "Shell mcumgr SMP transport"
select SHELL
select SHELL_BACKEND_SERIAL
select BASE64
help
Enables handling of SMP commands received over shell. This allows
the shell to be use for both mcumgr commands and shell commands.
if MCUMGR_SMP_SHELL
config MCUMGR_SMP_SHELL_MTU
int "Shell SMP MTU"
default 256
help
Maximum size of SMP frames sent and received over shell. This value
must satisfy the following relation:
MCUMGR_SMP_SHELL_MTU <= MCUMGR_BUF_SIZE + 2
config MCUMGR_SMP_SHELL_RX_BUF_COUNT
int "Shell SMP RX buffer count"
default 2
help
Number of buffers used for receiving SMP fragments over shell.
endif # MCUMGR_SMP_SHELL
config MCUMGR_SMP_UART
bool "UART mcumgr SMP transport"
select UART_MCUMGR
select BASE64
help
Enables handling of SMP commands received over UART. This is a
lightweight alternative to MCUMGR_SMP_SHELL. It allows mcumgr
commands to be received over UART without requiring an additional
thread.
if UART_ASYNC_API && MCUMGR_SMP_UART
menuconfig MCUMGR_SMP_UART_ASYNC
bool "Use async UART API when available"
help
The option enables use of UART async API when available for selected mcumgr uart port.
if MCUMGR_SMP_UART_ASYNC
config MCUMGR_SMP_UART_ASYNC_BUFS
int "Number of async RX UART buffers"
range 2 8
default 2
help
The asynchronous UART API requires registering RX buffers for received data; when the RX
reaches the end of a buffer, it will send event requesting next buffer, to be able to
receive data without stopping due to running out of buffer space. At least two buffers
area required for smooth RX operation.
config MCUMGR_SMP_UART_ASYNC_BUF_SIZE
int "Size of single async RX UART buffer"
default 64
help
The size of single buffer for asynchronous RX.
endif # MCUMGR_SMP_UART_ASYNC
endif # UART_ASYNC_API
config MCUMGR_SMP_UART_MTU
int "UART SMP MTU"
default 256
depends on MCUMGR_SMP_UART
help
Maximum size of SMP frames sent and received over UART, in bytes.
This value must satisfy the following relation:
MCUMGR_SMP_UART_MTU <= MCUMGR_BUF_SIZE + 2
config MCUMGR_SMP_UDP
bool "UDP mcumgr SMP transport"
select NETWORKING
select NET_UDP
select NET_SOCKETS
select NET_SOCKETS_POSIX_NAMES
help
Enables handling of SMP commands received over UDP.
Will start a thread for listening on the configured UDP port.
if MCUMGR_SMP_UDP
config MCUMGR_SMP_UDP_IPV4
bool "UDP SMP using IPv4"
depends on NET_IPV4
default y
help
Enable SMP UDP using IPv4 addressing.
Can be enabled alongside IPv6 addressing.
config MCUMGR_SMP_UDP_IPV6
bool "UDP SMP using IPv6"
depends on NET_IPV6
help
Enable SMP UDP using IPv6 addressing.
Can be enabled alongside IPv4 addressing.
config MCUMGR_SMP_UDP_PORT
int "UDP SMP port"
default 1337
help
UDP port that SMP server will listen for SMP commands on.
config MCUMGR_SMP_UDP_STACK_SIZE
int "UDP SMP stack size"
default 512
help
Stack size of the SMP UDP listening thread
config MCUMGR_SMP_UDP_THREAD_PRIO
int "UDP SMP thread priority"
default 0
help
Scheduling priority of the SMP UDP listening thread.
config MCUMGR_SMP_UDP_MTU
int "UDP SMP MTU"
default 1500
help
Maximum size of SMP frames sent and received over UDP, in bytes.
This value must satisfy the following relation:
MCUMGR_SMP_UDP_MTU <= MCUMGR_BUF_SIZE + SMP msg overhead - address size
where address size is determined by IPv4/IPv6 selection.
endif # MCUMGR_SMP_UDP
config MCUMGR_BUF_COUNT
int "Number of mcumgr buffers"
default 2 if MCUMGR_SMP_UDP
default 4
help
The number of net_bufs to allocate for mcumgr. These buffers are
used for both requests and responses.
config MCUMGR_BUF_SIZE
int "Size of each mcumgr buffer"
default 2048 if MCUMGR_SMP_UDP
default 384
help
The size, in bytes, of each mcumgr buffer. This value must satisfy
the following relation:
MCUMGR_BUF_SIZE >= transport-specific-MTU + transport-overhead
In case when MCUMGR_SMP_SHELL is enabled this value should be set to
at least SHELL_BACKEND_DUMMY_BUF_SIZE + 32.
config MCUMGR_BUF_USER_DATA_SIZE
int "Size of mcumgr buffer user data"
default 24 if MCUMGR_SMP_UDP && MCUMGR_SMP_UDP_IPV6
default 8 if MCUMGR_SMP_UDP && MCUMGR_SMP_UDP_IPV4
default 4
help
The size, in bytes, of user data to allocate for each mcumgr buffer.
Different mcumgr transports impose different requirements for this
setting. A value of 4 is sufficient for UART, shell, and bluetooth.
For UDP, the userdata must be large enough to hold a IPv4/IPv6 address.
endif # MCUMGR