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

1. Giriş

26b7f4f6b3ea0700.png

Google tarafından kullanıma sunulan OpenThread, Thread ağ protokolünün açık kaynaklı bir uygulamasıdır. Google Nest, bağlı ev için ürünlerin geliştirilmesine hız kazandırmak amacıyla Nest ürünlerinde kullanılan teknolojiyi geliştiricilerin kullanımına kapsamlı bir şekilde sunmak için OpenThread API'yi kullanıma sunmuştur.

İleti dizisi spesifikasyonu, ev uygulamaları için IPv6 tabanlı güvenilir, güvenli ve düşük güçlü kablosuzdan 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 İleti Dizisi ağ katmanını uygular.

Bu Codelab, Docker kullanarak emüle edilmiş cihazlarda Thread ağı simüle etme adımlarında size yol gösterecektir.

Neler öğreneceksiniz?

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

Gerekenler

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

2. Docker'ı kur

Bu Codelab; Linux, Mac OS X veya Windows makinede Docker kullanmak için 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 bulunuyor.

$ docker pull openthread/environment:latest

Tam indirme işleminin birkaç dakika sürebileceğini unutmayın.

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 flag'lere dikkat edin:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0: Bu, kapsayıcı içinde IPv6'yı etkinleştirir
  • --cap-add=net_admin — IP rotaları ekleme gibi ağla ilgili işlemleri gerçekleştirmenize olanak tanıyan NET_ADMIN özelliğini etkinleştirir

Kapsayıcıya bağlandıktan sonra aşağıdakine benzer bir istem görürsünüz:

root@c0f3912a74ff:/#

Yukarıdaki örnekte c0f3912a74ff, Kapsayıcı Kimliğidir. Docker container'ınızın örneği için Container ID, bu Codelab'in istemlerinde gösterilenden farklı olacaktır.

Docker'ı kullanma

Bu Codelab'de, Docker'ı kullanmayla ilgili temel bilgileri bildiğiniz varsayılmaktadır. Codelab'in tamamı için 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 gösteren küçük bir OpenThread uygulaması gösteriyor.

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

Aşağıdaki şekilde, temel İş parçacığı ağı topolojisi açıklanmaktadır. Bu alıştırmada yeşil daire içindeki iki düğümün emülasyonunu yaparız. Bu düğüm, aralarında tek bir bağlantı olan bir Mesaj Dizisi Yöneticisi ve İş Parçacığı'dır.

6e3aa07675f902dc.png

Ağı oluşturma

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

Henüz yapmadıysanız 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ş İş Parçacığı 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ı uygular. IEEE 802.15.4 radyo sürücüsü, UDP'nin üstüne uygulanır (IEEE 802.15.4 çerçeveleri UDP yükleri içinde iletilir).

1 bağımsız değişkeni, emüle edilmiş cihaz için"fabrika tarafından atanan"IEEE EUI-64'ün 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 tanımlayıcısı) için UDP bağlantı noktasına bağlanırken de kullanılır. Bu Codelab'deki emüle edilmiş iş parçacığı cihazının her örneği, farklı bir dosya tanımlayıcısı kullanır.

Not: Emüle edilmiş cihaz için işlem oluşturulurken yalnızca bu Codelab'de belirtilen 1 veya daha yüksek dosya tanımlayıcıları kullanın. 0 dosyasının dosya tanımlayıcısı başka bir amaçla kullanılmak üzere ayrılmıştır.

Yeni bir Operasyonel Veri Kümesi oluşturun ve bunu etkin veri kümesi olarak belirleyin. 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 verin:

> dataset commit active
Done

IPv6 arayüzünü getirin:

> ifconfig up
Done

Mesaj Dizisi 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's 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 = bağlantılı-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'yi tanımlayarak daha sonra kullanmak üzere not edin. Yukarıdaki örnek çıkışta 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 şu anda çalışan Docker container'ında bir 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. Bu, ikinci emülasyon bulunan Thread cihazınızdır:

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.

İş Parçacığı 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 verin:

> dataset commit active
Done

IPv6 arayüzünü getirin:

> ifconfig up
Done

Mesaj Dizisi protokol işlemini başlatın:

> thread start
Done

Cihaz bir Alt Yayıncı olarak başlatılır. Bir İş Parçacığı Alt Öğesi, yalnızca Üst Öğe ile tek seferlik trafik aktaran ve alan bir İleti Dizisi cihazı olan Son Cihaz'a eşdeğerdir.

> state
child
Done

2 dakika içinde, child yerine router durumuna geçiş yapıldığını göreceksiniz. Mesaj Dizisi Yönlendiricisi, trafiği İleti Dizisi cihazları arasında 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 tablosuna bakmaktır.

1. Bağlantıyı kontrol et

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

> rloc16
5800
Done

Düğüm 1'de, yönlendirici tablosunda Düğüm 2's RLOC16'yı kontrol edin. Öncelikle 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ünün 2\R3C'si, örgüye bağlandığını onaylamak için bulunuyor.

2. Düğüm 2'den Düğüm 1'i pingle

Emüle edilmiş iki Thread cihazı arasındaki bağlantıyı doğrulayın. Düğüm 2'de, ping Düğüm 1'e atanan EID için:

> 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 tuşuna basın.

Ağı test etme

Artık emüle edilmiş iki Mesaj Dizisi cihazı arasında başarılı bir şekilde pingleyebileceğinize göre bir düğümü çevrimdışına getirerek örgü ağını test edebilirsiniz.

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

> thread stop
Done

Düğüm 2'ye geçin ve durumu kontrol edin. İki dakika içinde 2. Düğüm, liderin (1. Düğüm) çevrimdışı olduğunu algılar ve 2. Düğümün ağın leader değerine geçtiğini görürsünüz:

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra, Docker bash istemine çıkış yapmadan önce Thread ve Düğüm 2'yi durdurun. Bu alıştırmada kullandığımız ileti dizisi ağ kimlik bilgilerinin sonraki egzersize aktarılmamasını sağlamak için fabrika ayarlarına sıfırlama işlemi yapılır.

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

factoryreset komutunun ardından > istemini geri getirmek için enter tuşuna birkaç kez basmanız gerekebilir. Docker container'ından çıkmayın.

Ayrıca, fabrika ayarlarına sıfırlayın ve 1. Düğümden çıkın:

> factoryreset
>
> exit
root@c0f3912a74ff:/#

Mevcut tüm KSA komutlarını incelemek için OpenThread CLI Referansı bölümüne bakın.

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

Önceki alıştırmada, simüle edilmiş iki cihaz ve doğrulanmış bağlantı bulunan bir Thread ağı kurdunuz. Ancak bu, yalnızca kimliği doğrulanmamış IPv6 bağlantı yerel trafiğinin cihazlar arasında geçişine izin verir. Genel IPv6 trafiğini aralarında (ve ileti dizisi kenarlık yönlendiricisi üzerinden internet) yönlendirmek için düğümlerin kimliği doğrulanmalıdır.

Kimlik doğrulama için bir cihazın Komisyoncu olarak hareket etmesi gerekir. Komisyoncu, yeni İş Parçacığı 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ğlayan yetkilendirmedir.

Bu alıştırmada, daha önce olduğu gibi iki düğümlü topolojiyi kullanacağız. Kimlik doğrulama için Thread Lideri, Komisyoncu olarak görev alır, Thread Yönlendirici de birleştirici olarak hareket eder.

d6a67e8a0d0b5dcb.png

Docker

Kalan egzersizlerdeki her bir Düğüm (termal pencere) 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 zaten açık olan iki bash istemi bulunmalıdır. Bu mümkün değilse Docker Sorun Giderme adımına bakın veya İleti Dizisi Ağını Simüle Et alıştırmasını yeniden yapın.

1. Ağ oluşturun

Düğüm 1'de KSA sürecini 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 belirleyin 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 verin:

> dataset commit active
Done

IPv6 arayüzünü getirin:

> ifconfig up
Done

Mesaj Dizisi 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şlatma

Düğüm 1'deyken Komisyoncu rolünü başlatın:

> commissioner start
Done

J01NME Tamamlayıcı Kimlik Bilgisi'ne sahip herhangi bir Tamamlayıcı'nın (* joker karakterini kullanarak) ağa komisyon vermesine izin verin. Birleştirici, gerçek bir yönetici tarafından yaptırılan bir İş Parçacığı Ağına eklenen bir cihazdır.

> commissioner joiner add * J01NME
Done

3. Birleştirici rolünü başlatma

İkinci bir terminal penceresinde, Docker container'ında yeni bir KSA işlemi oluşturur. Bu, Düğüm 2.

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

Düğüm 2'de, J01NME Birleştirici Kimlik Bilgisi'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ş olarak cihaz (Düğüm 2), Komisyon (Düğüm 1) ile kendi kimliğini başarıyla doğrulamıştır ve İleti Dizisi Ağı kimlik bilgilerini 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

Ağa katıldığını doğrulamak için Düğüm 2'deki state öğesini kontrol edin. İki dakika içinde, 2. Düğüm child - router geçişi yapar:

> 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, 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:/#

factoryreset komutunun ardından > istemini geri getirmek için enter tuşuna birkaç kez basmanız gerekebilir.

5. OpenThread Daemon ile ağı yönetme

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, OpenThread çekirdeğinin hizmet olarak çalıştırılabilmesi için giriş ve çıkış olarak UNIX soketi kullanan bir OpenThread Posix uygulaması modudur. Bir istemci, protokol olarak OpenThread CLI'yı kullanarak yuvaya bağlanarak bu hizmetle iletişim kurabilir.

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

Docker

Bu egzersizdeki her bir Düğüm (termal pencere) 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 zaten açık olan iki bash istemi bulunmalıdır. Burada değilseniz Docker Sorunlarını Giderme adımına bakın.

ot-daemon kullanın

Bu alıştırmada üç terminal penceresi kullanılacaktır:

  1. Simüle edilmiş İleti Dizisi 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 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.

Yeni bir Operasyonel Veri Kümesi oluşturun, bunu etkin veri kümesi olarak belirleyin 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 verin:

> dataset commit active
Done

IPv6 arayüzünü getirin:

> ifconfig up
Done

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

Bir İş Parçacığı ağı simüle et adımında açıklandığı gibi, bir adres bağlantı yerel (fe80), üçü ise örgü yerel (fd) şeklindedir. EID, adreste ff:fe00 içermeyen örgü yerel adresidir. Bu örnek çıktıda EID, fd55:cf34:dea5:7994:460:872c:e807:c4ab şeklindedir.

ipaddr çıkışınızdan 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 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 aktarımı ve makbuz için kullanılır. Cihaz zaten oluşturulmuşsa hata mesajı alabilirsiniz. Bu normaldir ve yoksayılabilir.

RCP düğümü için ot-daemon başlatın. Bu düğüme Düğüm 2 adını veriyoruz. Günlük ayrıntısını görmek ve çalıştığını doğrulamak 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 alana başka komutlar girmeyeceksiniz.

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

Henüz herhangi bir ileti dizisi ağına 2. Düğüm (ot-daemon RCP) yaptırmadık. ot-ctl tanıtımı burada devreye girer. ot-ctl, OpenThread CLI uygulamasıyla aynı KSA'yı kullanır. Bu nedenle, ot-daemon düğümlerini diğer simüle edilmiş İş Parçacığı cihazlarıyla 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 başladıktan sonra ot-ctl işlevini 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 kullanırsı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'nin eui64 numarasını 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ü açıp ağa katılın:

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Bir Katılımcı olarak RCP (Düğüm 2), Komisyon (Düğüm 1) ile kendi kimliğini başarıyla doğrulamıştır ve İleti Dizisi Ağı kimlik bilgilerini almıştır.

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

> thread start
Done

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

Üçüncü terminalde, ağa bağlandığını doğrulamak için Düğüm 2'deki state bölümüne bakın. İki dakika içinde, 2. Düğüm child - router geçişi yapar:

> state
child
Done
...
> state
router
Done

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

Üçüncü terminal penceresinde, Ctrl+D veya exit komutunu kullanarak ot-ctl uygulamasından çıkın ve kapsayıcının bash konsoluna dönün. Bu konsoldan, EID'sini ping6 komutuyla kullanarak Düğüm 1'i pingleyin. ot-daemon RCP örneği, İş Parçacığı ağına başarıyla katılır ve bu ağla 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

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

bash istemleri çalışıyorsa çalışıp çalışmadığını kontrol etmeniz ve gerekirse 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 durdurulan) 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

İki docker ps komutunun çıkışında codelab_otsim_ctnr kapsayıcısını görmüyorsanız bu komutu 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ı durduysa (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 kapsayıcısı zaten çalışıyorsa (docker ps içinde listelenmiştir) her terminaldeki kapsayıcıya yeniden bağlanın:

$ docker exec -it codelab_otsim_ctnr bash

"Çalışmaya izin verilmiyor" hataları

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

7. Tebrikler!

OpenThread öğesini kullanarak ilk İş Parçacığı 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şlatma ve yönetme
  • Mesaj Dizisi ağını simüle etme
  • Mesaj Dizisi düğümlerinin kimliğini doğrulama
  • Bir İş Parçacığı ağını OpenThread Daemon ile yönetme

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

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