Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

高度な機能を実装する

GitHub でソースを見る

一部の高度な機能は、ターゲット ハードウェア プラットフォームでサポートされているかどうかに応じてオプションです。

自動フレーム待ち

IEEE 802.15.4 では、直接送信と間接送信の 2 種類のデータ送信方法が親と子の間で定義されています。後者は主に、ほとんどの時間スリープするスリープ状態のエンドデバイス(SED)向けに設計され、定期的にキューに格納されたデータを親にポーリングします。

  • Direct Transmission - 親はデータフレームをエンドデバイスに直接送信します。ダイレクトトランスミッション

  • 間接的な伝送 - 親は、意図されたエンドデバイスによって要求されるまでデータを保持します。 ダイレクトトランスミッション

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

無線通信が SED への送信確認応答のフレーム保留ビットを動的に設定することをサポートしている場合、ドライバは送信元アドレスの照合 API を実装して、この機能を有効にする必要があります。OpenThread はこの API を使用して、Frame Pending ビットを設定する SED をラジオに通知します。

無線が Frame Pending ビットの設定を動的にサポートしていない場合、無線は送信元アドレス一致 API をスタブアウトして OT_ERROR_NOT_IMPLEMENTED を返すことがあります。

無線でのエネルギー スキャン/検出

Energy Scan/Detect 機能では、選択したチャネルに存在するエネルギーをサンプリングし、検出されたエネルギー値を上位レイヤに返す無線チップが必要です。

この機能が実装されていない場合、IEEE 802.15.4 MAC レイヤはビーコン リクエスト / レスポンス パケットを送受信して、チャネルの現在のエネルギー値を評価します。

無線チップが Energy Scan/Detect をサポートしている場合は、マクロ OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0 を設定してソフトウェアのエネルギー スキャン ロジックを必ず無効にしてください。

mbedTLS のハードウェア アクセラレーション

mbedTLS は、ユーザーが AES、SHA1、SHA2、その他のモジュールの代替実装を有効にできるように、メイン構成ヘッダー ファイル(mbedtls-config.h)でいくつかのマクロを定義します。また、GF(p) モジュールの over 円曲線暗号(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 セキュリティは、IEEE 802.15.4 または MLE メッセージの暗号化/復号に AES CCM(Counter with CBC-MAC)暗号を適用して、メッセージ統合コードを検証します。ハードウェア アクセラレーションでは、少なくとも AES CCM の基本的な機能呼び出しに基本的な AES ECB(Electronic Codebook Book)モードをサポートする必要があります。

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

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

SHA256 モジュール

OpenThread セキュリティは、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 の短いワイヤストラス曲線操作をサポートする必要があります。SiLabs CRYPTO Hardware Acceleration for mbedTLS の例をご覧ください。