Implementacja funkcji zaawansowanych

Wyświetl źródło na GitHubie

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

Oczekująca automatyczna ramka

IEEE 802.15.4 definiuje 2 rodzaje metod przesyłania danych między zasobami nadrzędnymi i podrzędnymi: transmisję bezpośrednią i pośrednią. Ta druga funkcja jest przeznaczona głównie dla urządzeń SED, które śpią najczęściej, okresowo budząc się, aby przeprowadzić ankietę wśród rodziców.

  • Przesyłanie bezpośrednie – wydawca nadrzędny wysyła ramkę danych bezpośrednio do urządzenia końcowego. Transmisja bezpośrednia

  • Transmitowanie pośrednie – dane rodzica są przechowywane do momentu, aż zostanie wysłane do odpowiedniego urządzenia końcowego.Transmisja bezpośrednia

W tym drugim przypadku urządzenie podrzędne musi najpierw przeprowadzić ankietę, aby ustalić, czy są w nim dostępne dane. Aby to zrobić, wydawca podrzędny wysyła żądanie danych, które rodzic wyraża. Następnie określa, czy na urządzeniu podrzędnym są jakieś dane. W takim przypadku wysyła do niego pakiet danych, który potwierdza otrzymanie danych.

Jeśli radio obsługuje dynamiczne ustawianie bitu Pending Frame w potwierdzeniach wychodzących na potrzeby SED, aby można było włączyć tę funkcję, sterowniki muszą zaimplementować interfejs dopasowania adresu źródłowego. OpenThread używa tego interfejsu API, by poinformować radio, do którego parametru SED ma ustawić oczekujący bit Frame.

Jeśli radio nie obsługuje dynamicznego ustawienia bitu Frame Pending, element radiowy może zostać usunięty z interfejsu API adresu źródłowego, co spowoduje zwrócenie OT_ERROR_NOT_IMPLEMENTED.

Skanowanie energetyczne/wykrywanie za pomocą radia

Funkcja skanowania/wykrywania energii wymaga, aby fragment radiowy próbował wykorzystywać energię przedstawianą w wybranych kanałach i zwracać wykrytą wartość do górnej warstwy.

Jeśli ta funkcja nie jest zaimplementowana, warstwa MAC IEEE 802.15.4 wysyła/odbiera pakiet Beacon żądania/odpowiedzi, aby ocenić aktualną wartość energii kanału.

Jeśli element radiowy obsługuje skanowanie/wykrywanie energii, pamiętaj, aby wyłączyć logikę skanowania oprogramowania, ustawiając makro OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0.

Akceleracja sprzętowa dla mbedTLS

mbedTLS definiuje kilka makr w głównym pliku nagłówka konfiguracji mbedtls-config.h, aby umożliwić użytkownikom włączanie alternatywnych rozwiązań AES, SHA1, SHA2 i innych modułów, a także poszczególnych funkcji kryptografii krzywych eliptycznych (ECC) w module GF(p). Aby dowiedzieć się więcej, zobacz akcelerację sprzętową mbedTLS.

OpenThread nie włącza tych makr, dlatego symetryczne algorytmy kryptograficzne, algorytmy szyfrowania i funkcje ECC domyślnie wykorzystują implementacje oprogramowania. Te implementacje wymagają znacznych ilości pamięci i mocy obliczeniowej. W celu zapewnienia optymalnej wydajności i wygody użytkowników zalecamy używanie akceleracji sprzętowej zamiast oprogramowania do wykonywania powyższych operacji.

Aby włączyć akcelerację sprzętową w OpenThread, do definicji kompilacji ot-config w plikach CMake platformy należy dodać te pliki nagłówka konfiguracji mbedTLS:

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

Przykład z nrf52811.cmake:

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

Skomentowane makra w formacie mbedtls-config.h nie są wymagane i można je włączyć w pliku nagłówka konfiguracji konkretnego użytkownika, aby przyspieszyć akcelerację sprzętową.

Pełną przykładową konfigurację dla konkretnych użytkowników znajdziesz w pliku mbedtls_config_autogen.h w ot-efr32.

Moduł AES

OpenThread Security stosuje kryptowaluty AES CCM (licznik z CBC-MAC) do szyfrowania i odszyfrowywania wiadomości w IEEE 802.15.4 lub MLE, a także weryfikuje kod integracji wiadomości. Akceleracja sprzętowa przynajmniej obsługuje podstawowy tryb AES ECB (Electronic Codebook Book) w przypadku podstawowych funkcji AES CCM.

Aby użyć alternatywnego modułu modułu AES:

  1. Zdefiniuj makro MBEDTLS_AES_ALT w pliku nagłówka konfiguracji mbedTLS dla użytkownika
  2. Określ ścieżkę do pliku aes_alt.h za pomocą zmiennej MBEDTLS_CPPFLAGS

Moduł SHA256

OpenThread Security stosuje algorytmy haszujące HMAC i SHA256 do obliczania wartości skrótu Zarządzania kluczem sieci i generowania PSKc zgodnie ze specyfikacją Thread.

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

  1. Zdefiniuj makro MBEDTLS_SHA256_ALT w pliku nagłówka konfiguracji mbedTLS dla użytkownika
  2. Określ ścieżkę do pliku sha256_alt.h za pomocą zmiennej MBEDTLS_CPPFLAGS

Funkcje ECC

mbedTLS obsługuje obecnie akcelerację sprzętową tylko w przypadku niektórych funkcji ECC, a nie w całym module. Aby przyspieszyć mnożenie punktów ECC, możesz zaimplementować niektóre funkcje zdefiniowane w zasadzie path-to-mbedtls/library/ecp.c.

Krzywa secp256r1 jest używana w algorytmie wymiany kluczy w wersji roboczej ECJPAKE. Dlatego akceleracja sprzętowa powinna obsługiwać przynajmniej krótszą krzywą secp256r1. Przykład znajdziesz w artykule Akceleracja sprzętowa CRYPTO dla mbedTLS.