OTNS を使用してスレッド ネットワークをシミュレートする

1. はじめに

5abd22afa2f2ee9a.png

Thread と OTNS とは

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

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

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

学習内容

  • OTNS とその依存関係をインストールする
  • OTNS 向けの OpenThread の構築
  • OTNS-Web でノードを追加、移動、削除する方法
  • OTNS-Web のその他の便利な機能を使用してネットワーク シミュレーションを実行する
  • OpenThread の単一障害点を検証する

この Codelab は、OTNS-CLI と OTNS-Web に焦点を当てています。Python スクリプト記述など、OTNS のその他の機能は対象外です。

必要なもの

  • Linux x86_64 または Mac OS
  • Git
  • Go 1.13 以降
  • ウェブブラウザ。OTNS-Web は、シミュレーションを表示するためにウェブブラウザを使用します。
  • Thread Primer。この Codelab で学習する内容を理解するには、Thread の基本コンセプトを理解する必要があります。

2. インストール

Go をインストールする

OTNS をビルドするには、Go 1.13 以降が必要です。

  1. https://golang.org/dl/ から Go をインストールします。
  2. $(go env GOPATH)/bin(通常は $HOME/go/bin)を $PATH に追加します。
$ export PATH=$PATH:$(go env GOPATH)/bin

OTNS コードを取得

$ git clone https://github.com/openthread/ot-ns.git ./otns
$ cd otns

依存関係のインストール

$ ./script/install-deps
grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy

sudo のパスワードを入力するよう求められる場合があります。

インストール OTN

otns$GOPATH/bin にインストールします。

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

otns が正しくインストールされているかどうかを確認しましょう

  1. which otns を実行して、otns 実行可能ファイルが $PATH. で検索可能かどうかを確認します。
  2. otns コマンドが見つからない場合は、$(go env GOPATH)/bin$PATH. に追加されていることを確認します。

3. OTNS 用に OpenThread を作成する

GitHub から OpenThread コードを取得

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/openthread

OTNS=1 を使用して OpenThread を構築する

$ cd ~/src/openthread
$ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

OpenThread 実行可能ファイルは build ディレクトリにあります。

$ ls ~/src/openthread/build/simulation/examples/apps/cli/
ot-cli-ftd        ot-cli-mtd        ot-cli-radio

OTNS を実行します。

4. OTNS の実行

otns を実行します。

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

正常に起動すると、OTNS が CLI コンソール(OTNS-CLI)に入り、ネットワーク可視化と管理用のウェブブラウザ(OTNS-Web)が起動します。

a0e05178d66929b1.png

OTNS-Web の空白ページしか表示されない場合は、ブラウザで WebGL が有効になっていない可能性があります。WebGL を有効にする方法については、https://superuser.com/a/836833 をご覧ください。

以降のセクションでは、OTNS-CLIOTNS-Web を使用して OTNS シミュレーションを管理する方法について説明します。

5. OTNS-CLI と OTNS-Web を理解する

OTNS CLI

OTNS-CLI には、OTNS シミュレーションを管理するためのコマンドライン インターフェース(CLI)があります。

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

OTNS-CLI を使用してコマンドを入力できます。コマンドの完全なリストについては、OTNS CLI リファレンスをご覧ください。この Codelab では、これらのコマンドの一部のみを使用するので、ご安心ください。

OTNS - ウェブ

OTNS-Web は、OTNS のネットワーク可視化および管理ツールです。シミュレーションにより、シミュレートされた Thread ネットワークのノード、メッセージ、リンクを視覚的に確認できます。OTNS-Web のさまざまな要素に注目してください。

4c5b43509a2ca0d0.png

6. ノードを追加

OTNS-CLI を使用してノードを追加する

位置(300、100)にルーターを追加します

> add router x 300 y 100
1
Done

OTNS-Web に作成されたノードが表示されます。ノードは Router として開始し、数秒でリーダーになります。

6ca8c2e63ed9818d.png

OTNS-CLI を使用してノードを追加します

> add fed x 200 y 100
2
Done
> add med x 400 y 100
3
Done
> add sed x 300 y 200
4
Done

ノードが 1 つのパーティションにマージされるまで数秒待ちます。OTNS-WEB にノードが表示されます。

3ee67903c01aa612.png

OTNS-Webまでにノードを追加

OTNS-Web を使用してノードを追加することもできます。Action BarNew Router ボタンをクリックします。New Router ボタンのすぐ上にノードが作成されます。ノードを、OTNS-CLI で作成したリーダーの近くにドラッグします。最終的に、すべてのノードが 1 つのパーティションにマージされます。

420258bb92561146.png

また、アクションバーにある FED、MED、SED のボタンをクリックすると、他の種類のノードが作成されます。既存のノードの近くの位置までドラッグして、その Thread ネットワークに接続します。

fe15d6f9726a099e.png

これで、多くのノードを含む 1 つのパーティションの Thread ネットワークが作成されました。次のセクションでは、シミュレーションの速度を上げてシミュレーションの実行速度を上げます。

7. 速度を調整

現在、シミュレーションは 1X の速度で実行されるはずです。つまり、ここまでの経過時間をシミュレートするシミュレーションは、最初のノードを作成してからの実際の時間と同じです。

OTNS-CLI で速度を調整する

シミュレーション速度は OTNS-CLI で調整できます。

シミュレーションの速度を 100X に設定

> speed 100
Done

ノードによるメッセージ送信の頻度が以前より高くなったはずです。

シミュレーションの速度を MAX に設定

> speed max
Done

OTNS が可能な限り高速にシミュレートしようとしているため、ノードが大量のメッセージを送信しているはずです。

シミュレーションの一時停止

> speed 0
Done

シミュレーション速度を 0 に設定すると、シミュレーションが一時停止します。

通常の速度でシミュレーションを復元

> speed 1
Done

シミュレーション速度を 0 より大きい値に設定すると、シミュレーションが再開されます。

OTNS-Web で速度を調整する

速度コントロール ボタン

Action Bar の速度調整ボタンは 9329157c1bd12672.png にあります。ボタンには、現在のシミュレーション速度が表示され、シミュレーション速度の調整とシミュレーションの一時停止と再開に使用できます。

シミュレーションを高速化する

速度を MAXf5f460b2586d299b.png)になるまで 39b88331779277ad.png ボタンをクリックしてシミュレーションをスピードアップできます。

シミュレーションの速度を低下させる

シミュレーションの速度を遅くするには、[31cca8d5b52fa900.png] ボタンをクリックします。

シミュレーションの一時停止

46cc2088c9aa7ab6.png ボタンをクリックすると、実行中のシミュレーションを一時停止できます。ボタンが ce25eda3496ffcd4.png に変わります。

シミュレーションを再開

ce25eda3496ffcd4.png ボタンをクリックすると、シミュレーションが一時停止したときに再開されます。ボタンが 46cc2088c9aa7ab6.png に戻ります。

シミュレーションの速度を 10X に設定

時間を節約するために、

OTNS-CLI: シミュレーションの速度を

10X。これにより、ネットワーク内のトポロジの変化をより迅速に監視できます。

> speed 10
Done

8. ラジオのオン/オフ

シミュレーションには 2 つのルーター(六角形)と多くの子が含まれ、10 倍の速度で実行されます。

2 つの Router の現在のリーダー(赤い枠線)を見つけ、ワンクリックで選択します。

8c6a2e191cdae0c7.png

無線通信をOFF

アクションバーの [7ca085f470491dd4.png] ボタンをクリックして、リーダーノードのラジオボタンをオフにします。

a3bf58d9d125f95f.png

無線を OFF にすると、リーダーはメッセージを送受信できなくなります。

他の Router が新しいリーダーになるまで 12 秒(シミュレーション時間: 120 秒)ほど待ちます。

e3d32f85c4a1b990.png

Thread ネットワークは、新しいリーダーを持つ新しいパーティションを形成することにより、リーダーの障害から自動的に回復します。新しいパーティションは、新しいパーティションの色になります。

無線通信をON

無線通信がオフになっているリーダーを選択します。Action Bar2d9cecb8612b42aa.png ボタンをクリックして、無線接続を復元します。

7370a7841861aa3a.png

無線接続が回復したら、リーダーがネットワークに再接続されます。

9. ノードを移動する

OTNS を使用すると、ユーザーは OTNS-CLI または OTNS-Web を使用してノードを簡単に移動できます。

OTNS-CLI を通じてノードを移動

ノード 5 を新しい場所に移動します。

> move 5 600 300
Done

これで、ノード 5 は他の Router から遠く離れているため、互いに接続できなくなる可能性があります。約 12 秒(シミュレーション時間では 120 秒)すると、どちらも独自のパーティションのリーダーになります。

c06b4d0a4f183299.png

OTNS-Web を介してノードを移動

ドラッグして、ノード 5 を元の場所に移動します。2 つのパーティションが 1 つのパーティションにマージされます。

9ba305c4c5a5f892.png

10. ノードを削除する

OTNS-CLI を使用してノードを削除する

ノード 8 を削除します。

> del 8
Done

ノード 8 がシミュレーションから消えます。

18156770d9f8bf83.png

OTNS-Web を使用してノードを削除する

ノード 5 を選択して、Action Bar7ff6afd565f4eafc.png ボタンをクリックして、ノード 5 を削除します。

d4079cceea0105f0.png

Node 1 が Leader になり、Node 7 は Router にアクセスできないため接続を解除する必要があります。

シミュレーションをクリア(すべてのノードを削除)

シミュレーションをクリアするには、OTNS-Web を使用してすべてのノードを削除します。

[Action Bar.] の 89618191721e79a0.png ボタンをクリックすると、すべてのノードが一度に消えます。

続行する前に...

このチュートリアルを続行できるように、ご自身でノードをシミュレーションに追加してください。

11. OTNS-CLI ノード コンテキスト

OTNS-CLI には、デベロッパーがノードのステータスを診断できるようにノードと簡単にやり取りできるノード コンテキスト モードが用意されています。

ノードのコンテキスト モードに入る

ノード 1 のノード コンテキストを入力します。

> node 1
Done
node 1>

CLI プロンプトが node 1> に変更されました。これは、現在のノード コンテキストを示します。OpenThread CLI コマンドを入力すると、ノードを直接操作しているかのように、ノード上で実行できます。

ノード コンテキストでコマンドを実行する

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
OpenThread
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:d800
fdde:ad00:beef:0:2175:8a67:1000:6352
fe80:0:0:0:2075:82c2:e9e9:781d
Done

別のノードのコンテキストに切り替える

node 1> node 2
Done
node 2> 

終了ノードのコンテキスト

node 1> exit
Done
>

12. 完了

これで、最初の OTNS シミュレーションは正常に実行されました。

OTNS とその依存関係をインストールする方法を学習しました。OTNS 用の OpenThread を作成し、OpenThread シミュレーション インスタンスを使用して OTNS シミュレーションを開始しました。OTNS-CLIOTNS-Web の両方を通じて、さまざまな方法でシミュレーションを操作する方法について学習しました。

これで、OTNS の概要と、OTNS を使用して OpenThread ネットワークをシミュレートする方法を学習しました。

次のステップ

以下の Codelab をご覧ください。

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