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

スレッド ネットワークを可視化してテストする

1. はじめに

5abd22afa2f2ee9a.png

Thread、OpenThread、OTNS、Silk とは

スレッドは IP ベースの低電力ワイヤレス メッシュ ネットワーク プロトコルであり、デバイス間やデバイス間の通信を安全に行うことができます。スレッド ネットワークは、トポロジの変更に適応して、単一障害点を回避できます。

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

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

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

学習内容

  • OpenThread の機能検証フレームワーク: Silk
  • OTNS 機能を有効にして実際のデバイス用に OpenThread をビルドする
  • OTNS-Web インターフェースを使用して、Silk テストケースを実行して生成された Thread ネットワークのステータスをモニタリングします

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

必要なもの

ハードウェア:

  • 6 Nordic Semiconductor nRF52840 Dev ボード
  • ボードを接続するための USB - マイクロ USB ケーブル x 6
  • USB ハブ

ソフトウェア:

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

事前準備

2. 前提条件

以前の基本的な Codelab を完了

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

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

  1. which otns を実行して、$PATHotns 実行可能ファイルが検索可能かどうかを確認します。
  2. which wpantund を実行して、wpantund が使用可能であることを確認します。
  3. ARM GNU ツールチェーン、J-Link、nrfjprog パッケージがすべて利用可能であることを確認します。
  4. openthread フォルダの下にある make -f examples/Makefile-nrf52840 を実行して、OpenThread バイナリを作成できることを確認します。

注: 設定ガイドについては、リンク先のドキュメントをご覧ください。前提条件 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

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

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

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

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

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

デフォルトでは、OpenThread デバイスは OTNS 関連のメッセージを出力しません。DevBoard で 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 を実行すると、スレッド ネットワークをシミュレートできます。実際の物理ネットワークの可視化ツールとして使用するには、次のコマンドを実行します。

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 引数は、localhost に OTNS メッセージを送信するように 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 デバイスでシルクのテストを実行し、OTNS を使用して可視化できました。

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

次のステップ

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

関連情報

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

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