Посмотреть исходный код на GitHub
Некоторые расширенные функции являются дополнительными и зависят от того, поддерживаются ли они целевой аппаратной платформой.
Автоматический кадр ожидает рассмотрения
IEEE 802.15.4 определяет два типа методов передачи данных между родительским и дочерним элементами: прямая передача и косвенная передача. Последний предназначен в первую очередь для спящих конечных устройств (SED), которые спят большую часть времени, периодически просыпаясь, чтобы опросить родительский элемент на наличие данных в очереди.
Прямая передача — родитель отправляет кадр данных непосредственно на конечное устройство.
Косвенная передача — родительский элемент хранит данные до тех пор, пока их не запросит предполагаемое конечное устройство.
В косвенном случае дочернее конечное устройство должно сначала опросить родительское, чтобы определить, доступны ли для него какие-либо данные. Для этого ребенок отправляет запрос данных, который родитель подтверждает. Затем родительский элемент определяет, есть ли у него данные для дочернего устройства; если да, то он отправляет пакет данных дочернему устройству, которое подтверждает получение данных.
Если радиостанция поддерживает динамическую установку бита ожидания кадра в исходящих подтверждениях для SED, драйверы должны реализовать API сопоставления адреса источника, чтобы включить эту возможность. OpenThread использует этот API, чтобы сообщить радиостанции, для каких SED установить бит ожидания кадра.
Если радиостанция не поддерживает динамическую установку бита ожидания кадра, радиостанция может отключить API сопоставления исходного адреса и вернуть OT_ERROR_NOT_IMPLEMENTED
.
Сканирование/обнаружение энергии с помощью радио
Функция сканирования/обнаружения энергии требует, чтобы радиочип производил выборку энергии, представленной в выбранных каналах, и возвращал обнаруженное значение энергии на верхний уровень.
Если эта функция не реализована, уровень MAC IEEE 802.15.4 отправляет/принимает пакет запроса/ответа маяка для оценки текущего значения энергии в канале.
Если радиочип поддерживает сканирование/обнаружение энергии, обязательно отключите логику программного сканирования энергии, установив макрос OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0
.
Аппаратное ускорение для mbedTLS
mbedTLS определяет несколько макросов в основном файле заголовка конфигурации mbedtls-config.h
, чтобы позволить пользователям включать альтернативные реализации AES, SHA1, SHA2 и других модулей, а также отдельные функции для шифрования эллиптических кривых (ECC) через GF. (р) модуль. Дополнительную информацию см. в разделе Аппаратное ускорение mbedTLS .
OpenThread не поддерживает эти макросы, поэтому симметричные алгоритмы шифрования, алгоритмы хеширования и функции ECC по умолчанию используют программные реализации. Эти реализации требуют значительного объема памяти и вычислительных ресурсов. Для оптимальной производительности и лучшего взаимодействия с пользователем мы рекомендуем включить аппаратное ускорение вместо программного обеспечения для реализации вышеуказанных операций.
Чтобы включить аппаратное ускорение в OpenThread, необходимо добавить следующие файлы заголовков конфигурации mbedTLS в определения компиляции ot-config
в файлах CMake платформы:
- Основная конфигурация, определяющая все необходимые макросы, используемые в OpenThread:
/openthread/third-party/mbedtls/mbedtls-config.h
Third-party/mbedtls/mbedtls-config.h - Пользовательская конфигурация, определяющая альтернативные реализации модулей и функций:
src/ platform-name -mbedtls-config.h
Пример из nrf52811.cmake
:
target_compile_definitions(ot-config INTERFACE "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\"" )
Макросы с комментариями в mbedtls-config.h
не являются обязательными и могут быть включены в заголовочном файле пользовательской конфигурации для аппаратного ускорения.
Полный пример пользовательской конфигурации см. в файле mbedtls_config_autogen.h
в ot-efr32
.
AES-модуль
OpenThread Security применяет шифрование AES CCM (счетчик с CBC-MAC) для шифрования/дешифрования сообщений IEEE 802.15.4 или MLE и проверяет код интеграции сообщений. Аппаратное ускорение должно, по крайней мере, поддерживать базовый режим AES ECB (электронной кодовой книги) для базового функционального вызова AES CCM.
Чтобы использовать альтернативную реализацию модуля AES:
- Определите макрос
MBEDTLS_AES_ALT
в заголовочном файле конфигурации mbedTLS для конкретного пользователя. - Укажите путь к файлу
aes_alt.h
, используя переменнуюMBEDTLS_CPPFLAGS
Модуль SHA256
OpenThread Security применяет алгоритмы хэширования HMAC и SHA256 для расчета значения хеш-функции для управления сетевыми ключами и генерации PSKc в соответствии со спецификацией потока.
Чтобы использовать альтернативную реализацию базового модуля SHA256:
- Определите макрос
MBEDTLS_SHA256_ALT
в заголовочном файле конфигурации mbedTLS для конкретного пользователя. - Укажите путь к файлу
sha256_alt.h
используя переменнуюMBEDTLS_CPPFLAGS
Функции ECC
Поскольку mbedTLS в настоящее время поддерживает аппаратное ускорение только для частей функций ECC, а не для всего модуля, вы можете реализовать некоторые функции, определенные в path-to-mbedtls /library/ecp.c
для ускорения умножения точек ECC.
Кривая secp256r1 используется в алгоритме обмена ключами проекта ECJPAKE . Следовательно, аппаратное ускорение должно, по крайней мере, поддерживать работу с короткой кривой Вейерштрасса secp256r1. Пример см. в разделе Аппаратное ускорение SiLabs CRYPTO для mbedTLS .