1. はじめに
Thread とはOTNS
Thread は IP ベースの低消費電力ワイヤレス メッシュ ネットワーク プロトコルであり、デバイス間およびデバイス間のセキュアな通信を可能にします。スレッド ネットワークは、トポロジの変更に適応して単一障害点を回避できます。
Google がリリースした OpenThread は、Thread のオープンソース実装です。OpenThread は、コードサイズとメモリ使用量が小さいにもかかわらず、スレッド仕様で定義されているすべての機能をサポートしています。
OpenThread Network Simulator(OTNS)を使用すると、シミュレートされた OpenThread ノードを posix プラットフォームで実行し、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
のパスワードの入力を求められる場合があります。
otns のインストール
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 ウェブ
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 台のルーターの現在のリーダー(赤い枠線)を 1 回クリックして選択します。
無線通信をOFF
アクションバーの ボタンをクリックして、リーダーノードのラジオボタンをオフにします。
ラジオがオフの場合、リーダーはメッセージを送受信できません。
もう一方のルーターが新しいリーダーになるまで 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
Node 8 がシミュレーションに表示されなくなります。
OTNS-Web
でノードを削除する
ノード 5 を選択し、Action Bar
の ボタンをクリックしてノード 5 を削除します。
Node 1
がリーダーになり、Node 7
はどのルーターにも接続できないため、切断する必要があります。
シミュレーションをクリア(すべてのノードを削除)
シミュレーションをクリアするには、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 ネットワークを構築する