1. はじめに
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 を完了する
- Thread Primer。この Codelab で学習する内容を理解するには、Thread の基本コンセプトを理解しておく必要があります。
- nRF52840 ボードと OpenThread で Thread ネットワークを構築する。この Codelab では、Thread ネットワークが正常に構築されていることを前提としています。
- OTNS を使用してスレッド ネットワークをシミュレートする。この Codelab は、OTNS ツールが正常に実行されていることを前提としています。
パッケージの前提条件の確認
すべての前提条件を満たしているか確認しましょう
which otns
を実行して、otns
実行可能ファイルが$PATH
で検索可能かどうかを確認します。which wpantund
を実行して、wpantund
が使用可能であることを確認します。- 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 に想定されます。ブラウザで、空のキャンバスのビジュアリゼーション ページが自動的に開きます。
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 に表示されます。
左上隅には、可視化の統計情報、OT バージョン、テストタイトルが表示されます。左下には、右側に表示されているログウィンドウのコントロールがあります。最初にノードが追加されますが、ネットワークは形成されません。テストが進むにつれて、各ノードのモードと役割が変化し、リンクが形成されます。
7. 完了
これで、Thread の物理デバイスで Silk テストを正常に実行し、OTNS を使用して可視化することができました。
OTNS をサポートするファームウェアがフラッシュされた開発ボードを使用して、Silk テストを実行しました。ボードは、Silk サーバーにステータスを報告します。Silk サーバーはすべてのサーバーをモニタリングして集約し、他のテスト情報とともに OTNS サービスに送信します。リアルタイム・モードで動作している OTNS は、Thread ネットワークをウェブ・インターフェースで可視化します。
次のステップ
Silk パッケージに含まれる他の OpenThread テストケースを実行してみてください。
関連情報
さまざまな OpenThread リソースについては、openthread.io と Silk をご覧ください。