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, bağlı ev için ürünlerin geliştirilmesini hızlandırmak amacıyla geliştiricilerin genel olarak kullanabilmesi için OpenThread'i kullanıma sundu.

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

Bu Codelab, Docker kullanarak emüle edilen cihazlarda Thread ağının simülasyonunu yapmanıza yardımcı olur.

Neler öğreneceksiniz?

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

Gerekenler

  • Docker
  • Linux ile ilgili temel bilgiler, ağ yönlendirme

2. Docker'ı ayarlama

Bu Codelab; Linux, Mac OS X veya Windows makinede Docker'ı kullanacak şekilde tasarlanmıştır. Linux önerilen ortamdır.

Docker'ı yükle

Docker'ı istediğ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, önceden oluşturulmuş ve bu Codelab için kullanıma hazır olan OpenThread ve OpenThread Daemon özellikleri yer almaktadır.

$ docker pull openthread/environment:latest

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

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

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

--rm seçeneği, kapsayıcıdan çıktığınızda kapsayıcıyı siler. Kapsayıcının silinmesini istemiyorsanız bu seçeneği kullanmayın.

Bu Codelab'de gerekli olan işaretleri unutmayın:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0: Bu seçenek, container'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 girdikten sonra, aşağıdakine benzer bir istem görürsünüz:

root@c0f3912a74ff:/#

Yukarıdaki örnekte c0f3912a74ff, kapsayıcı kimliğidir. Docker container örneğinizin kapsayıcı kimliği, bu Codelab'deki istemlerde gösterilenden farklı olur.

Docker'ı Kullanma

Bu Codelab'de Docker kullanımıyla ilgili temel bilgileri bildiğinizi varsayıyoruz. Codelab'in tamamında Docker container'ında kalmanız gerekir.

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 açığa çıkaran en küçük OpenThread uygulamasını gösterir.

Bu alıştırmada, emülasyon uygulanan bir Thread cihazına başka bir emülasyonlu Thread cihazından ping göndermek için gereken minimum adımlar gösterilmektedir.

Aşağıdaki şekilde temel bir Thread ağ topolojisi açıklanmaktadır. Bu alıştırmada, yeşil daire içindeki iki düğümü emülasyona geçiriyoruz: Bir Mesaj Dizisi Lideri ve aralarında tek bir bağlantı olan Mesaj Dizi Yönlendiricisi.

6e3aa07675f902dc.png

Ağı oluşturma

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

Henüz 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ülye edilmiş 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örmezseniz enter tuşuna basın.

Bu ikili program bir OpenThread cihazı uygular. IEEE 802.15.4 radyo sürücüsü, UDP'nin üzerine uygulanır (IEEE 802.15.4 çerçeveler UDP yükleri içinde iletilir).

1 bağımsız değişkeni, emüle edilmiş cihaz için "fabrikada atanmış" IEEE EUI-64 bitlerinin en az ö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 açıklayıcı) için bir UDP bağlantı noktasına bağlanırken de kullanılır. Bu Codelab'de emülasyonu yapılan Thread cihazının her bir örneği için farklı bir dosya tanımlayıcı kullanılacak.

Not: Emülasyonlu bir 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 açıklayıcısı başka kullanım için ayrılmıştır.

Yeni bir operasyonel veri kümesi oluşturup etkin veri kümesi olarak kaydedin. Operasyonel Veri Kümesi, oluşturduğunuz Thread 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 kaydedin:

> 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 Mesaj Dizisi 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 İleti Dizisi arayüzüne atanan IPv6 adreslerini görüntüleyin (çıkışı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ürlerini not alın:

  • fd = örgü-yerel ile başlar
  • 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ısı (EID)

Konsol çıkışınızdaki EID'yi tanımlayın ve daha sonra kullanmak üzere kaydedin. Yukarıdaki örnek çıktıda EID:

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 o 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 sürecini 2 bağımsız değişkeniyle oluşturun. Bu, emülasyon uygulanan ikinci Thread cihazınız:

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

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

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

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

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

> dataset commit active
Done

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

> ifconfig up
Done

Thread protokol işlemini başlatın:

> thread start
Done

Cihaz, kendini bir Çocuk olarak başlatır. İş parçacığı alt öğesi, yalnızca üst cihazla tek yönlü trafik aktaran ve alan son iş parçacığı cihazı olan son cihaza eşdeğerdir.

> state
child
Done

2 dakika içinde child durumundan router durumuna geçiş yapıldığını görürsünüz. Thread Yönlendirici, trafiği Thread cihazları arasında yönlendirebilir. Bu şekilde "Ebeveyn" olarak da adlandırılır.

> state
router
Done

Ağı doğrulama

Örgü ağını 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 yönlendiricisini 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 |

Düğüm 2'nin ilgili 0x5800 RLOC'u tabloda, ağa bağlandığını teyit eder.

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

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

> 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 atabileceğinize göre bir ağı çevrimdışı tutarak örgü ağını test edebilirsiniz.

Düğüm 1'e dönün ve İleti Dizisini durdurun:

> thread stop
Done

Düğüm 2'ye geçin ve durumu kontrol edin. Düğüm 2, iki dakika içinde öncünün (1. düğüm) çevrimdışı olduğunu algılar ve 2. düğümün, ağın leader olduğu bir geçiş görürsünüz:

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra Docker bash istemine geri dönmeden önce Thread ve Düğüm 2'yi durdurun. Bu alıştırmada kullandığımız Thread ağ kimlik bilgilerinin bir sonraki egzersize taşınmadığı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 birkaç kez enter düğmesine basmanız gerekebilir. Docker container'ından çı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 CLI Referansı bölümüne bakın.

4. Komisyon ile düğümleri doğrulayın

Önceki alıştırmada, simüle edilmiş iki cihaz ve doğrulanmış bağlantı içeren bir Thread ağı oluşturuyorsunuz. Ancak bu sayede yalnızca kimliği doğrulanmamış IPv6 bağlantı yerel trafiğinin cihazlar arasında geçmesine izin verilir. Genel IPv6 trafiğini aralarında (ve Thread satır yönlendiricisi üzerinden internetlerde) yönlendirmek için düğümlerin kimliği doğrulanmalıdır.

Kimlik doğrulaması için bir cihazın Komisyoncu olarak işlem yapması gerekir. 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 gereken ağ kimlik bilgilerini sağlama yetkisidir.

Bu alıştırmada, daha önce olduğu gibi iki düğümlü topolojiyi kullanacağız. İleti Dizisi Yöneticisi, kimlik doğrulama için Komisyoncu olarak, Thread Yönlendiricisi ise Tamamlayıcı olarak hareket eder.

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ırmadan devam ederseniz aynı Docker kapsayıcısında iki bash isteminin zaten açık olması gerekir. Görmüyorsanız Docker Sorun giderme adımına bakın veya Simulate Thread network egzersizini yeniden yapın.

1. Ağ oluşturun

Düğüm 1'de KSA işlemi oluşur:

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

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

Yeni bir operasyonel veri kümesi oluşturun, etkin veri kümesi olarak kaydedin ve ileti 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 kaydedin:

> 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 bir Mesaj Dizisi Lideri olduğunu doğrulayın:

> state
leader
Done

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

Düğüm 1'den ayrılmadan Komisyoncu rolünü başlatın:

> commissioner start
Done

J01NME Birleştirici Kimlik ile, herhangi bir Birleştirici'nin (* joker karakterini kullanarak) ağa komisyon almasına izin verin. Tamamlayıcı, gerçek bir yönetici tarafından, yürütülen bir iş parçacığı ağına eklenen bir cihazdır.

> commissioner joiner add * J01NME
Done

3. Düzenleyen rolünü başlatma

İkinci bir terminal penceresinde, Docker container'ında yeni bir KSA süreci oluşur. Bu Düğüm 2'dir.

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

Düğüm 2'de J01NME Tamamlayıcı Kimliği'ni kullanarak Birleştirici rolünü etkinleştirin.

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Birleştirilmiş olan cihaz (Düğüm 2), Komite (Node 1) ile kimlik doğrulamasını başarıyla gerçekleştirmiş ve Thread Ağ kimlik bilgisini almıştır.

Düğüm 2'nin kimliği doğrulandıktan sonra İleti Dizisini başlatın:

> thread start
Done

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

Düğüm 2'de state ağının ağa katıldığını doğrulamak için kontrol edin. Düğüm 2, iki dakika içinde child ürününden router ürününe 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 Düğümde, İleti Dizisini durdurun, fabrika ayarlarına sıfırlayın ve emüle edilmiş İleti Dizisi cihazından çıkın:

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

> komutunu factoryreset komutundan sonra geri getirmek için birkaç kez enter düğmesine basmanız gerekebilir.

5. OpenThread Daemon ile ağı yönetin

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

ot-daemon, giriş ve çıkış olarak bir UNIX soketi kullanan bir OpenThread Posix uygulaması modudur. Böylece, OpenThread core hizmet olarak çalışabilir. İstemciler, protokol olarak OpenThread CLI'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 seçeneği kullanarak RCP'yi Thread cihazı tarafından oluşturulan ağa bağlayacağız.

Docker

Bu alıştırmadaki her düğüm için (terminal pencere) 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 isteminin zaten açık olması gerekir. Aksi takdirde, Docker Sorunlarını Giderme adımına bakın.

Ot Daemon kullanın

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

  1. Thread simülasyonu 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ülasyon yapılan Thread cihazınız için KSA 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örmezseniz enter tuşuna basın.

Yeni bir operasyonel veri kümesi oluşturun, etkin veri kümesi olarak kaydedin ve ileti 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 kaydedin:

> 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 İleti 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ıdır (fe80), üçü de örgü-yerel (fd). EID, adreste ff:fe00 içermeyen örgü-yerel adrestir. Bu örnek çıkışta EID, fd55:cf34:dea5:7994:460:872c:e807:c4ab şeklindedir.

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

2. Ot Daemon'u Başlat

İkinci terminal penceresinde bir 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 hata mesajı alabilirsiniz. Bu normal bir durumdur ve yoksayılabilir.

Bir RCP düğümü için ot-daemon başlatın. Buna Düğüm 2 adını vereceğiz. Günlük çıktı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'

İşlem başarılı olduğunda ayrıntılı modda ot-daemon aşağıdakine benzer çıkışlar 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 arka planda açık ve çalışır durumda bırakın. Buraya başka komut girmeyeceksiniz.

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

Düğüm 2'yi (ot-daemon RCP), henüz herhangi bir Thread ağına atamadık. ot-ctl bu noktada devreye girer. ot-ctl, OpenThread CLI uygulamasıyla aynı CLI'yı kullanır. Bu nedenle, ot-daemon düğümlerini diğer Thread simülasyonundaki cihazlarla aynı şekilde kontrol edebilirsiniz.

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

$ docker exec -it codelab_otsim_ctnr bash

Kapsayıcıya girdikten sonra ot-ctl:

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 kullanacaksınız. Düğüm 2'nin state değerini kontrol edin:

> state
disabled
Done

Belirli bir birleştiriciyle katılımı kısıtlamak için Düğüm 2'nin eui64 kodunu alın:

> eui64
18b4300000000001
Done

Düğüm 1'de (ilk terminal penceresi), komisyoncuyu 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 Düğüm 2'nin ağ arayüzünü bulup ağa katılın:

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Birleşim olarak RCP (Node 2), yüksek güvenlik komisyonu (1. düğüm) ile kimlik doğrulamasını başarıyla gerçekleştirdi ve Thread ağ kimlik bilgilerini aldı.

Şimdi Düğüm 2'yi Thread ağına birleştirin (tekrar üçüncü terminal penceresinde):

> thread start
Done

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

Üçüncü terminalde, şimdi ağa katıldığını doğrulamak için Düğüm 2'deki state kontrol edin. Düğüm 2, iki dakika içinde child ürününden router ürününe geçer:

> state
child
Done
...
> state
router
Done

5. Bağlantıyı doğrulama

Üçüncü terminal penceresinde, Ctrl+D veya exit komutunu kullanarak ot-ctl programından çıkın ve kapsayıcının bash konsoluna dönün. Bu konsoldan EID'yi ping6 komutuyla kullanarak Düğüm 1'i pingleyin. ot-daemon RCP örneği başarıyla Thread ağına bağlanıp bu ağ ile iletişim kuruyorsa ping şu işlemleri gerçekleştirir:

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

Docker container'ından çıktıysanız

bash istemlerini kullanıyorsanız, çalışıp çalışmadığını kontrol etmeniz ve gerekirse yeniden başlatmanız / yeniden girmeniz gerekebilir. --rm seçeneğini kullanmadığınız zamanda oluşturduğunuz Docker kapsayıcıları yine de mevcut olmalıdır.

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 container'larını göstermek için (çalışan ve durdurulan):

$ 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ını görmezseniz 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

--rm seçeneğini yalnızca, kapsayıcıdan çıkıldıktan sonra kapsayıcının silinmesini istiyorsanız kullanın.

Kapsayıcı durdurulursa (docker ps -a içinde listelenir, ancak docker ps değil) yeniden başlatın:

$ docker start -i codelab_otsim_ctnr

Docker kapsayıcısı zaten çalışıyorsa (docker ps içinde listelenir) her terminaldeki kapsayıcıya yeniden bağlanın:

$ docker exec -it codelab_otsim_ctnr bash

"İşleme izin verilmiyor" hataları

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

7. Tebrikler!

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

Bu Codelab'de şunları yapmayı öğrendiniz:

  • OpenThread Simulation Docker kapsayıcısını başlatma ve yönetme
  • Mesaj dizisi ağını simüle etme
  • İleti dizisi düğümlerinin kimliğini doğrulama
  • Bir Thread ağını OpenThread Daemon ile yönetme

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

Bir Docker kapsayıcısında OpenThread Sınır Yönlendiricisi kullanmayı da deneyebilirsiniz.