1. はじめに
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 以降が必要です。
- https://golang.org/dl/ から Go をインストールします。
$(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
が正しくインストールされているかどうかを確認しましょう
which otns
を実行して、otns
実行可能ファイルが$PATH.
で検索可能かどうかを確認します。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
)が起動します。
OTNS-Web の空白ページしか表示されない場合は、ブラウザで WebGL が有効になっていない可能性があります。WebGL を有効にする方法については、https://superuser.com/a/836833 をご覧ください。
以降のセクションでは、OTNS-CLI
と OTNS-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
のさまざまな要素に注目してください。
6. ノードを追加
OTNS-CLI を使用してノードを追加する
位置(300、100)にルーターを追加します
> add router x 300 y 100 1 Done
OTNS-Web
に作成されたノードが表示されます。ノードは Router として開始し、数秒でリーダーになります。
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
にノードが表示されます。
OTNS-Web
までにノードを追加
OTNS-Web
を使用してノードを追加することもできます。Action Bar
の New Router
ボタンをクリックします。New Router
ボタンのすぐ上にノードが作成されます。ノードを、OTNS-CLI
で作成したリーダーの近くにドラッグします。最終的に、すべてのノードが 1 つのパーティションにマージされます。
また、アクションバーにある FED、MED、SED のボタンをクリックすると、他の種類のノードが作成されます。既存のノードの近くの位置までドラッグして、その Thread ネットワークに接続します。
これで、多くのノードを含む 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
の速度調整ボタンは にあります。ボタンには、現在のシミュレーション速度が表示され、シミュレーション速度の調整とシミュレーションの一時停止と再開に使用できます。
シミュレーションを高速化する
速度を MAX
()になるまで ボタンをクリックしてシミュレーションをスピードアップできます。
シミュレーションの速度を低下させる
シミュレーションの速度を遅くするには、[] ボタンをクリックします。
シミュレーションの一時停止
ボタンをクリックすると、実行中のシミュレーションを一時停止できます。ボタンが に変わります。
シミュレーションを再開
ボタンをクリックすると、シミュレーションが一時停止したときに再開されます。ボタンが に戻ります。
シミュレーションの速度を 10X
に設定
時間を節約するために、
OTNS-CLI
: シミュレーションの速度を
10X
。これにより、ネットワーク内のトポロジの変化をより迅速に監視できます。
> speed 10 Done
8. ラジオのオン/オフ
シミュレーションには 2 つのルーター(六角形)と多くの子が含まれ、10 倍の速度で実行されます。
2 つの Router の現在のリーダー(赤い枠線)を見つけ、ワンクリックで選択します。
無線通信をOFF
アクションバーの [] ボタンをクリックして、リーダーノードのラジオボタンをオフにします。
無線を OFF にすると、リーダーはメッセージを送受信できなくなります。
他の Router が新しいリーダーになるまで 12 秒(シミュレーション時間: 120 秒)ほど待ちます。
Thread ネットワークは、新しいリーダーを持つ新しいパーティションを形成することにより、リーダーの障害から自動的に回復します。新しいパーティションは、新しいパーティションの色になります。
無線通信をON
無線通信がオフになっているリーダーを選択します。Action Bar
の ボタンをクリックして、無線接続を復元します。
無線接続が回復したら、リーダーがネットワークに再接続されます。
9. ノードを移動する
OTNS を使用すると、ユーザーは OTNS-CLI
または OTNS-Web
を使用してノードを簡単に移動できます。
OTNS-CLI
を通じてノードを移動
ノード 5 を新しい場所に移動します。
> move 5 600 300 Done
これで、ノード 5 は他の Router から遠く離れているため、互いに接続できなくなる可能性があります。約 12 秒(シミュレーション時間では 120 秒)すると、どちらも独自のパーティションのリーダーになります。
OTNS-Web を介してノードを移動
ドラッグして、ノード 5 を元の場所に移動します。2 つのパーティションが 1 つのパーティションにマージされます。
10. ノードを削除する
OTNS-CLI
を使用してノードを削除する
ノード 8 を削除します。
> del 8 Done
ノード 8 がシミュレーションから消えます。
OTNS-Web
を使用してノードを削除する
ノード 5 を選択して、Action Bar
の ボタンをクリックして、ノード 5 を削除します。
Node 1
が Leader になり、Node 7
は Router にアクセスできないため接続を解除する必要があります。
シミュレーションをクリア(すべてのノードを削除)
シミュレーションをクリアするには、OTNS-Web
を使用してすべてのノードを削除します。
[Action Bar.
] の ボタンをクリックすると、すべてのノードが一度に消えます。
続行する前に...
このチュートリアルを続行できるように、ご自身でノードをシミュレーションに追加してください。
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-CLI
と OTNS-Web
の両方を通じて、さまざまな方法でシミュレーションを操作する方法について学習しました。
これで、OTNS の概要と、OTNS を使用して OpenThread ネットワークをシミュレートする方法を学習しました。
次のステップ
以下の Codelab をご覧ください。
- OpenThread による Thread ネットワークのシミュレート
- Docker で OpenThread を使用して Thread ネットワークをシミュレートする
- nRF52840 ボードと OpenThread を使用して Thread ネットワークを構築する