

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ネットワークトランスポートインターフェイスの移植
<a name="afr-porting-network-transport-interface"></a>

## TLS ライブラリの統合
<a name="afr-porting-tls"></a>

Transport Layer Security (TLS) 認証には、お好みの TLS スタックを使用してください。[Mbed TLS](https://tls.mbed.org/) は FreeRTOS ライブラリでテストされているため、使用することをお勧めします。この例は、この [GitHub](https://github.com/FreeRTOS/FreeRTOS) リポジトリにあります。

デバイスで使用されている TLS 実装にかかわらず、TLS スタックの基礎となるトランスポートフックを TCP/IP スタックで実装する必要があります。[AWS IoTでサポートされている TLS 暗号スイート](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html#tls-cipher-suite-support)をサポートする必要があります。

## ネットワークトランスポートインターフェイスライブラリの移植
<a name="network-intro"></a>

[coreMQTT](https://www.freertos.org/mqtt/index.html) と [coreHTTP](https://www.freertos.org/http/index.html) を使用するには、ネットワークトランスポートインターフェイスを実装する必要があります。ネットワークトランスポートインターフェイスには、1 つのネットワーク接続でデータを送受信するのに必要な関数ポインタとコンテキストデータが含まれています。詳細については、「[Transport Interface](https://www.freertos.org/network-interface.html)」を参照してください。FreeRTOS には、これらの実装を検証するための一連の組み込みネットワークトランスポートインターフェイステストが用意されています。以下のセクションでは、これらのテストを実行するためのプロジェクトを設定する方法について説明します。

## 前提条件
<a name="prereqs"></a>

このテストを移植するには、以下のことが必要です。
+ 検証済みの FreeRTOS カーネルポートで FreeRTOS をビルドできるビルドシステムを備えたプロジェクト。
+ ネットワークドライバーの実用的な実装。

## 移植
<a name="porting-network-transport-interface"></a>
+ [FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests) をサブモジュールとしてプロジェクトに追加します。サブモジュールは、ビルド可能な限り、プロジェクトのどこに配置しても構いません。
+ `config_template/test_execution_config_template.h` と `config_template/test_param_config_template.h` をビルドパス内のプロジェクトの場所にコピーし、名前を `test_execution_config.h` と `test_param_config.h` に変更します。
+ 関連ファイルをビルドシステムに含めます。`CMake` を使用している場合は、`qualification_test.cmake` と `src/transport_interface_tests.cmake` を使用して関連ファイルを含めます。
+ 以下の関数を適切なプロジェクトの場所に実装してください。
+ 
  + `network connect function`: 署名は、`NetworkConnectFunc` によって `src/common/network_connection.h` で定義されています。この関数は、ネットワークコンテキストへのポインタ、ホスト情報へのポインタ、およびネットワーク認証情報へのポインタを受け取ります。提供されたネットワーク認証情報を使用して、ホスト情報で指定されたサーバーとの接続を確立します。
  + `network disconnect function`: 署名は、`NetworkDisconnectFunc` によって `src/common/network_connection.h` で定義されています。この関数は、ネットワークコンテキストへのポインタを受け取ります。ネットワークコンテキストに保存されている以前に確立された接続を切断します。
  + `setupTransportInterfaceTestParam()`: これは `src/transport_interface/transport_interface_tests.h` で定義されています。実装には、`transport_interface_tests.h` で定義されているものとまったく同じ名前と署名が必要です。この関数は、*TransportInterfaceTestParam* 構造体へのポインタを受け取ります。この関数は、トランスポートインターフェイステストで使用される *TransportInterfaceTestParam* 構造体のフィールドに入力します。
+ テスト出力ログがデバイスログとインターリーブしないように、**UNITY\$1OUTPUT\$1CHAR** を実装します。
+ アプリケーションから `runQualificationTest()` を呼び出します。呼び出す前に、デバイスのハードウェアが正しく初期化され、ネットワークが接続されている必要があります。

### 認証情報管理 (デバイス上で生成されたキー)
<a name="cred-management-key"></a>

`test_param_config.h` の **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** が 1 に設定されている場合、デバイスアプリケーションは新しいデバイス上のキーペアを生成し、パブリックキーを出力します。デバイスアプリケーションは、エコーサーバーとの TLS 接続を確立する際、エコーサーバーのルート CA およびクライアント証明書として、**ECHO\$1SERVER\$1ROOT\$1CA** および **TRANSPORT\$1CLIENT\$1CERTIFICATE** を使用します。IDT は、これらのパラメータを認定実行中に設定します。

### 認証情報管理 (キーのインポート)
<a name="cred-management-importing-key"></a>

デバイスアプリケーションは、エコーサーバーとの TLS 接続を確立する際、エコーサーバーのルート CA、クライアント証明書、およびクライアントプライベートキーとして、`test_param_config.h` の **ECHO\$1SERVER\$1ROOT\$1CA**、**TRANSPORT\$1CLIENT\$1CERTIFICATE**、および **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY** を使用します。IDT は、これらのパラメータを認定実行中に設定します。

## テスト
<a name="testing-transport-interface"></a>

このセクションでは、認定テストを使用してトランスポートインターフェイスをローカルでテストする方法について説明します。その他の詳細については、GitHub の FreeRTOS-Libraries-Integration-Tests の [transport\$1interface](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/src/transport_interface) セクションにある README.md ファイルを参照してください。

または、IDT を使用して実行を自動化することもできます。詳細については、「FreeRTOS ユーザーガイド」の「[AWS IoT Device Tester for FreeRTOS](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html)」を参照してください。

### テストの有効化
<a name="enabling-test"></a>

`test_execution_config.h` を開いて、**TRANSPORT\$1INTERFACE\$1TEST\$1ENABLED** を 1 に定義します。

### テスト用エコーサーバーのセットアップ
<a name="configuring-echo-server-test"></a>

ローカルテストには、テストを実行するデバイスからアクセスできるエコーサーバーが必要です。トランスポートインターフェイスの実装が TLS をサポートしている場合、エコーサーバーは TLS をサポートしている必要があります。まだ所有していない場合は、[FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/tools/echo_server) GitHub リポジトリにエコーサーバーの実装があります。

### テスト用プロジェクトの設定
<a name="configure-project"></a>

`test_param_config.h` で、**ECHO\$1SERVER\$1ENDPOINT** と **ECHO\$1SERVER\$1PORT** を前のステップのエンドポイントとサーバーのセットアップに更新します。

### 認証情報のセットアップ (デバイス上で生成されたキー)
<a name="setup-credentials-device-key"></a>
+ **ECHO\$1SERVER\$1ROOT\$1CA** をエコーサーバーのサーバー証明書に設定します。
+ **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** を 1 に設定すると、キーペアが生成され、パブリックキーが取得されます。
+ キー生成後に、**FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** を 0 に戻します。
+ パブリックキー、サーバーキー、および証明書を使用して、クライアント証明書を生成します。
+ **TRANSPORT\$1CLIENT\$1CERTIFICATE** を生成されたクライアント証明書に設定します。

### 認証情報のセットアップ (キーのインポート)
<a name="setup-credentials-import-key"></a>
+ **ECHO\$1SERVER\$1ROOT\$1CA** をエコーサーバーのサーバー証明書に設定します。
+ **TRANSPORT\$1CLIENT\$1CERTIFICATE** を事前に生成されたクライアント証明書に設定します。
+ **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY** を事前に生成されたクライアントプライベートキーに設定します。

### アプリケーションのビルドとフラッシュ
<a name="build-flash"></a>

任意のツールチェーンを使用して、アプリケーションのビルドとフラッシュを行います。`runQualificationTest()` が呼び出されると、トランスポートインターフェイスのテストが実行されます。テスト結果はシリアルポートに出力されます。

**注記**  
FreeRTOS のデバイスを正式に認定するには、デバイスの移植されたソースコードを OTA PAL および OTA E2E テストグループに対して検証する必要があります AWS IoT Device Tester。[FreeRTOS ユーザーガイドの「Using AWS IoT Device Tester for](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html) FreeRTOS」の指示に従って、ポート検証 AWS IoT Device Tester 用に を設定します。 *FreeRTOS * 特定のライブラリのポートをテストするには、 フォルダの `device.json` ファイル AWS IoT Device Tester `configs`で正しいテストグループを有効にする必要があります。