Docker'da OpenThread kullanarak bir Thread ağını simüle etme

1. Giriş

26b7f4f6b3ea0700.png

OpenThread Google tarafından yayımlanan bir açık kaynak uygulamasıdır Konu ağ protokolü. Google Nest, bağlantılı ev için ürünlerin geliştirilmesini hızlandırmak amacıyla Nest ürünlerinde kullanılan teknolojiyi geliştiricilerin geniş çapta kullanımına sunmak için OpenThread'i piyasaya sürdü.

Konu şartname ev uygulamaları için bir güvenilir, güvenli IPv6 tabanlı ve düşük güç kablosuz cihazdan cihaza iletişim protokolünü tanımlar. OpenThread, IPv6, 6LoWPAN, IEEE 802.15.4, MAC güvenliği, Mesh Bağlantısı Kurulumu ve Mesh Yönlendirme dahil olmak üzere tüm Thread ağ katmanlarını uygular.

Bu Codelab, Docker kullanarak öykünülmüş cihazlarda bir Thread ağını simüle etme konusunda size yol gösterecektir.

ne öğreneceksin

  • OpenThread derleme araç zinciri nasıl kurulur
  • Bir Thread ağı nasıl simüle edilir
  • İş parçacığı düğümleri nasıl doğrulanır
  • OpenThread Daemon ile bir Thread ağı nasıl yönetilir

Neye ihtiyacın olacak

  • Liman işçisi
  • Temel Linux bilgisi, ağ yönlendirme

2. Docker'ı kurun

Bu Codelab, Docker'ı bir Linux, Mac OS X veya Windows makinesinde kullanmak üzere tasarlanmıştır. Linux önerilen ortamdır.

Docker'ı yükleyin

Docker'ı istediğiniz işletim sistemine yükleyin.

Docker'ı İndirin

Docker görüntüsünü çekin

Docker yüklendikten sonra, bir terminal penceresi açılır ve çekme openthread/codelab_otsim Docker image. Bu görüntü, bu Codelab için önceden oluşturulmuş ve kullanıma hazır OpenThread ve OpenThread Daemon'a sahiptir.

$ docker pull openthread/codelab_otsim:latest

Tamamen indirmenin birkaç dakika sürebileceğini unutmayın.

Bir terminal penceresinde, görüntü bir Docker kabı başlatmak ve bağlanmak bash kabuğu:

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

Bu Codelab için gerekli olan işaretlere dikkat edin:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 - Bu kap içinde IPv6 sağlar
  • --cap-add=net_admin - Böyle IP yolları ekleme gibi ağ ile ilgili işlemler, çalıştırmasına izin veriyor NET_ADMIN yeteneği, sağlayan

Kapsayıcıya girdikten sonra, buna benzer bir isteminiz olmalıdır:

root@c0f3912a74ff:/#

Yukarıdaki örnekte, c0f3912a74ff Konteyner kimliğidir. Docker kapsayıcı örneğinize ilişkin Kapsayıcı Kimliği, bu Codelab bilgi istemlerinde gösterilenden farklı olacaktır.

Docker'ı kullanma

Bu Codelab, Docker kullanmanın temellerini bildiğinizi varsayar. Codelab'in tamamı için Docker kapsayıcısında kalmalısınız.

3. Bir Thread ağını simüle edin

Bu Codelab için kullanacağınız örnek uygulama, temel bir komut satırı arabirimi (CLI) aracılığıyla OpenThread yapılandırma ve yönetim arabirimlerini ortaya çıkaran minimal bir OpenThread uygulamasını gösterir.

Bu alıştırma, öykünülmüş bir Thread aygıtına öykünülmüş başka bir Thread aygıtından ping atmak için gereken minimum adımları gösterir.

Aşağıdaki şekil, temel bir Thread ağ topolojisini açıklamaktadır. Bu alıştırma için, yeşil daire içindeki iki düğümü taklit edeceğiz: Aralarında tek bir bağlantı olan bir İplik Lideri ve İplik Yönlendiricisi.

6e3aa07675f902dc.png

Ağı oluştur

1. Düğüm 1'i Başlatın

Eğer bir terminal penceresinde, bu yüzden zaten yapmadıysanız, Docker kabı başlatmak ve bağlanmak bash kabuğu:

$ 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 konteyner, gidin openthread dizin ve kullanan bir taklit Konu cihaz için CLI işlem spawn ot-cli-ftd ikili.

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

Not: görmüyorsanız > Bu komutu çalıştırdıktan sonra istemi basın enter .

Bu ikili, POSIX'in üzerine öykünülmüş bir OpenThread aygıtı uygular. IEEE 802.15.4 radyo sürücüsü, UDP'nin üzerine uygulanır (IEEE 802.15.4 çerçeveleri UDP yükleri içinde geçirilir).

Argümanı 1 "Fabrikada atanan" Taklit cihaz için IEEE EUI-64 nin en az anlamlı bitleri temsil eden bir dosya belirleyicisidir. Bu değer ayrıca IEEE 802.15.4 radyo öykünmesi için bir UDP bağlantı noktasına bağlanırken kullanılır (bağlantı noktası = 9000 + dosya tanımlayıcısı). Bu Codelab'deki öykünülmüş bir Thread cihazının her örneği, farklı bir dosya tanımlayıcı kullanacaktır.

Not: Yalnızca kullanım dosya tanımlayıcıları 1 bir taklit cihaz için bir işlem üretmekten bu Codelab belirtildiği gibi ya da daha büyüktür. Bir dosya tanımlayıcı 0 diğer kullanılmak üzere ayrılmıştır.

Yeni bir Operasyonel Veri Kümesi oluşturun ve bunu aktif olan olarak kabul edin. Operasyonel Veri Kümesi, oluşturmakta olduğunuz Thread ağının konfigürasyonudur.

> 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

Bu veri kümesini aktif olan olarak kabul et:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

Thread protokolü işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın İplik Lideri olduğunu doğrulayın. Lider, yönlendirici kimliği atamasını yönetmekten sorumlu cihazdır.

> state
leader
Done

Düğüm 1'in Thread arayüzüne atanan IPv6 adreslerini görüntüleyin (çıktınız farklı olacaktır):

> 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

Belirli IPv6 adres türlerine dikkat edin:

  • İle başlar fd = örgü lokal
  • Başlar fe80 = bağlantı yerel

Mesh-yerel adres türleri ayrıca sınıflandırılır:

  • İçeren ff:fe00 = Yönlendirici Locator (RLOC)
  • İçermez ff:fe00 = Uç-Noktası Kimlik (EID)

Konsol çıktınızdaki EID'yi belirleyin, daha sonra kullanmak üzere not edin. Yukarıdaki örnek çıktıda, EID:

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

2. Düğüm 2'yi Başlatın

Yeni bir terminal açıp bir yürütme bash düğüm 2 için kullanılacak anda çalışan Docker kapta kabuk.

$ docker exec -it codelab_otsim_ctnr bash

Bu yeni At bash istemi, gezinilebilen openthread dizin ve CLI süreci dölü. Bu, öykünülmüş ikinci Thread aygıtınız:

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

Not: görmüyorsanız > Bu komutu çalıştırdıktan sonra istemi basın enter .

Düğüm 1'in Operasyonel Veri Kümesi ile aynı değerleri kullanarak İş Parçacığı Ağ Anahtarını ve PAN Kimliğini yapılandırın:

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

Bu veri kümesini aktif olan olarak kabul et:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

Thread protokolü işlemini başlatın:

> thread start
Done

Cihaz kendisini Çocuk olarak başlatacaktır. İş parçacığı Alt Öğesi, yalnızca bir Ana cihazla tek noktaya yayın trafiği ileten ve alan bir İş parçacığı cihazı olan bir Son Cihaza eşdeğerdir.

> state
child
Done

2 dakika içinde gelen devlet anahtarını görmelisiniz child için router . Bir Thread Router, Thread cihazları arasında trafiği yönlendirme yeteneğine sahiptir. Ayrıca Ebeveyn olarak da adlandırılır.

> state
router
Done

Ağı doğrulayın

Kafes ağı doğrulamanın kolay bir yolu, yönlendirici tablosuna bakmaktır.

1. Bağlantıyı kontrol edin

Düğüm 2'de RLOC16'yı edinin. RLOC16, cihazın RLOC IPv6 adresinin son 16 bitidir.

> rloc16
5800
Done

Düğüm 1'de, Düğüm 2'nin RLOC16'sı için yönlendirici tablosunu kontrol edin. Önce Düğüm 2'nin yönlendirici durumuna geçtiğinden emin olun.

> 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 |

Düğüm 2'nin RLOC 0x5800 mesh bağlı olduğunu teyit tabloda bulunmaktadır.

2. Düğüm 1'e Düğüm 2'den Ping Atma

Öykünülmüş iki Thread cihazı arasındaki bağlantıyı doğrulayın. Düğüm 2'de, ping düğüm 1 tahsis 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

Basın enter dönmek için > CLI istemi.

Ağı test edin

Artık iki öykünülmüş Thread aygıtı arasında başarılı bir şekilde ping atabildiğinize göre, bir düğümü çevrimdışına alarak ağ ağını test edin.

Düğüm 1'e dönün ve İpliği durdurun:

> thread stop
Done

Düğüm 2'ye geçin ve durumu kontrol edin. İki dakika içinde, Düğüm lideri (Düğüm 1) çevrimdışı 2 algılar olduğunu ve Düğüm 2 geçiş olmak görmelisiniz leader ağının:

> state
router
Done
...
> state
leader
Done

Bir kez Docker için geri çıkmadan önce, durdurma Konu ve fabrika sıfırlama Düğümü 2 teyit bash istemi. Bu alıştırmada kullandığımız Thread ağ kimlik bilgilerinin bir sonraki alıştırmaya taşınmamasını sağlamak için fabrika ayarlarına sıfırlama yapılır.

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

Sen basına gerekebilir enter getirmek için birkaç kez > bir sonraki istemi geri factoryreset komutu. Docker kapsayıcısından çıkmayın.

Ayrıca fabrika ayarlarına sıfırlayın ve Düğüm 1'den çıkın:

> factoryreset
>
> exit
root@c0f3912a74ff:/#

Bkz OpenThread CLI Referans mevcut tüm CLI komutlarını keşfetmek için.

4. Devreye Alma ile düğümleri doğrulayın

Önceki alıştırmada, iki simüle edilmiş cihaz ve doğrulanmış bağlantı ile bir Thread ağı kurdunuz. Ancak bu, yalnızca kimliği doğrulanmamış IPv6 yerel bağlantı trafiğinin cihazlar arasında geçmesine izin verir. Küresel IPv6 trafiğini aralarında (ve bir Thread sınır yönlendiricisi aracılığıyla İnternet) yönlendirmek için düğümlerin kimliğinin doğrulanması gerekir.

Kimlik doğrulaması yapmak için bir cihazın Yetkili olarak hareket etmesi gerekir. Komisyon Üyesi, yeni Thread cihazları için şu anda seçilmiş olan kimlik doğrulama sunucusu ve cihazların ağa katılması için gereken ağ kimlik bilgilerini sağlama yetkisi veren kişidir.

Bu alıştırmada, öncekiyle aynı iki düğümlü topolojiyi kullanacağız. Kimlik doğrulama için, İplik Lideri Komisyon Üyesi, İplik Yönlendiricisi ise Birleştirici olarak hareket edecektir.

d6a67e8a0d0b5dcb.png

Liman işçisi

Kalan alıştırmalardaki her Düğüm (terminal penceresi) için Docker kapsayıcısını OpenThread yapısıyla çalıştırdığınızdan emin olun. Bir önceki egzersizden devam ederse, yine iki olmalıdır bash zaten açık aynı Docker kapsayıcı içindeki istemlerini. Değilse, Docker Giderme adıma bakın, ya da sadece benzetin bir Konu ağ egzersizi yinelemek.

1. Bir ağ oluşturun

Düğüm 1'de, CLI sürecini oluşturun:

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

Not: görmüyorsanız > Bu komutu çalıştırdıktan sonra istemi basın enter .

Yeni bir Operasyonel Veri Kümesi oluşturun, onu aktif olan olarak kabul edin ve Thread'i başlatın:

> 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

Bu veri kümesini aktif olan olarak kabul et:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

Thread protokolü işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın Thread Leader olduğunu doğrulayın:

> state
leader
Done

2. Komiser rolünü başlatın

Hâlâ Düğüm 1'deyken, Komiser rolünü başlatın:

> commissioner start
Done

(Kullanarak herhangi Joiner izin * ile joker) J01NME ağa komisyona Marangoz Credential. Bir Joiner, bir insan yönetici tarafından görevlendirilen bir Thread Network'e eklenen bir cihazdır.

> commissioner joiner add * J01NME
Done

3. Marangoz rolünü başlatın

İkinci bir terminal penceresinde, Docker kapsayıcısında yeni bir CLI işlemi oluşturun. Bu, Düğüm 2'dir.

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

Düğüm 2 günü, kullanarak Marangoz rolünü etkinleştirmek J01NME Joiner Kimlik Bilgilerini.

> ifconfig up
Done
> joiner start J01NME
Done

... onay için birkaç saniye bekleyin ...

Join success

Bir Joiner olarak, cihaz (Düğüm 2), Komiser (Düğüm 1) ile kimliğini başarıyla doğruladı ve Thread Network kimlik bilgilerini aldı.

Artık Düğüm 2'nin kimliği doğrulandığına göre, Konuyu başlatın:

> thread start
Done

4. Ağ kimlik doğrulamasını doğrulayın

Kontrol state artık ağa katılmış olduğunu doğrulamak için, Düğüm 2. İki dakika içinde, Düğüm 2 geçişler child karşı router :

> state
child
Done
...
> state
router
Done

5. Yapılandırmayı sıfırlayın

Bir sonraki alıştırmaya hazırlanmak için konfigürasyonu sıfırlayın. Her Düğümde Thread'i durdurun, fabrika ayarlarına sıfırlayın ve taklit edilen Thread cihazından çıkın:

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

Sen basına gerekebilir enter getirmek için birkaç kez > bir sonraki istemi geri factoryreset komutu.

5. Ağı OpenThread Daemon ile yönetin

Bu alıştırma için, bir CLI örneğini (tek bir gömülü SoC Thread cihazı) ve bir Radio Co-Processor (RCP) örneğini simüle edeceğiz.

ot-daemon OpenThread çekirdek bir hizmet olarak çalışabilir, böylece, girdi ve çıktı olarak, bir UNIX soket kullanır OpenThread Posix uygulamanın bir moddur. Bir istemci, protokol olarak OpenThread CLI'yi kullanarak sokete bağlanarak bu hizmetle iletişim kurabilir.

ot-ctl tarafından sağlanan bir CLI olan ot-daemon yönetmek ve RCP yapılandırmak için. Bunu kullanarak, RCP'yi Thread cihazı tarafından oluşturulan ağa bağlayacağız.

Liman işçisi

Bu alıştırmadaki her Düğüm (terminal penceresi) için Docker kapsayıcısını OpenThread yapısıyla çalıştırdığınızdan emin olun. Bir önceki egzersizden devam ederse, iki olmalıdır bash zaten açık aynı Docker kapsayıcı içindeki istemlerini. Değilse, Docker Giderme adıma bakın.

ot-daemon kullan

Bu alıştırma, aşağıdakilere karşılık gelen üç terminal penceresi kullanacaktır:

  1. Simüle edilmiş Thread cihazının CLI örneği (Düğüm 1)
  2. ot-daemon proses
  3. ot-ctl CLI örneği

1. Düğüm 1'i Başlatın

İlk terminal penceresinde, öykünülmüş Thread aygıtınız için CLI işlemini oluşturun:

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

Not: görmüyorsanız > Bu komutu çalıştırdıktan sonra istemi basın enter .

Yeni bir Operasyonel Veri Kümesi oluşturun, onu aktif olan olarak kabul edin ve Thread'i başlatın:

> 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

Bu veri kümesini aktif olan olarak kabul et:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

Thread protokolü işlemini başlatın:

> thread start
Done

Düğüm 1'in Thread arayüzüne atanan IPv6 adreslerini görüntüleyin:

> 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
>

Simulate bir Konu ağ adımı açıklandığı gibi, tek adresi yerel bağlantı (olan fe80 ) ve üç örgü-yerel (vardır fd ). EID örgü-yerel içermez adresi ff:fe00 adresi. Bu örnek çıktısı, EID olan fd55:cf34:dea5:7994:460:872c:e807:c4ab .

Senin belirli EID tanımlayın ipaddr düğümle iletişim için kullanılacak çıktı.

2. ot-daemon'u başlatın

İkinci terminal penceresinde, bir oluşturma tun aygıt düğümü ve ayar okuma / yazma:

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

Bu cihaz, sanal cihazlarda paket iletimi ve alımı için kullanılır. Cihaz zaten oluşturulmuşsa bir hata alabilirsiniz; bu normaldir ve göz ardı edilebilir.

Gidin openthread dizine ve başlangıç ot-daemon biz Düğüm 2. kullanın arayacağım RCP düğümü için -v Eğer günlük çıkışını ve çalışmakta olduğunu onaylamak görebilmek için bayrak ayrıntılı:

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

Ne zaman başarılı, ot-daemon modu Aşağıda çıkış benzer üretir ayrıntılı içinde:

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

Bu terminali arka planda açık ve çalışır durumda bırakın. İçine başka komut girmeyeceksiniz.

3. Ağa katılmak için ot-ctl kullanın

Biz Düğümü 2 (devreye henüz ot-daemon henüz Konu ağına RCP). Burasıdır ot-ctl geliyor. ot-ctl OpenThread CLI uygulamayla aynı CLI kullanır. Bu nedenle, kontrol edebilir ot-daemon diğer simüle Konu cihazları ile aynı şekilde düğümleri.

Üçüncü bir terminal penceresi açın ve mevcut kapsayıcıyı yürütün:

$ docker exec -it codelab_otsim_ctnr bash

Kapta kez başlatmak ot-ctl :

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

Sen kullanacağız ot-ctl Eğer ikinci terminal penceresinde başladığını Düğümü 2 (BİP düğüm) yönetmek için bu üçüncü terminal penceresinde ot-daemon . Kontrol state Düğüm 2:

> state
disabled
Done

Düğüm 2'nin alın eui64 özgü Joiner katılmadan kısıtlamak için:

> eui64
18b4300000000001
Done

Düğüm 1'de (ilk terminal penceresi), Komiseri başlatın ve yalnızca bu eui64'e katılmayı kısıtlayın:

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

Düğüm 2'de (üçüncü terminal penceresi), ağ arayüzünü açın ve ağa katılın:

> ifconfig up
Done
> joiner start J01NME
Done

... onay için birkaç saniye bekleyin ...

Join success

Bir Joiner olarak, RCP (Düğüm 2), Komiser (Düğüm 1) ile kimliğini başarıyla doğruladı ve Thread Network kimlik bilgilerini aldı.

Şimdi Düğüm 2'ye Thread ağına katılın:

> thread start
Done

4. Ağ kimlik doğrulamasını doğrulayın

Kontrol state artık ağa katılmış olduğunu doğrulamak için, Düğüm 2. İki dakika içinde, Düğüm 2 geçişler child karşı router :

> state
child
Done
...
> state
router
Done

5. Bağlantıyı doğrulayın

Çık ot-ctl ile EID kullanarak, Düğüm 1 Ctrl + D kullanarak ve ana makinenin komut satırında, ping üzerinde ping6 komutu. Eğer ot-daemon RCP örneği başarıyla katılmış ve Konu ağ ile iletişim, Ping başarılı:

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

6. Docker Sorun Giderme

Docker kapsayıcısından çıktıysanız

bash istemleri, gerektiği şekilde çalışmakta ve yeniden başlatma / yeniden girin eğer kontrol etmek gerekebilir.

Hangi Docker kapsayıcılarının çalıştığını göstermek için:

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

Tüm Docker kapsayıcılarını (hem çalışıyor hem de durdurulmuş) göstermek için:

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

Eğer konteyner görmüyorsanız codelab_otsim_ctnr ya çıkışında docker ps komutu, yeniden çalıştırın:

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

Kap durursa (listelenen docker ps -a ancak docker ps , yeniden başlatın):

$ docker start -i codelab_otsim_ctnr

Docker kap önce çalışıyorsa (listelenen docker ps her bir uç bölgesindeki kap olmak üzere, yeniden bağlanma):

$ docker exec -it codelab_otsim_ctnr bash

"İşletime izin verilmiyor" hataları

Eğer yaşarsanız Operation not permitted (kullanarak yeni OpenThread düğümleri oluştururken hatalar mknod komutunu), emin olmak bu Codelab sağlanan komutlara göre kök kullanıcı olarak Docker çalıştırıyorsunuz. Bu Codelab içinde Docker çalıştırılmasını desteklemez köksüz modu .

7. Tebrikler!

OpenThread kullanarak ilk Thread ağınızı başarıyla simüle ettiniz. Mükemmel!

Bu Codelab'de şunları nasıl yapacağınızı öğrendiniz:

  • OpenThread Simulation Docker kapsayıcısını başlatın ve yönetin
  • Bir Thread ağını simüle edin
  • İş parçacığı düğümlerini doğrulama
  • OpenThread Daemon ile bir Thread ağını yönetin

Thread ve OpenThread hakkında daha fazla bilgi edinmek için şu referansları inceleyin:

Ya da, kullanmayı deneyin bir Docker kapta OpenThread Sınır Router !