Wdrażanie funkcji zaawansowanych

Wyświetl źródło w GitHub

Niektóre funkcje zaawansowane są opcjonalne w zależności od tego, czy są obsługiwane na docelowej platformie sprzętowej.

Automatyczna klatka oczekuje

IEEE 802.15.4 określa dwa rodzaje metod transmisji danych: nadrzędny i podrzędny: przesyłanie bezpośrednie i pośrednie. To ostatnie urządzenie jest przeznaczone przede wszystkim na urządzenia do spania (SED), które przez większość czasu śpią, a okresowo do wybudzania rodzica, by pobrać dane z kolejek.

  • Przesyłanie bezpośrednie – rodzic wysyła ramkę danych bezpośrednio na urządzenie końcowe przenoszenia bezpośrednie

  • Transmisja pośrednia – rodzic przechowuje dane do momentu, w którym żąda ich urządzenie końcowe przenoszenia bezpośrednie

W pośrednim przypadku urządzenie podrzędne musi najpierw odpytywać rodzica, czy określi, czy są dostępne jakieś dane. Aby to zrobić, dziecko wysyła żądanie danych, które akceptuje rodzic. Następnie określa, czy zawiera dane dotyczące urządzenia podrzędnego. jeśli tak, wysyła pakiet danych do urządzenia podrzędnego, które potwierdza odbiór danych.

Jeśli stacja radiowa obsługuje dynamicznie ustawianie bitu oczekującego ramki w potwierdzeniach wychodzących na potrzeby SED, sterowniki muszą zaimplementować interfejs API dopasowania adresu źródłowego, aby włączyć tę funkcję. OpenThread wykorzystuje ten interfejs API, aby określić radio, w których dyrektywach SED ustawić element Frame Pending.

Jeśli sieć radiowa nie obsługuje dynamicznego ustawiania bitu ramki oczekującej, może to spowodować pominięcie interfejsu API adresu źródłowego.OT_ERROR_NOT_IMPLEMENTED danych

Wykrywanie i skanowanie energii

Funkcja skanowania/wykrywania energii wymaga układu radiowego do pobierania energii z wybranych kanałów i zwraca wykrytej wartości energii do górnej warstwy.

Jeśli ta funkcja nie jest wdrożona, warstwa MAC IEEE 802.15.4 wysyła/odbiera pakiet żądania/odpowiedzi Beacon w celu oceny bieżącej wartości energii na kanale.

Jeśli układ radiowy obsługuje funkcję Energy Scan/Detect, wyłącz logikę skanowania oprogramowania, ustawiając makro OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0.

Akceleracja sprzętowa dla mbedTLS

Polecenie mbedTLS określa kilka makr w głównym pliku nagłówka konfiguracji, mbedtls-config.h, aby umożliwić użytkownikom włączanie alternatywnych implementacji kluczy AES, SHA1, SHA2 i innych oraz indywidualne funkcje kryptografii krzywej eliptycznej (ECC) nad modułem GF(p). Wyświetl Przyspieszenie sprzętowe mbedTLS.

OpenThread nie włącza tych makr, dlatego symetryczne algorytmy kryptograficzne, algorytmy haszujące i funkcje ECC domyślnie używają implementacji oprogramowania. Takie wdrożenia wymagają znacznej ilości pamięci i zasobów obliczeniowych. Aby zapewnić optymalną wydajność i wygodę użytkowników, zalecamy włączenie akceleracji sprzętowej zamiast oprogramowania, aby wdrożyć powyższe operacje.

Aby włączyć akcelerację sprzętową w OpenThread, należy dodać następujące pliki nagłówków mbedTLS do definicji kompilacji ot-configw plikach CMake platformy:

  • Główna konfiguracja, która definiuje wszystkie niezbędne makra używane w OpenThread: /openthread/third-party/mbedtls/mbedtls-config.h
  • Konfiguracja dla danego użytkownika, która definiuje alternatywne implementacje modułów i funkcji: src/platform-name-mbedtls-config.h

Przykładowy element nrf52811.cmake:

target_compile_definitions(ot-config INTERFACE
    "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\""
)

Makra komentarza w mbedtls-config.h nie są wymagane i można je włączyć w pliku nagłówka konfiguracji dla akceleracji sprzętowej.

Pełną konfigurację dla konkretnego użytkownika znajdziesz w pliku mbedtls_config_autogen.h w ot-efr32.

Moduł AES

OpenThread Security używa kryptograficznego szyfrowania AES CCM (Counter with CBC-MAC) do szyfrowania i odszyfrowywania wiadomości IEEE 802.15.4 lub MLE oraz weryfikuje kod integracji wiadomości. Akceleracja sprzętowa powinna przynajmniej obsługiwać podstawowy tryb AES ECB (Electronic Codebook Book) dla wywołania podstawowego AES CCM.

Aby użyć alternatywnej implementacji modułu AES:

  1. Zdefiniuj makro MBEDTLS_AES_ALT w pliku konfiguracji mbedTLS dla poszczególnych użytkowników
  2. Określ ścieżkę pliku aes_alt.h za pomocą zmiennej MBEDTLS_CPPFLAGS

Moduł SHA256

OpenThread Security używa algorytmów haszowania HMAC i SHA256 do obliczania wartości hash na potrzeby zarządzania kluczami sieciowymi i generowania PSKc zgodnie ze specyfikacją wątku.

Aby użyć alternatywnej implementacji modułu SHA256:

  1. Zdefiniuj makro MBEDTLS_SHA256_ALT w pliku konfiguracji mbedTLS dla poszczególnych użytkowników
  2. Określ ścieżkę pliku sha256_alt.h za pomocą zmiennej MBEDTLS_CPPFLAGS

Funkcje ECC

Narzędzie mbedTLS obsługuje obecnie akcelerację sprzętową tylko w przypadku niektórych funkcji ECC, a nie w całym module, dlatego możesz wdrożyć niektóre funkcje zdefiniowane w sekcji path-to-mbedtls/library/ecp.c, aby przyspieszyć mnożenie punktu ECC.

Krzywa secp256r1 jest używana w algorytmie wymiany kluczy wersji roboczej ECJPAKE. Dlatego akceleracja sprzętowa musi przynajmniej obsługiwać operację krzywej Weierstrasa secp256r1. Przykład znajdziesz w punkcie SiLabs CRYPTO Hardware Acceleration for mbedTLS.