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

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

26b7f4f6b3ea0700.png

OpenThread Googleがリリースさはのオープンソース実装であるスレッドネットワーキングプロトコル。 Google NestはOpenThreadをリリースし、Nest製品で使用されているテクノロジーを開発者が広く利用できるようにして、コネクテッドホーム向けの製品の開発を加速しています。

スレッド仕様はホームアプリケーションのための信頼性の高い、安全なIPv6ベースと低電力無線デバイス・ツー・デバイス通信プロトコルを定義します。 OpenThreadは、IPv6、6LoWPAN、MACセキュリティを備えたIEEE 802.15.4、メッシュリンク確立、メッシュルーティングを含むすべてのスレッドネットワーク層を実装します。

このCodelabでは、Dockerを使用してエミュレートされたデバイスでスレッドネットワークをシミュレートする方法について説明します。

あなたが学ぶこと

  • OpenThreadビルドツールチェーンを設定する方法
  • スレッドネットワークをシミュレートする方法
  • スレッドノードを認証する方法
  • OpenThreadデーモンを使用してスレッドネットワークを管理する方法

必要なもの

  • Docker
  • Linux、ネットワークルーティングの基本的な知識

このCodelabは、Linux、Mac OS X、またはWindowsマシンでDockerを使用するように設計されています。 Linuxが推奨される環境です。

Dockerをインストールする

選択したOSにDockerをインストールします。

Dockerをダウンロードする

Dockerイメージをプルします

ドッカーがインストールされたら、ターミナルウィンドウを開き、プルopenthread/codelab_otsimドッカー画像を表示します。この画像は、OpenThreadおよびOpenThreadデーモンが事前に構築されており、このCodelabですぐに使用できることを示しています。

$ docker pull openthread/codelab_otsim:latest

完全にダウンロードするには数分かかる場合がありますのでご注意ください。

ターミナルウィンドウで、画像からドッカー容器を開始し、そのへの接続bashシェル:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

このCodelabに必要なフラグに注意してください。

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 -これは、容器内のIPv6を有効に
  • --cap-add=net_admin -そのようなIPルートを追加するように、あなたは、ネットワーク関連の操作を実行することができNET_ADMIN能力を可能に

コンテナに入ると、次のようなプロンプトが表示されます。

root@c0f3912a74ff:/#

上記の例では、 c0f3912a74ffコンテナIDです。 DockerコンテナのインスタンスのコンテナIDは、このCodelabのプロンプトに表示されるものとは異なります。

Dockerの使用

このCodelabは、Dockerの使用の基本を理解していることを前提としています。 Codelab全体を通してDockerコンテナにとどまる必要があります。

このCodelabに使用するサンプルアプリケーションは、基本的なコマンドラインインターフェイス(CLI)を介してOpenThread構成および管理インターフェイスを公開する最小限のOpenThreadアプリケーションを示しています。

この演習では、あるエミュレートされたスレッドデバイスを別のエミュレートされたスレッドデバイスからpingするために必要な最小限の手順を実行します。

次の図は、基本的なスレッドネットワークトポロジを示しています。この演習では、緑色の円内の2つのノード(スレッドリーダーとスレッドルーター)をエミュレートし、それらの間に単一の接続を配置します。

6e3aa07675f902dc.png

ネットワークを作成する

1.ノード1を開始します

あなたは、ターミナルウィンドウで、まだ行っていない場合は、ドッカーコンテナ起動し、その接続にbashシェル:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

ドッカー容器内へ移動openthreadディレクトリと使用してエミュレートスレッドデバイスのCLIプロセススポーンot-cli-ftdバイナリ。

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1

このバイナリは、POSIX上でエミュレートされたOpenThreadデバイスを実装します。 IEEE 802.15.4無線ドライバはUDPの上に実装されています(IEEE 802.15.4フレームはUDPペイロード内で渡されます)。

引数1エミュレートされたデバイスのための「工場出荷時に割り当てられた」IEEE EUI-64の最下位ビットを表すファイル記述子です。この値は、IEEE 802.15.4無線エミュレーション用のUDPポート(ポート= 9000 +ファイル記述子)にバインドするときにも使用されます。このCodelabのエミュレートされたスレッドデバイスの各インスタンスは、異なるファイル記述子を使用します。

注:の使用のみのファイルディスクリプタ1以上のエミュレートデバイスのためのプロセスを生成するとき、このコードラボで述べたように。ファイルディスクリプタ0 、他の使用のために予約されています。

表示されない場合

>

このコマンドの実行後にプロンプ​​トが表示されたら、を押します

enter

新しいオペレーショナルデータセットを作成し、アクティブなデータセットとしてコミットします。オペレーショナルデータセットは、作成するスレッドネットワークの構成です。

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 20
Channel Mask: 07fff800
Ext PAN ID: d6263b6d857647da
Mesh Local Prefix: fd61:2344:9a52:ede0/64
Network Key: e4344ca17d1dca2a33f064992f31f786
Network Name: OpenThread-c169
PAN ID: 0xc169
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

このデータセットをアクティブなデータセットとしてコミットします。

> dataset commit active
Done

IPv6インターフェースを起動します。

> ifconfig up
Done

スレッドプロトコル操作を開始します。

> thread start
Done

数秒待って、デバイスがスレッドリーダーになったことを確認します。リーダーは、ルーターIDの割り当ての管理を担当するデバイスです。

> state
leader
Done

ノード1のスレッドインターフェイスに割り当てられたIPv6アドレスを表示します(出力は異なります)。

> ipaddr
fd61:2344:9a52:ede0:0:ff:fe00:fc00
fd61:2344:9a52:ede0:0:ff:fe00:5000
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
fe80:0:0:0:94da:92ea:1353:4f3b
Done

特定のIPv6アドレスタイプに注意してください。

  • 始まるfd =メッシュ、ローカル
  • 始まるfe80 =リンクローカル

メッシュローカルアドレスタイプはさらに分類されます。

  • 含まれていff:fe00 =ルータのロケータ(RLOC)
  • 含まれていないff:fe00 =エンドポイント識別子(EID)

コンソール出力でEIDを特定し、後で使用できるようにメモしておきます。上記のサンプル出力では、EIDは次のとおりです。

fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6

2.ノード2を開始します

新しいターミナルを開いて、実行しbashノード2に使用する、現在実行中のドッカーコンテナにシェルを。

$ docker exec -it codelab_otsim_ctnr bash

この新しいでbashのプロンプトで、ナビゲートopenthreadディレクトリおよびCLIプロセスを生成。これは、2番目にエミュレートされたスレッドデバイスです。

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

表示されない場合

>

このコマンドの実行後にプロンプ​​トが表示されたら、を押します

enter

ノード1の運用データセットと同じ値を使用して、スレッドネットワークキーとPANIDを構成します。

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

このデータセットをアクティブなデータセットとしてコミットします。

> dataset commit active
Done

IPv6インターフェースを起動します。

> ifconfig up
Done

スレッドプロトコル操作を開始します。

> thread start
Done

デバイスはそれ自体を子として初期化します。スレッドの子は、親デバイスでのみユニキャストトラフィックを送受信するスレッドデバイスであるエンドデバイスと同等です。

> state
child
Done

2分以内に、あなたはから状態スイッチが表示されるはずchildrouter 。スレッドルーターは、スレッドデバイス間でトラフィックをルーティングできます。親とも呼ばれます。

> state
router
Done

ネットワークを確認する

メッシュネットワークを確認する簡単な方法は、ルーターテーブルを確認することです。

1.接続を確認します

ノード2で、RLOC16を取得します。 RLOC16は、デバイスのRLOCIPv6アドレスの最後の16ビットです。

> rloc16
5800
Done

ノード1で、ルーターテーブルでノード2のRLOC16を確認します。ノード2が最初にルーター状態に切り替わったことを確認してください。

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In  | LQ Out  | Age | Extended MAC   |
+----+--------+----------+-----------+--------+-------+---+--------------------+
| 20 | 0x5000 |       63 |         0 |      0 |     0 |   0 | 96da92ea13534f3b |
| 22 | 0x5800 |       63 |         0 |      3 |     3 |  23 | 5a4eb647eb6bc66c |

ノード2のRLOC 0x5800それがメッシュに接続されていることを確認し、テーブル内に発見されました。

2.ノード2からノード1にpingを実行します

2つのエミュレートされたスレッドデバイス間の接続を確認します。ノード2においては、 pingノード1に割り当てられたEIDを:

> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
> 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1 hlim=64 time=12ms

押して、 enterに戻ります> CLIプロンプト。

ネットワークをテストする

2つのエミュレートされたスレッドデバイス間で正常にpingできるようになったので、1つのノードをオフラインにしてメッシュネットワークをテストします。

ノード1に戻り、スレッドを停止します。

> thread stop
Done

ノード2に切り替えて、状態を確認します。リーダー(ノード1)がオフラインになっている、とあなたがするノード2の移行を参照してくださいする必要があること、2分以内に、ノード2は、検出leaderネットワークの:

> state
router
Done
...
> state
leader
Done

一度ドッカーに戻って終了する前に、停止スレッドと工場出荷時設定へのリセットノード2を確認したbashプロンプトを。この演習で使用したスレッドネットワークの資格情報が次の演習に持ち越されないように、工場出荷時のリセットが行われます。

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

あなたは押す必要があるかもしれませんenter持って来るために数回>の後にプロンプトバックをfactoryresetコマンド。 Dockerコンテナを終了しないでください。

また、工場出荷時にリセットしてノード1を終了します。

> factoryreset
>
> exit
root@c0f3912a74ff:/#

参照してくださいOpenThread CLIリファレンスを使用可能なすべてのCLIコマンドを探索します。

前の演習では、2つのシミュレートされたデバイスと検証済みの接続を使用してスレッドネットワークを設定しました。ただし、これにより、認証されていないIPv6リンクローカルトラフィックのみがデバイス間を通過できます。それらの間(およびスレッド境界ルーターを介したインターネット)でグローバルIPv6トラフィックをルーティングするには、ノードを認証する必要があります。

認証するには、1つのデバイスがコミッショナーとして機能する必要があります。コミッショナーは、新しいスレッドデバイス用に現在選出されている認証サーバーであり、デバイスがネットワークに参加するために必要なネットワーク資格情報を提供するための承認者です。

この演習では、以前と同じ2ノードトポロジを使用します。認証の場合、スレッドリーダーはコミッショナーとして機能し、スレッドルーターはジョイナーとして機能します。

d6a67e8a0d0b5dcb.png

Docker

残りの演習の各ノード(ターミナルウィンドウ)について、OpenThreadビルドでDockerコンテナーを実行していることを確認してください。前の演習から継続した場合、あなたはまだ2つの持っている必要がありbash既に開いて同じドッカーコンテナ内のプロンプトを。ない場合は、ドッカートラブルシューティングの手順を参照してください、または単にシミュレートスレッドのネットワーク運動をやり直します。

1.ネットワークを作成します

ノード1で、CLIプロセスを生成します。

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1

表示されない場合

>

このコマンドの実行後にプロンプ​​トが表示されたら、を押します

enter

新しいオペレーショナルデータセットを作成し、アクティブなデータセットとしてコミットして、スレッドを開始します。

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 12
Channel Mask: 07fff800
Ext PAN ID: e68d05794bf13052
Mesh Local Prefix: fd7d:ddf7:877b:8756/64
Network Key: a77fe1d03b0e8028a4e13213de38080e
Network Name: OpenThread-8f37
PAN ID: 0x8f37
PSKc: f9debbc1532487984b17f92cd55b21fc
Security Policy: 0, onrcb
Done

このデータセットをアクティブなデータセットとしてコミットします。

> dataset commit active
Done

IPv6インターフェースを起動します。

> ifconfig up
Done

スレッドプロトコル操作を開始します。

> thread start
Done

数秒待って、デバイスがスレッドリーダーになったことを確認します。

> state
leader
Done

2.コミッショナーの役割を開始します

まだノード1にいる間に、コミッショナーの役割を開始します。

> commissioner start
Done

(使用して、任意のジョイナーを許可する*持つワイルドカード) J01NMEネットワーク上に委員会へのジョイナー資格を。ジョイナーは、人間の管理者によって委託されたスレッドネットワークに追加されるデバイスです。

> commissioner joiner add * J01NME
Done

3.ジョイナーロールを開始します

2番目のターミナルウィンドウのDockerコンテナで、新しいCLIプロセスを生成します。これはノード2です。

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

ノード2で、使用してジョイナーの役割を有効にJ01NMEジョイナー資格を。

> ifconfig up
Done
> joiner start J01NME
Done

...確認のために数秒待ちます..。

Join success

ジョイナーとして、デバイス(ノード2)はコミッショナー(ノード1)で正常に認証され、スレッドネットワークの資格情報を受け取りました。

ノード2が認証されたので、スレッドを開始します。

> thread start
Done

4.ネットワーク認証を検証します

チェックstate 、それが今のネットワークに参加したことを検証するために、ノード2に。 2分以内に、ノード2は、トランジションchildへのrouter

> state
child
Done
...
> state
router
Done

5.構成をリセットします

次の演習の準備として、構成をリセットします。各ノードで、スレッドを停止し、工場出荷時のリセットを実行して、エミュレートされたスレッドデバイスを終了します。

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

あなたは押す必要があるかもしれませんenter持って来るために数回>の後にプロンプトバックをfactoryresetコマンド。

この演習では、1つのCLIインスタンス(単一の組み込みSoCスレッドデバイス)と1つのRadio Co-Processor(RCP)インスタンスをシミュレートします。

ot-daemon OpenThreadコアはサービスとして実行することができるように、入力および出力として、UNIXソケットを使用OpenThreadのPosixアプリケーションのモードです。クライアントは、プロトコルとしてOpenThread CLIを使用してソケットに接続することにより、このサービスと通信できます。

ot-ctlが提供するCLIでot-daemon RCPを管理および構成します。これを使用して、RCPをスレッドデバイスによって作成されたネットワークに接続します。

Docker

この演習の各ノード(ターミナルウィンドウ)について、OpenThreadビルドでDockerコンテナーを実行していることを確認してください。前の演習から続く場合は、2つの持っている必要がありbash既に開いて同じドッカーコンテナ内のプロンプトを。ない場合は、ドッカートラブルシューティングの手順を参照してください。

ot-daemonを使用する

この演習では、以下に対応する3つのターミナルウィンドウを使用します。

  1. シミュレートされたスレッドデバイスのCLIインスタンス(ノード1)
  2. ot-daemonプロセス
  3. ot-ctl CLIインスタンス

1.ノード1を開始します

最初のターミナルウィンドウで、エミュレートされたスレッドデバイスのCLIプロセスを生成します。

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1

表示されない場合

>

このコマンドの実行後にプロンプ​​トが表示されたら、を押します

enter

新しいオペレーショナルデータセットを作成し、アクティブなデータセットとしてコミットして、スレッドを開始します。

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: 97d584bcd493b824
Mesh Local Prefix: fd55:cf34:dea5:7994/64
Network Key: ba6e886c7af50598df1115fa07658a83
Network Name: OpenThread-34e4
PAN ID: 0x34e4
PSKc: 38d6fd32c866927a4dfcc06d79ae1192
Security Policy: 0, onrcb
Done

このデータセットをアクティブなデータセットとしてコミットします。

> dataset commit active
Done

IPv6インターフェースを起動します。

> ifconfig up
Done

スレッドプロトコル操作を開始します。

> thread start
Done

ノード1のスレッドインターフェースに割り当てられたIPv6アドレスを表示します。

> ipaddr
fd55:cf34:dea5:7994:0:ff:fe00:fc00
fd55:cf34:dea5:7994:0:ff:fe00:d000
fd55:cf34:dea5:7994:460:872c:e807:c4ab
fe80:0:0:0:9cd8:aab6:482f:4cdc
Done
>

シミュレーションスレッドネットワーク工程を説明したように、一つのアドレスがリンクローカルである( fe80 )と3つのメッシュローカル(あるfd )。 EIDは含まれていませんメッシュローカルアドレスであるff:fe00アドレスでを。この出力例では、EIDは、 fd55:cf34:dea5:7994:460:872c:e807:c4ab

あなたからの特定のEIDを特定ipaddrノードとの通信に使用される出力、。

2.ot-daemonを起動します

第二ターミナルウィンドウで、作成tunデバイスノードとセット読み取り/書き込み権限:

root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200
root@c0f3912a74ff:/# chmod 600 /dev/net/tun

このデバイスは、仮想デバイスでのパケットの送受信に使用されます。デバイスがすでに作成されている場合はエラーが発生する可能性があります。これは正常であり、無視してかまいません。

移動しopenthreadディレクトリ、および起動ot-daemon我々はノード2の使用を呼ぶことにしますこれは、RCPノードに対して-vあなたはそれが実行されていることをログ出力と確認を見ることができるようにフラグ冗長:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-daemon -v \
    'spinel+hdlc+forkpty://output/simulation/bin/ot-rcp?forkpty-arg=2'

成功した場合、 ot-daemon冗長モードでは、次のような出力を生成します。

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08

このターミナルを開いたままにして、バックグラウンドで実行します。これ以上コマンドを入力することはありません。

3.ot-ctlを使用してネットワークに参加します

私たちは、ノード2(委託していないot-daemonまだスレッドネットワークにRCPを)。これはどこでot-ctlでてくる。 ot-ctl OpenThread CLIアプリと同じCLIを使用しています。したがって、あなたがコントロールすることができot-daemon他のシミュレートされたスレッドのデバイスと同様にノードを。

3番目のターミナルウィンドウを開き、既存のコンテナを実行します。

$ docker exec -it codelab_otsim_ctnr bash

コンテナ内たら、起動ot-ctl

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-ctl
>

あなたは使いますot-ctl 、あなたと二ターミナルウィンドウで起動することをノード2(RCPノード)を管理するには、この第三ターミナルウィンドウでot-daemon 。チェックstateノード2のを:

> state
disabled
Done

ノード2の取得eui64 、特定のジョイナーに参加を制限します:

> eui64
18b4300000000001
Done

ノード1(最初のターミナルウィンドウ)で、コミッショナーを起動し、参加をそのeui64のみに制限します。

> commissioner start
Done
> commissioner joiner add 18b4300000000001 J01NME
Done

ノード2(3番目のターミナルウィンドウ)で、ネットワークインターフェイスを起動し、ネットワークに参加します。

> ifconfig up
Done
> joiner start J01NME
Done

...確認のために数秒待ちます..。

Join success

ジョイナーとして、RCP(ノード2)はコミッショナー(ノード1)で正常に認証され、スレッドネットワークの資格情報を受け取りました。

次に、ノード2をスレッドネットワークに参加させます。

> thread start
Done

4.ネットワーク認証を検証します

チェックstate 、それが今のネットワークに参加したことを検証するために、ノード2に。 2分以内に、ノード2は、トランジションchildへのrouter

> state
child
Done
...
> state
router
Done

5.接続を検証します

終了ot-ctlしてそのEIDを使用して、ノード1はCtrl + Dを使用し、ご使用のホスト・マシンのコマンドラインは、ping上ping6コマンド。場合ot-daemon RCPインスタンスが正常に接合され、スレッドネットワークと通信して、pingが成功しました。

root@c0f3912a74ff:/# ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab
PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms
--- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms

Dockerコンテナを終了した場合

bashプロンプトは、必要に応じてそれを実行し、再起動/再入力だかどうかを確認する必要があるかもしれません。

実行中のDockerコンテナを表示するには:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        codelab_otsim       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

すべてのDockerコンテナー(実行中と停止中の両方)を表示するには:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        codelab_otsim       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

あなたは、コンテナが表示されない場合codelab_otsim_ctnrいずれかの出力にdocker psコマンド、再びそれを実行します。

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

コンテナが停止している場合(に記載されているdocker ps -aではなくdocker ps 、それを再起動します):

$ docker start -i codelab_otsim_ctnr

ドッカー容器が既に実行されている場合(に記載されてdocker ps各端末に容器に、再接続します)。

$ docker exec -it codelab_otsim_ctnr bash

「操作は許可されていません」エラー

あなたがした場合はOperation not permitted (使用して新しいOpenThreadノードを作成するときに、エラーmknodコマンド)を、確認してくださいあなたはこのコードラボで提供されるコマンドに従って、rootユーザとしてドッカーを実行しています。このコードラボはでドッカーの実行をサポートしていませんルートレスモード

これで、OpenThreadを使用して最初のスレッドネットワークを正常にシミュレートできました。素晴らしい!

このCodelabでは、次の方法を学びました。

  • OpenThread SimulationDockerコンテナーを開始および管理します
  • スレッドネットワークをシミュレートする
  • スレッドノードを認証する
  • OpenThreadデーモンを使用してスレッドネットワークを管理する

ThreadとOpenThreadの詳細については、次のリファレンスを参照してください。

または、使用してみてくださいドッカーコンテナにOpenThread境界ルータを