實作進階功能

前往 GitHub 查看原始碼

部分進階功能為選用功能,視目標硬體平台是否支援這些功能而定。

待定影格

IEEE 802.15.4 定義父項與子項之間的資料傳輸方式:直接傳輸和間接傳輸。後者主要針對睡意裝置 (SED) 睡眠,大部分時間會休眠,且會定期在父項中輪詢佇列中的資料。

  • 直接傳輸 - 父項直接將資料影格傳送到最終裝置 直傳

  • 間接傳輸 — 父項資料會保留,直到其最終結束裝置要求 直傳

在間接情況下,子端裝置必須先輪詢父項,以判斷是否有可用的資料。為此,子項會傳送資料要求,由父項確認。接著,父項會判斷其是否有子裝置的任何資料;如果有,就會將資料封包傳送至子裝置,確認接收資料。

如果無線電支援在 SED 的傳出確認中動態設定「Frame Pending」位元,驅動程式就必須實作「Source address match」(來源位址比對) API 才能啟用這項功能。OpenThread 使用這個 API 告訴無線電要設定影格待處理位元的 SED。

如果無線電不支援動態設定 Frame Pending 位元,則圓形按鈕可能會將來源位址比對 API 虛設常式,以傳回 OT_ERROR_NOT_IMPLEMENTED

以無線電功能掃描/偵測

「能源掃描/偵測」功能需要無線電晶片對所選管道中的能量進行取樣,並將偵測到的能量值傳回上層。

如未實作這項功能,IEEE 802.15.4 MAC 層會傳送/接收信標要求/回應封包,以評估管道目前的能量值。

如果無線電晶片支援能源掃描/偵測功能,請務必設定巨集 OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0 來停用軟體能源掃描邏輯。

mbedTLS 硬體加速

mbedTLS 在主要設定標頭檔案 mbedtls-config.h 中定義了幾個巨集,可讓使用者啟用 AES、SHA1、SHA2 和其他模組的替代實作方式,以及針對 GF (p) 模組的橢圓曲線加密(ECC) 個別函式。詳情請參閱 mbedTLS 硬體加速

OpenThread 不會啟用這些巨集,因此對稱式加密演算法、雜湊演算法和 ECC 函式預設都會使用軟體實作。這些實作需要大量的記憶體和運算資源。為達到最佳效能並享有更優質的使用者體驗,建議您啟用硬體加速,而非軟體來實作上述作業。

如要在 OpenThread 中啟用硬體加速功能,應將下列 mbedTLS 設定標頭檔案新增至平台 CMake 檔案的 ot-config 編譯定義:

nrf52811.cmake 範例:

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

mbedtls-config.h 中的註解巨集並非強制,而且可以在使用者專屬的設定標頭檔案中啟用,以便執行硬體加速功能。

如需使用者專屬設定的完整範例,請參閱 ot-efr32 中的 mbedtls_config_autogen.h 檔案。

AES 模組

OpenThread Security 套用 AES CCM (計數器與 CBC-MAC) 加密機制,來加密/解密 IEEE 802.15.4 或 MLE 訊息,並驗證訊息整合代碼。硬體加速功能至少要支援 AES CCM 基本功能呼叫的基本 AES ECB (電子書籍簿) 模式。

如何使用替代的 AES 模組實作:

  1. 在使用者專屬的 mbedTLS 設定標頭檔案中定義 MBEDTLS_AES_ALT 巨集
  2. 使用 MBEDTLS_CPPFLAGS 變數指出 aes_alt.h 檔案的路徑

SHA256 模組

OpenThread Security 套用 HMAC 和 SHA256 雜湊演算法,根據執行緒規格計算網路金鑰管理和 PSKc 產生雜湊值。

如要使用替代的基本 SHA256 模組實作:

  1. 在使用者專屬的 mbedTLS 設定標頭檔案中定義 MBEDTLS_SHA256_ALT 巨集
  2. 使用 MBEDTLS_CPPFLAGS 變數指出 sha256_alt.h 檔案的路徑

ECC 函式

因為 mbedTLS 目前僅支援 ECC 函式的部分硬體加速,而非整個模組,因此您可以選擇實作 path-to-mbedtls/library/ecp.c 中定義的某些函式,以加速 ECC 點乘法。

曲線 secp256r1 用於 ECJPAKE 草稿的金鑰交換演算法。因此,硬體加速功能至少應支援 secp256r1 短項向外曲線曲線作業。如需範例,請參閱 SedLabs CRYPTO mbedTLS 硬體加速一文。