高度な機能を実装する

GitHub でソースを見る

一部の高度な機能は、対象ハードウェア プラットフォームでサポートされているかどうかに応じて省略できます。

自動フレーム保留

IEEE 802.15.4 では、親と子の間のデータ送信方法が 2 種類定義されています(直接送信と間接送信)。後者は、主にスリープ状態のエンドデバイス(SED)用に設計されており、キューに入れられたデータについて親をポーリングして、定期的に復帰させます。

  • 直接送信 - 親はデータフレームを直接エンドデバイス 直接伝送 に送信します。

  • 間接転送 - 親は目的のエンドデバイスからのリクエストがあるまでデータを保持します。 直接伝送

間接的なケースでは、子のエンドデバイスが最初に親にポーリングして、利用可能なデータがあるかどうかを判断する必要があります。これを行うために、子はデータ リクエストを送信し、親はそれを確認します。親は、子デバイスにデータがあるかどうかを判断します。子データがある場合は、子デバイスにデータパケットを送信し、子デバイスでデータの受信を確認します。

無線通信が SED への送信確認応答でフレーム保留ビットを動的に設定する場合、ドライバは、送信元アドレス一致 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 内でハードウェア アクセラレーションを有効にするには、プラットフォームの CMake ファイルで、次の mbedTLS 構成ヘッダー ファイルを ot-config コンパイル定義に追加する必要があります。

  • メイン構成。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 内のコメント付きマクロは必須ではなく、ハードウェア アクセラレーション用にユーザー固有の構成ヘッダー ファイルで有効にできます。

ユーザー固有の構成の完全な例については、ot-efr32mbedtls_config_autogen.h ファイルをご覧ください。

AES モジュール

OpenThread Security は、AES CCM(Counter with CBC-MAC)暗号を適用して IEEE 802.15.4 または MLE メッセージを暗号化/復号し、メッセージ統合コードを検証します。ハードウェア アクセラレーションは、AES CCM 基本機能呼び出しについて、少なくとも基本的な AES ECB(Electronic Codebook Book)モードをサポートしている必要があります。

別の AES モジュール実装を利用するには:

  1. ユーザー固有の mbedTLS 構成ヘッダー ファイルで MBEDTLS_AES_ALT マクロを定義する
  2. MBEDTLS_CPPFLAGS 変数を使用して、aes_alt.h ファイルのパスを指定します

SHA256 モジュール

OpenThread Security は、HMAC アルゴリズムと SHA256 ハッシュ アルゴリズムを適用して、Thread 仕様に従ってネットワーク キー管理と 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 の短い Weierstrass 曲線オペレーションをサポートする必要があります。例については、SiLabs CRYPTO Hardware Acceleration for mbedTLS をご覧ください。