可視化によるスレッド ネットワークのテスト

1. はじめに

5abd22afa2f2ee9a.png

Thread、OpenThread、OTNS、Silk とは何ですか?

Thread は、デバイス間の安全な通信とデバイス間の通信を可能にする IP ベースの低電力ワイヤレス メッシュ ネットワーク プロトコルです。Thread ネットワークはトポロジの変更に対応して単一障害点を回避できます。

Google がリリースした OpenThread は、Thread のオープンソース実装です。小さいコードサイズとメモリ フットプリントにもかかわらず、OpenThread は Thread 仕様で定義されているすべての機能をサポートしています。

OpenThread ネットワーク シミュレータ(OTNS)を使用すると、シミュレートされた OpenThread ノードを POSX プラットフォームで実行して Thread ネットワークをシミュレートできます。OTNS は、シミュレートされた Thread ネットワークを可視化して操作するための、使いやすいウェブ インターフェース(OTNS-Web)を提供します。

Silk は完全に自動化されたテスト プラットフォームで、実際のデバイスで OpenThread の機能、機能、システム パフォーマンスを検証できます。

学習内容

  • OpenThread の機能検証フレームワーク: Silk
  • OTNS 機能が有効な実機用 OpenThread を構築する
  • OTNS ウェブ インターフェースを使用して、Silk テストケースの実行による Thread ネットワークのステータスをモニタリングする

この Codelab は、OTNS で Silk を使用する場合に重点を置いています。Silk と OTNS のその他の機能は対象外です。

必要なもの

ハードウェア:

  • Nordic Semiconductor nRF52840 開発ボード 6 枚
  • 6 つの USB - マイクロ USB ケーブルでボードを接続
  • USB ハブ

ソフトウェア:

  • Linux x86_64。
  • Git
  • Go 1.11 以降
  • ウェブブラウザ。OTNS-Web は、シミュレーションを表示するためにウェブブラウザを使用します。

前提条件:

2. 前提条件

以前の基本的な Codelab を完了する

パッケージの前提条件の確認

すべての前提条件が満たされていることを確認します。

  1. which otns を実行して、otns 実行可能ファイルが $PATH で検索可能かどうかを確認します。
  2. which wpantund を実行して、wpantund が使用可能であることを確認します。
  3. ARM GNU ツールチェーン、J-Link、nrfjprog パッケージがすべて使用可能であることを確認します。

注: 設定ガイダンスについては、リンク先のドキュメントをご覧ください。前提条件 1 は、OTNS を使用して Thread ネットワークをシミュレートするであり、その他の要件は nRF52840 ボードと OpenThread を使用して Thread ネットワークを構築するです。

3. シルクのセットアップ

Silk のクローンを作成して環境を設定するには、ソース ディレクトリで次のコマンドを実行します。

$ git clone https://github.com/openthread/silk.git
$ cd silk
$ ./bootstrap.sh
$ sudo make install-cluster

ハードウェア構成ファイルを定義する

マシンに接続された使用可能なテスト ハードウェア リソースを Silk が収集できるようにするには、次の形式の hwconfig.ini ファイルを定義します。

[DEFAULT]
ClusterID: 0
LayoutCenter: 300, 300
LayoutRadius: 100

[Dev-8A7D]
HwModel: Nrf52840
HwRev: 1.0
InterfaceSerialNumber: E1A5012E8A7D
USBInterfaceNumber: 1
DutSerial: 683536778

usbinfo というツールが Silk の一部としてインストールされ、インターフェース シリアル番号と USB インターフェース番号の確認に使用できます。DutSerial は、チップに印刷されているか、J-Link 製品の usbinfo によって表示されるシリアル番号です。

[DEFAULT] セクションの LayoutCenter フィールドと LayoutRadius フィールドは、ウェブ UI でデバイスを可視化する際のレイアウトの形状を定義します。最初に表示された値に設定することをおすすめします。

その後、テストデバイスごとにセクションを定義し、関連するハードウェア情報を提供します。

4. OTNS を有効にして OpenThread をコンパイルする

イメージのビルドとフラッシュ

デフォルトでは、OpenThread デバイスは OTNS 関連のメッセージを出力しません。開発ボードが OTNS 可視化に不可欠なログ インターフェースにステータス メッセージを出力できるようにするには、OpenThread ソース ディレクトリで次のコマンドを実行して FTD イメージをビルドし、16 進数形式に変換します。

$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive
$ cd ot-nrf528xx
$ ./script/bootstrap
$ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON
$ cd ./build/bin
$ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex

ボードをフラッシュするには、Thread ネットワークの構築 Codelab のステップ 4 の手順に沿って nrfjprog を使用します。その後、すべてのボードを nRF USB ポート経由でホストマシンに接続します。同じ USB - マイクロ USB ケーブルのセットを、J-Link ポートから取り外し、nRF52840 開発ボードの nRF USB ポートに接続できます。そのため、この 6 本のケーブルだけでテストを実行できます。面倒な作業を避けるために、12 本のケーブルを使用して両方のポートに接続します。

5. リアルモードでの OTNS サーバーの実行

デフォルトのパラメータで OTNS を実行すると、ユーザーは Thread ネットワークをシミュレートできます。実際の物理ネットワークの可視化ツールとして使用するには、次のコマンドを実行します。

otns -raw -real -ot-cli otns-silk-proxy

これらの引数は、ネットワークをシミュレートするために複数の ot-cli プロセスを実行する代わりに、Thread ネットワークを可視化する方法を記述する gRPC メッセージと UDP メッセージを OTNS に要求します。ビジュアリゼーションのページが空白の状態でブラウザで開きます。

4dd5b41bf7e71334.png

6. OTNS サポートによる Silk テストケースの実行

Silk は、OpenThread の機能、機能、システム パフォーマンスを実際のデバイスで検証するための、完全に自動化されたテスト プラットフォームです。使用方法については、プロジェクトの README の手順をご覧ください。

silk/unit_tests にある silk_run_test.py ファイルを参考にしましょう。Silk は、テストケースの実行時に OTNS サポートを提供します。OTNS のリアルモード サービスはすでにローカルで実行されているため、silk_run_test.py ファイルの出力場所、入力テスト スクリプト、hwconfig.ini ファイルの適切な場所でファイルを変更するだけで済みます。-s localhost 引数は、OTNS メッセージを localhost に送信するよう Silk に指示します。

たとえば、silk_run_test.py ファイルに次の変更を加えて、ot_test_form_network.py という名前のテストを実行できます。/opt/openthread_test/ は、Silk がログ出力と構成ファイルに使用するデフォルトのパスですが、任意のパスを使用できます。

silk_run_test.py

import datetime
import os

from silk.tests import silk_run

RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
                  datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'

os.chdir('~/src/silk/silk/tests/')

timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')

run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'

argv = [
    'tests/silk_run.py',
    '-v2',
    '-c', CONFIG_PATH + 'hwconfig.ini',
    '-d', run_log_path,
    '-s', 'localhost',
    'ot_test_form_network.py'
]

silk_run.SilkRunner(argv=argv)

形成されたネットワークのトポロジが OTNS ウェブ UI に表示されます。

ee443b66e0a6620b.png

左上隅に、可視化の統計情報、OT のバージョン、テストのタイトルが表示されます。左下隅、右側に表示されるログ ウィンドウのコントロールが表示されます。最初はノードが追加されますが、ネットワークは形成されません。テストが進むにつれて、各ノードのモードとロールが変化し、リンクが形成されます。

5c38e2c72519e620.png

7. 完了

これで、物理 Thread デバイス上で Silk テストを正常に実行し、OTNS を使用して可視化できました。

OTNS 対応のファームウェアでフラッシュされた開発ボードを使用して、Silk テストを実行しました。これらのボードは、Silk サーバーにステータスを報告します。Silk サーバーはそれらをすべてモニタリングして集計し、他のテスト情報とともに OTNS サービスに送信します。実際のモードで実行されている OTNS が、ウェブ インターフェース上で Thread ネットワークを可視化します。

次のステップ

Silk パッケージに含まれている他の OpenThread テストケースを実行してみてください。

関連情報

さまざまな OpenThread リソースについては、openthread.ioSilk をご覧ください。

リファレンス ドキュメント