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

1. はじめに

5abd22afa2f2ee9a.png

Thread、OpenThread、OTNS、Silk とは

Thread は IP ベースの低消費電力ワイヤレス メッシュ ネットワーク プロトコルであり、デバイス間およびデバイス間のセキュアな通信を可能にします。スレッド ネットワークは、トポロジの変更に適応して単一障害点を回避できます。

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

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

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

学習内容

  • OpenThread の機能検証フレームワーク: Silk
  • OTNS 機能を有効にして実際のデバイス用に OpenThread をビルドする
  • OTNS ウェブ インターフェースを使用して、Silk テストケースの実行によって形成された Thread ネットワークのステータスを監視する

この Codelab では、OTNS での Silk の使用に焦点を当てます。Silk と OTNS のその他の機能は対象外です。

必要なもの

ハードウェア:

  • Nordic Semiconductor nRF52840 開発ボード x 6
  • ボードを接続するための USB - マイクロ USB ケーブル x 6
  • 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 を使用したスレッド ネットワークのシミュレーションによるものと、nRF52840 ボードと OpenThread を使用した Thread ネットワークの構築によるものです。

3. Silk の設定

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

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

[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 リアルモード サービスはすでにローカルで実行されているため、出力ログファイル、入力テスト スクリプト、hwconfig.ini ファイルなどの場所に silk_run_test.py ファイルを変更するだけで済みます。-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 をご覧ください。

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