Реализовать расширенные функции

Посмотреть исходный код на GitHub

Некоторые расширенные функции являются необязательными, в зависимости от того, поддерживаются ли они на целевой аппаратной платформе.

Автокадр ожидает

IEEE 802.15.4 определяет два типа методов передачи данных между родителем и потомком: прямая передача и непрямая передача. Последний предназначен в первую очередь для спящих конечных устройств (SED), которые большую часть времени находятся в спящем режиме, периодически просыпаясь для опроса родительского устройства на наличие данных в очереди.

  • Прямая передача — родитель отправляет фрейм данных непосредственно на конечное устройство. Прямая передача

  • Косвенная передача — родитель хранит данные до тех пор, пока не будет запрошено предполагаемым конечным устройством. Прямая передача

В непрямом случае дочернее конечное устройство должно сначала опросить родительское устройство, чтобы определить, доступны ли для него какие-либо данные. Для этого ребенок отправляет запрос данных, который родитель подтверждает. Затем родитель определяет, есть ли у него какие-либо данные для дочернего устройства; если это так, он отправляет пакет данных дочернему устройству, который подтверждает получение данных.

Если радиостанция поддерживает динамическую установку бита ожидания кадра в исходящих подтверждениях для SED, драйверы должны реализовать API сопоставления исходного адреса , чтобы включить эту возможность. OpenThread использует этот API, чтобы сообщить радиостанции, для каких SED следует установить бит ожидания кадра.

Если радиостанция не поддерживает динамическую установку бита ожидания кадра, радиостанция может заглушить API сопоставления исходного адреса, чтобы вернуть OT_ERROR_NOT_IMPLEMENTED .

Сканирование/обнаружение энергии по радио

Функция сканирования/обнаружения энергии требует, чтобы радиочип производил выборку энергии, представленной на выбранных каналах, и возвращал обнаруженное значение энергии на верхний уровень.

Если эта функция не реализована, уровень MAC IEEE 802.15.4 отправляет/принимает пакет запроса/ответа маяка для оценки текущего значения энергии на канале.

Если радиочип поддерживает Energy Scan/Detect, обязательно отключите программную логику сканирования энергии, установив макрос 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
  • Пользовательская конфигурация, определяющая альтернативные реализации модулей и функций: 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:

  1. Определите макрос MBEDTLS_AES_ALT в пользовательском заголовочном файле конфигурации mbedTLS.
  2. Укажите путь к файлу aes_alt.h с помощью переменной MBEDTLS_CPPFLAGS

Модуль SHA256

OpenThread Security применяет хеш-алгоритмы HMAC и SHA256 для вычисления хеш-значения для управления сетевым ключом и генерации PSKc в соответствии со спецификацией потока.

Чтобы использовать альтернативную базовую реализацию модуля SHA256:

  1. Определите макрос MBEDTLS_SHA256_ALT в пользовательском заголовочном файле конфигурации mbedTLS.
  2. Укажите путь к файлу sha256_alt.h с помощью переменной MBEDTLS_CPPFLAGS

Функции ЕСС

Поскольку в настоящее время mbedTLS поддерживает аппаратное ускорение только для частей функций ECC, а не для всего модуля, вы можете реализовать некоторые функции, определенные в path-to-mbedtls /library/ecp.c , для ускорения умножения точек ECC.

Кривая secp256r1 используется в алгоритме обмена ключами проекта ECJPAKE . Следовательно, аппаратное ускорение должно как минимум поддерживать работу с короткой кривой Вейерштрасса secp256r1. В качестве примера см. Аппаратное ускорение SiLabs CRYPTO для mbedTLS .