Docker'da OpenThread kullanarak ileti dizisi ağını simüle etme

1. Giriş

26b7f4f6b3ea0700.png

Google tarafından yayınlanan OpenThread, Thread ağ protokolünün açık kaynaklı bir uygulamasıdır. Google Nest, Nest ürünlerinde kullanılan teknolojiyi geliştiricilerin kullanımına sunarak bağlı ev için ürünlerin geliştirilmesini hızlandırmak amacıyla OpenThread özelliğini kullanıma sundu.

İleti dizisi spesifikasyonu, ev uygulamaları için IPv6 tabanlı güvenilir, güvenli ve düşük güçlü bir kablosuz cihazdan cihaza iletişim protokolü tanımlar. OpenThread, IPv6, 6LoWPAN, IEEE 802.15.4 dahil olmak üzere MAC güvenliği, Örgü Bağlantısı Oluşturma ve Örgü Yönlendirme dahil tüm Thread ağ katmanını uygular.

Bu Codelab, Docker'ı kullanarak emüle edilmiş cihazlarda Thread ağın simülasyonunu yapmanızı sağlar.

Neler öğreneceksiniz?

  • OpenThread derleme araç zincirini ayarlama
  • Thread ağı nasıl simüle edilir?
  • Mesaj dizisi düğümlerinin kimliğini doğrulama
  • Thread ağını OpenThread Daemon ile yönetme

Gerekenler

  • Docker
  • Linux, ağ yönlendirme hakkında temel bilgiler

2. Docker'ı kur

Bu Codelab; Linux, Mac OS X veya Windows makine üzerinde Docker kullanacak şekilde tasarlanmıştır. Önerilen ortam Linux'tur.

Docker'ı yükle

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

Docker görüntüsünü alın

Docker yüklendikten sonra bir terminal penceresi açın ve openthread/environment Docker görüntüsünü alın. Bu resimde, bu Codelab için önceden oluşturulmuş ve kullanıma hazır olan OpenThread ve OpenThread Daemon bulunuyor.

$ docker pull openthread/environment:latest

İndirme işleminin tamamen birkaç dakika sürebileceğini unutmayın.

Bir terminal penceresinde görüntüden bir Docker container'ı başlatın ve bash kabuğuna bağlanın:

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

Bu Codelab için gerekli olan işaretleri dikkate alın:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0: Bu seçenek, kapsayıcıda IPv6'yı etkinleştirir
  • --cap-add=net_admin — IP rotaları ekleme gibi ağla ilgili işlemleri yürütmenizi sağlayan NET_MANAGER özelliğini etkinleştirir

Kapsayıcıya yüklendikten sonra, aşağıdakine benzer bir istem görünür:

root@c0f3912a74ff:/#

Yukarıdaki örnekte c0f3912a74ff, Kapsayıcı Kimliğidir. Docker kapsayıcısı örneğinizin Container ID'si, bu Codelab'in istemlerinde gösterilenden farklı olacaktır.

Docker Kullanımı

Bu Codelab'de, Docker'ın kullanımıyla ilgili temel bilgilere sahip olduğunuz varsayılır. Codelab'in tamamı için Docker kapsayıcısında kalmalısınız.

3. Mesaj Dizisi ağını simüle etme

Bu Codelab için kullanacağınız örnek uygulama, OpenThread yapılandırmasını ve yönetim arayüzlerini temel bir komut satırı arayüzü (CLI) üzerinden gösteren minimum OpenThread uygulamasını gösterir.

Bu alıştırmada, emüle edilmiş bir İleti dizisi cihazını başka bir emülasyonlu Thread cihazından pinglemek için gereken minimum adımlar açıklanmaktadır.

Aşağıdaki şekilde, temel Thread ağ topolojisi açıklanmaktadır. Bu alıştırmada, yeşil çemberin içindeki iki düğümün emülasyonunu yaparız. Mesaj dizisi yöneticisi ve aralarından birinde yalnızca bir bağlantı olan bir İplik Yönlendirici.

6e3aa07675f902dc.png

Ağı oluşturma

1. Düğüm 1'i başlat

Daha önce yapmadıysanız bir terminal penceresinde Docker kapsayıcısını başlatın ve bash kabuğuna bağlanın:

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

Docker container'ında, ot-cli-ftd ikili programını kullanarak emüle edilmiş bir Thread cihazı için CLI işlemi oluşturun.

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1

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

Bu ikili program bir OpenThread cihazını uygular. IEEE 802.15.4 radyo sürücüsü, UDP'nin üzerine uygulanır (IEEE 802.15.4 çerçeveleri UDP yükleri arasında aktarılır).

1 bağımsız değişkeni, emüle edilmiş cihaz için"fabrika-atan"ve IEEE EUI-64'ün en önemli bitlerini temsil eden bir dosya tanımlayıcısıdır. Bu değer, IEEE 802.15.4 radyo emülasyonu (bağlantı noktası = 9000 + dosya tanımlayıcısı) için bir UDP bağlantı noktasına bağlanırken de kullanılır. Bu Codelab'deki emülasyonlu Thread cihazının her örneği, farklı bir dosya tanımlayıcısı kullanır.

Not: Emülasyonlu cihaz için işlem oluştururken yalnızca bu Codelab'de belirtildiği gibi 1 veya daha büyük dosya tanımlayıcıları kullanın. 0 dosya tanımlayıcısı başka bir kullanıma yöneliktir.

Yeni bir Operasyonel Veri Kümesi oluşturup bunu veri kümesi olarak belirleyin. Operasyonel Veri Kümesi, oluşturduğunuz İleti dizisi ağının yapılandırmasıdır.

> 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 etkin veri kümesi olarak girin:

> dataset commit active
Done

IPv6 arayüzünü görüntüleyin:

> ifconfig up
Done

Thread protokol işlemini başlatın:

> thread start
Done

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

> state
leader
Done

Düğüm 1' Mesaj Dizisi arayüzüne atanan IPv6 adreslerini görüntüleyin (çıkışınız farklı olur):

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

  • fd ile başlar = örgü-yerel
  • fe80 ile başlar = link-local

Örgü yerel adres türleri daha fazla sınıflandırılır:

  • ff:fe00 içerir = Yönlendirici Bulucu (RLOC)
  • ff:fe00 içermez = Uç Nokta Tanımlayıcı (EID)

Konsol çıktınızdaki EID numarasını daha sonra kullanmak üzere not edin. Yukarıdaki örnek çıkışta EID şöyledir:

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

2. Düğüm 2'yi başlat

Yeni bir terminal açın ve Düğüm 2 için kullanmak üzere şu anda çalışan Docker container'ında bash kabuğu çalıştırın.

$ docker exec -it codelab_otsim_ctnr bash

Bu yeni bash isteminde, KSA işlemini 2 bağımsız değişkeniyle oluşturun. İkinci emülasyon ileti dizisi cihazınız:

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2

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

Thread 1' Operasyonel Veri Kümesi ile aynı değerleri kullanarak Mesaj Dizisi Ağ Anahtarı ve PAN Kimliğini yapılandırın:

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

Bu veri kümesini etkin veri kümesi olarak girin:

> dataset commit active
Done

IPv6 arayüzünü görüntüleyin:

> ifconfig up
Done

Thread protokol işlemini başlatın:

> thread start
Done

Cihaz, kendini bir Çocuk olarak başlatır. Thread Alt Öğesi, yalnızca bir Parent cihaz ile unicast trafiği ileten ve alan bir Thread cihazı olan Son Cihazın eşdeğeridir.

> state
child
Done

2 dakika içinde, child durumundan router durumuna geçiş göreceksiniz. Mesaj Dizisi Yönlendiricisi, İleti dizisi cihazları arasında trafik yönlendirebilir. Üst Öğe olarak da adlandırılır.

> state
router
Done

Ağı doğrulama

Örgü ağını doğrulamanın kolay bir yolu, yönlendirici tablosunu incelemektir.

1. Bağlantıyı denetleyin

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 tablosunda Düğüm 2''nün RLOC16'sını kontrol edin. İlk olarak 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 |

Tabloda 0x5800 düğüm 2''nun RLOC'su ağa bağlı olduğunu doğrulamak için tabloda bulunur.

2. Düğüm 2'den Düğüm 1 ping

Emüle edilmiş iki Thread cihaz arasındaki bağlantıyı doğrulayın. Düğüm 2'de, ping düğüm 1'e atanmış EID numarasıdır:

> 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

> KSA istemine dönmek için enter düğmesine basın.

Ağı test etme

Artık emüle edilmiş iki Thread cihazı arasında ping atabildiğinize göre bir düğümü internete bağlayarak örgü ağını test edin.

Düğüm 1'e dönün ve Mesaj dizisini durdurun:

> thread stop
Done

Düğüm 2'ye geçin ve durumu kontrol edin. Düğüm 2, iki dakika içinde liderin (1. Düğüm) çevrimdışı olduğunu tespit eder. Düğüm 2'nin geçişi, ağın leader adı olmalıdır:

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra Docker bash istemine dönmeden önce Mesaj dizisini durdurun ve Düğüm 2'yi fabrika ayarlarına sıfırlayın. Bu egzersizde kullandığımız Thread ağ kimlik bilgilerinin bir sonraki egzersize aktarılmadığından emin olmak için fabrika ayarlarına sıfırlama işlemi yapıldı.

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

> komutunu factoryreset komutundan sonra geri getirmek için enter tuşuna birkaç kez basmanız gerekebilir. Do spesifik kapsayıcıdan çıkmayın.

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

> factoryreset
>
> exit
root@c0f3912a74ff:/#

Mevcut tüm CLI komutlarını keşfetmek için OpenThread KSA Referansı'na bakın.

4. Komisyon ile düğümleri doğrulama

Önceki alıştırmada, simüle edilmiş iki cihaz ve doğrulanmış bağlantı içeren bir Thread ağı kurdunuz. Ancak bu şekilde yalnızca kimliği doğrulanmamış IPv6 bağlantı yerel trafiğinin cihazlar arasında iletilmesine izin verilir. Küresel IPv6 trafiğini aralarında (ve Thread sınır yönlendiricisi üzerinden internette) yönlendirmek için düğümlerin kimliği doğrulanmalıdır.

Kimlik doğrulama için bir cihaz Müdür olarak hareket etmelidir. Komisyon görevlisi, yeni Thread cihazları için şu anda seçilmiş olan kimlik doğrulama sunucusu ve cihazların ağa katılması için gerekli ağ kimlik bilgilerini sağlama yetkisi veren sunucudur.

Bu alıştırmada, daha önce aynı iki düğüm topolojisini kullanacağız. Kimlik doğrulama için Thread Lideri, Komisyoncu olarak, Thread Yönlendiricisi birleştirici olur.

d6a67e8a0d0b5dcb.png

Docker

Kalan egzersizlerdeki her bir Düğüm (terminal pencere) için Docker container'ını OpenThread derlemesiyle çalıştırdığınızdan emin olun. Önceki alıştırmaya devam ediyorsanız aynı Docker kapsayıcısında iki bash isteminizin açık olması gerekir. Doğru değilse Docker Sorun Giderme adımına bakın veya Simulate Thread network alıştırmasını yeniden yapın.

1. Ağ oluşturun

Düğüm 1'de, KSA işlemi ortaya çıkar:

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1

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

Yeni bir Operasyonel Veri Kümesi oluşturun, bunu etkin veri kümesi olarak taahhüt edin ve İleti Dizisini 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 etkin veri kümesi olarak girin:

> dataset commit active
Done

IPv6 arayüzünü görüntüleyin:

> ifconfig up
Done

Thread protokol işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın ileti dizisi yöneticisi olduğunu doğrulayın:

> state
leader
Done

2. Müdür rolü başlatın

Düğüm 1'deyken komisyon görevlisi rolünü başlatın:

> commissioner start
Done

J01NME Tamamlayıcı Kimlik Bilgisi ile, tüm Birleştiricilerin ağa komisyon vermesine izin verin (* joker karakteri kullanılarak). Birleştirici, gerçek bir yönetici tarafından yaptırılan bir İleti Dizisi Ağı'na eklenen bir cihazdır.

> commissioner joiner add * J01NME
Done

3. Birleştirici rolü başlatma

İkinci bir terminal penceresinde, Docker kapsayıcısında yeni bir KSA işlemi oluşturur. Düğüm 2.

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2

Düğüm 2'de, J01NME Birleştirici Kimlik Bilgileri'ni kullanarak Birleştirici rolünü etkinleştirin.

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Birleşici olarak cihaz (Düğüm 2), Komisyoncu (Node 1) ile kimliğini başarıyla doğrulamış ve Thread Network kimlik bilgilerini almıştır.

Düğüm 2'nin kimliği doğrulandıktan sonra ileti dizisini başlatın:

> thread start
Done

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

Artık ağa katıldığını doğrulamak için Düğüm 2'deki state kontrol edin. İki dakika içinde, Düğüm 2 child'dan router'e geçer:

> state
child
Done
...
> state
router
Done

5. Yapılandırmayı sıfırla

Bir sonraki egzersize hazırlanmak için yapılandırmayı sıfırlayın. Her bir Düğümde Thread'i durdurun, fabrika ayarlarına sıfırlayın ve emüle edilmiş Thread cihazından çıkın:

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

> komutunu factoryreset komutundan sonra geri getirmek için enter tuşuna birkaç kez basmanız gerekebilir.

5. OpenThread Daemon ile ağı yönetme

Bu alıştırmada bir KSA örneğini (yerleştirilmiş tek bir SoC Thread cihazı) ve bir Radyo Ortak İşlemci (RCP) örneğini simüle edeceğiz.

ot-daemon, OpenThread çekirdeğinin hizmet olarak çalışabilmesi için giriş ve çıkış olarak UNIX soketi kullanan bir OpenThread Posix uygulaması modudur. Bir istemci, protokol olarak OpenThread KSA'yı kullanarak sokete bağlanarak bu hizmetle iletişim kurabilir.

ot-ctl, RCP'yi yönetmek ve yapılandırmak için ot-daemon tarafından sağlanan bir KSA'dır. Bu şekilde RCP'yi Thread cihazı tarafından oluşturulan ağa bağlayabiliriz.

Docker

Bu alıştırmadaki her bir düğüm (terminal penceresi) için Docker container'ını OpenThread derlemesiyle çalıştırdığınızdan emin olun. Önceki alıştırmaya devam ederseniz aynı Docker kapsayıcısında iki bash isteminizin açık olması gerekir. Görmüyorsanız Docker Sorunlarını Giderme adımına bakın.

Ot arka plan kullanın

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

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

1. Düğüm 1'i başlat

İlk terminal penceresinde emüle edilmiş Thread cihazınızın CLI işlemini oluşturun:

root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1

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

Yeni bir Operasyonel Veri Kümesi oluşturun, bunu etkin veri kümesi olarak taahhüt edin ve İleti Dizisini 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 etkin veri kümesi olarak girin:

> dataset commit active
Done

IPv6 arayüzünü görüntüleyin:

> ifconfig up
Done

Thread protokol işlemini başlatın:

> thread start
Done

Düğüm 1's Mesaj Dizisi 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
>

İleti dizisi ağını simüle etme adımında açıklandığı gibi, bir adres yerel bağlantı (fe80) ve üçü örgü yerel (fd) şeklindedir. EID adresi, adreste ff:fe00 içermeyen örgü yerel adresidir. Bu örnek çıkışta, EID numarası fd55:cf34:dea5:7994:460:872c:e807:c4ab şeklindedir.

ipaddr çıkışınızdaki belirli EID numarasını tanımlayın. Bu kimlik, düğümle iletişim kurmak için kullanılır.

2. Ot arka planını başlat

İkinci terminal penceresinde, tun cihaz düğümü oluşturun ve okuma/yazma izinlerini ayarlayın:

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 makbuz için kullanılır. Cihaz zaten oluşturulmuşsa bir hata mesajı alabilirsiniz. Bu durum normaldir ve yoksayılabilir.

Düğüm 2 olarak adlandıracağımız bir RCP düğümü için ot-daemon işlemini başlatın. Günlük ayrıntısını görmek ve çalıştığını onaylamak için -v ayrıntılı işaretini kullanın:

root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-daemon -v \
'spinel+hdlc+forkpty:///openthread/build/examples/apps/ncp/ot-rcp?forkpty-arg=2'

Başarılı olduğunda, ayrıntılı modda ot-daemon aşağıdakine benzer bir çıkış oluşturur:

ot-daemon[31]: Running OPENTHREAD/297a880; POSIX; Feb  1 2022 04:43:39
ot-daemon[31]: Thread version: 3
ot-daemon[31]: Thread interface: wpan0
ot-daemon[31]: RCP version: OPENTHREAD/297a880; SIMULATION; Feb  1 2022 04:42:50

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

3. Ağa katılmak için otctct uygulamasını kullanın

Henüz herhangi bir Thread ağına Düğüm 2 (ot-daemon RCP) atamadık. ot-ctl, tam olarak bu noktada devreye girer. ot-ctl, OpenThread KSA uygulamasıyla aynı KSA'yı kullanır. Bu nedenle, ot-daemon düğümlerini diğer Simüle edilmiş İleti Dizisi cihazlarıyla aynı şekilde kontrol edebilirsiniz.

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

$ docker exec -it codelab_otsim_ctnr bash

Kapsayıcıyı oluşturduktan sonra ot-ctl işlemini başlatın:

root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-ctl
>

ot-daemon ile ikinci terminal penceresinde başlattığınız Düğüm 2'yi (RCP düğümü) yönetmek için bu üçüncü terminal penceresinde ot-ctl kodunu kullanacaksınız. Düğüm 2'nin state bilgisini kontrol edin:

> state
disabled
Done

Belirli bir Birleştirici'ye katılımı kısıtlamak için Düğüm 2'yi (eui64) alın:

> eui64
18b4300000000001
Done

Düğüm 1'de (ilk terminal penceresi), Komisyoncu'yu başlatın ve birleştirme işlemini yalnızca bu eui64 ile kısıtlayın:

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

Üçüncü terminal penceresinde 2. Düğümün ağ arayüzünü açıp ağa katılın:

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

RCP (Düğüm 2), Birleşik bir katılımcı olarak, dijital güvenlik yetkilisinin (Node 1) kimliğini başarıyla doğruladı ve iş parçacığı ağı kimlik bilgilerini aldı.

Şimdi Düğüm 2'yi Thread ağına bağlayın (üçüncü terminal penceresinde bir kez daha):

> thread start
Done

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

Üçüncü terminalde, ağa katıldığını doğrulamak için Düğüm 2'deki state kontrol edin. İki dakika içinde, Düğüm 2 child'dan router'e geçer:

> state
child
Done
...
> state
router
Done

5. Bağlantıyı doğrulama

Üçüncü terminal penceresinde, Ctrl+D ya da exit komutunu kullanarak ot-ctl komutunu sonlandırın ve kapsayıcının bash konsoluna geri dönün. Bu konsoldan, EID'sini ping6 komutuyla kullanan Düğüm 1'i pingleyin. ot-daemon RCP örneği, ileti dizisi ağıyla başarılı bir şekilde birleştirilir ve iletişim kurarsa ping başarılı olur:

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 Sorunlarını Giderme

Do spesifik kapsayıcıdan çıktıysanız

bash istemlerini kontrol edin. Komut dosyasının çalışıp çalışmadığını kontrol etmeniz ve gerektiğinde yeniden başlatmanız/yeniden girmeniz 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        environment       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

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

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

docker ps komutunun çıkışında codelab_otsim_ctnr kapsayıcısı görünmüyorsa bunu tekrar ç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/environment bash

Kapsayıcı durdurulduysa (docker ps -a içinde listeleniyor ancak docker ps olarak listelenmiyorsa) kapsayıcıyı yeniden başlatın:

$ docker start -i codelab_otsim_ctnr

Docker container'ı zaten çalışıyorsa (docker ps içinde listelenmiştir) her bir terminaldeki kapsayıcıya yeniden bağlanın:

$ docker exec -it codelab_otsim_ctnr bash

"Çalışmaya izin verilmiyor" hataları

Yeni OpenThread düğümlerini oluştururken (mknod komutunu kullanarak) Operation not permitted hatalarıyla karşılaşırsanız bu Codelab'de belirtilen komutlara göre Docker'ı kök kullanıcı olarak çalıştırdığınızdan emin olun. Bu Codelab, Docker'ı köksiz modda çalıştırmayı desteklemez.

7. Tebrikler!

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

Bu Codelab'de şunları öğrendiniz:

  • OpenThread Simulation Docker container'ını başlat ve yönet
  • Mesaj Dizisi ağını simüle etme
  • Thread düğümlerinin kimliğini doğrulayın
  • Bir Thread ağını OpenThread Daemon ile yönetin

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

Alternatif olarak, Bir Docker kapsayıcısında OpenThread Sınır Yönlendirici kullanmayı deneyebilirsiniz.