Docker'da OpenThread kullanarak bir Thread ağı 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, bağlantılı ev ürünlerinin geliştirilmesini hızlandırmak amacıyla Nest ürünlerinde kullanılan teknolojinin geliştiricilerin kullanımına yaygın şekilde sunulması için OpenThread'i kullanıma sundu.

İleti dizisi spesifikasyonu, ev uygulamaları için IPv6 tabanlı, güvenilir ve düşük güçlü bir kablosuz cihazdan cihaza iletişim protokolü tanımlar. OpenThread, MAC güvenliği, Mesh Link Kurulumu ve Örgü Yönlendirme ile IPv6, 6LoWPAN, IEEE 802.15.4 dahil tüm İş Parçacığı ağ iletişimi katmanlarını uygular.

Bu Codelab, emüle edilmiş cihazlarda Docker kullanarak bir İş Parçacığını simüle etme işleminde size yol gösterir.

Neler öğreneceksiniz?

  • OpenThread derleme araç zincirini ayarlama
  • İş parçacığı ağını simüle etme
  • İş parçacığı düğümlerinin kimliğini doğrulama
  • OpenThread Daemon ile bir Thread ağı yönetme

Gerekenler

  • Docker
  • Temel Linux bilgisi, ağ yönlendirme

2. Docker'ı kurma

Bu Codelab uygulaması; Linux, Mac OS X veya Windows makinede Docker kullanmak üzere tasarlanmıştır. Linux önerilen ortamdır.

Docker'ı yükle

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

Docker görüntüsünü alma

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

$ docker pull openthread/codelab_otsim:latest

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

Bir terminal penceresinde, görüntüden bir Docker container'ı başlatın ve bash container'ına bağlayı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

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

  • --sysctl net.ipv6.conf.all.disable_ipv6=0: Bu, container içinde IPv6'yı etkinleştirir
  • --cap-add=net_admin — IP rotaları ekleme gibi ağla ilgili işlemler yürütmenizi sağlayan NET_ADMIN özelliğini etkinleştirir

Kapsayıcıya geldiğinizde 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ı olacaktır.

Docker'ı kullanma

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

3. İleti Dizisi ağını simüle etme

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

Bu alıştırma, emüle edilen bir İş Parçacığının başka bir emüle edilmiş İş Parçacığından pinglenmesi için gereken minimum adımlarda size yol gösterir.

Aşağıdaki şekilde, temel bir İş Parçacık ağı topolojisi açıklanmaktadır. Bu alıştırma için yeşil daire içindeki iki düğümü, bir iş parçacığı Lideri ve iş parçacığı Yönlendiricisi arasında tek bir bağlantı oluşturarak emüle edeceğiz.

6e3aa07675f902dc.png

Ağı oluşturma

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

Henüz yapmadıysanız bir terminal penceresinde Docker Docker container'ı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/codelab_otsim bash

Docker container'ında openthread dizinine gidin ve ot-cli-ftd ikili programını kullanarak emüle edilmiş bir İş parçacığı cihazı için KSA sürecini oluşturun.

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

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

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

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

Not: Emüle edilen bir cihaza 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ı diğer kullanım için ayrılmıştır.

Yeni bir Operasyonel Veri Kümesi oluşturun ve bunu etkin küme olarak kaydedin. Operasyonel Veri Kümesi, oluşturduğunuz İş Parçacık 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

İleti Dizisi protokol işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın İleti 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 adresi türlerine dikkat edin:

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

Örgü yerel adres türleri daha ayrıntılı olarak sınıflandırılır:

  • ff:fe00 İçerir = Yönlendirici Konumlandırıcı (RLOC)
  • ff:fe00 içermiyor = Uç Nokta Tanımlayıcısı (EID)

Konsol çıkışınızda EID'yi tanımlayın ve bunu daha sonra kullanmak üzere not edin. Yukarıdaki örnek çıkışta EID şu şekildedir:

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

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

Yeni bir terminal açın ve halihazırda çalışan Docker container'ında Düğüm 2 için kullanılacak bir bash kabuğu yürütün.

$ docker exec -it codelab_otsim_ctnr bash

Bu yeni bash isteminde openthread dizinine gidin ve KSA sürecini oluşturun. Bu, emüle edilen ikinci İş Parçacık cihazınızdır:

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

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

Düğüm 1'in Operasyonel Veri Kümesi ile aynı değerleri kullanarak İş Parçacığı 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 kaydedin:

> dataset commit active
Done

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

> ifconfig up
Done

İleti Dizisi protokol işlemini başlatın:

> thread start
Done

Cihaz, Çocuk olarak başlatılır. İş Parçası Alt Yayıncısı, bir Son Cihaz'a eşdeğerdir. Son Cihaz, tek tip trafiği yalnızca Üst cihazla aktaran ve alan bir Aygıt cihazıdır.

> state
child
Done

2 dakika içinde child olan durum anahtarını router olarak değiştirdiğinizi görürsünüz. İş Parçacığı Yönlendiricisi, trafiği İş Parçacıkları arasında yönlendirebilir. Üst Yayıncı 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'yı edinin. RLOC16, cihazın RLOC IPv6 adresinin son 16 bitidir.

> rloc16
5800
Done

Düğüm 1'de, düğüm 2'nin RLOC16 için yönlendirici tablosunu kontrol edin. Düğüm 2'nin önce 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 0x5800 RLOC'si, tabloda ağa bağlandığından emin olur.

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

Öykünülmüş iki İş Parçacık cihazı arasındaki bağlantıyı doğrulayın. Düğüm 2'de, Düğüm 1'e atanan EID: ping

> 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 İş Parçacık cihazı arasında başarıyla ping atabileceğinize göre bir düğümü çevrimdışına alarak örgü ağını test edin.

Düğüm 1'e geri dönüp İş Parçacığını durdurun:

> thread stop
Done

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

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra, Docker bash isteminden çıkmadan önce İş Parçacığını durdurun ve Düğüm 2'yi fabrika ayarlarına sıfırlayın. Bu alıştırmada kullandığımız İleti dizisi ağ kimlik bilgilerinin bir sonraki alıştırmaya aktarılmaması için fabrika ayarlarına sıfırlama yapılır.

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

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

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

> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

4. Düğümleri Komisyonla doğrulama

Önceki alıştırmada, iki simüle edilmiş cihaz ve doğrulanmış bağlantı içeren bir İleti Dizisi ağı oluşturuyordunuz. Ancak bu yalnızca, kimliği doğrulanmamış IPv6 bağlantı yerel trafiğinin cihazlar arasında geçmesine izin verir. Bunların arasındaki (ve internetin iş parçacığı sınır yönlendiricisi üzerinden) IPv6 trafiğini yönlendirmek için düğümlerin kimliği doğrulanmalıdır.

Kimlik doğrulaması için, bir cihazın Komiser görevi görmesi gerekir. Komisyoner, yeni İş Parçacıkları cihazları için o anda seçilmiş olan kimlik doğrulama sunucusu ve cihazların ağa katılması için gereken ağ kimlik bilgilerini sağlama yetkisine sahiptir.

Bu alıştırmada öncekiyle aynı iki düğümlü topolojiyi kullanacağız. Kimlik doğrulaması için İş Parçacığı Lideri Komisyon üyesi olarak, İş Parçacığı Yönlendiricisi ise Birleştirme işlevi görür.

d6a67e8a0d0b5dcb.png

Docker

Kalan alıştırmalardaki her bir Düğüm (terminal penceresi) için Docker container'ını OpenThread derlemesiyle çalıştırdığınızdan emin olun. Önceki alıştırmadan devam ediyorsanız aynı Docker container'ında iki bash isteminizin zaten açık olması gerekir. Aksi takdirde, Docker Sorunlarını Giderme adımına bakın veya Simulate a Thread ağ alıştırmasını yeniden yapın.

1. Ağ oluşturma

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

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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, bunu etkin küme olarak kaydedin ve İş Parçacığı 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

İleti Dizisi protokol işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın İleti Dizisi Lideri olduğunu doğrulayın:

> state
leader
Done

2. Komisyon rolünü başlat

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

> commissioner start
Done

J01NME Birleştirici Kimlik Bilgisi ile herhangi bir Birleştiricinin (* joker karakterini kullanarak) ağa komisyon vermesine izin verin. Birleştirici, gerçek bir yönetici tarafından görevlendirilen bir İş Parçacık 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 CLI işlemi oluşturun. Bu, 2. Düğümdür.

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

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

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Birleştirici olarak, cihaz (Düğüm 2) kendini Komisyon (Düğüm 1) ile başarılı bir şekilde doğrulamış ve İş Parçacığı Ağı kimlik bilgilerini almıştır.

Artık Node 2'nin kimlik doğrulamasından geçtiğine göre Thread'i başlatın:

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

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

Bir sonraki alıştırmaya hazırlanmak için yapılandırmayı sıfırlayın. Her Düğümde İş Parçacığını durdurun, fabrika ayarlarına sıfırlayın ve emüle edilmiş İş Parçacığı cihazından çıkın:

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

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

5. OpenThread Daemon ile ağı yönetme

Bu alıştırma için bir CLI örneğini (tek bir yerleşik SoC İş Parçacığı cihazı) ve bir Radyo Ortak İşlemci (RCP) örneğini simüle edeceğiz.

ot-daemon, OpenThread Core'un bir hizmet olarak çalışabilmesi için giriş ve çıkış olarak UNIX soketi kullanan bir OpenThread Posix uygulaması modudur. İstemci, protokol olarak OpenThread CLI kullanarak yuvaya 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 komut satırı arayüzüdür. Bunu kullanarak, RCP'yi İş Parçacık cihazı tarafından oluşturulan ağa bağlarız.

Docker

Bu alıştırmadaki her Düğüm (terminal pencere) için, Docker container'ını OpenThread derlemesiyle çalıştırdığınızdan emin olun. Önceki alıştırmadan devam ediyorsanız aynı Docker container'ında zaten iki bash istemi açık olmalıdır. Aksi takdirde Docker Sorun Giderme adımını inceleyin.

Ot-daemon kullan

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

  1. Simüle edilmiş İş parçacığı cihazının KSA ö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ş İş parçacığı cihazınıza ilişkin KSA sürecini oluşturun:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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, bunu etkin küme olarak kaydedin ve İş Parçacığı 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

İleti Dizisi 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
>

Bir İleti Dizisi ağını simüle etme adımında açıklandığı gibi, adreslerden biri link-local (fe80), üçü de mesh-local'dir (fd). EID, adreste ff:fe00 içermeyen örgü-yerel adrestir. Bu örnek çıkışta EID, fd55:cf34:dea5:7994:460:872c:e807:c4ab değeridir.

Düğümle iletişim kurmak için kullanılacak olan ipaddr çıktınızdan belirli EID'yi belirleyin.

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 makbuzu için kullanılır. Cihaz zaten oluşturulmuşsa bir hata alabilirsiniz; bu normal bir durumdur ve yoksayılabilir.

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

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

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

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 açık ve arka planda çalışır durumda bırakın. Uygulamaya başka komut giremezsiniz.

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

Düğüm 2'yi (ot-daemon RCP) henüz hiçbir İş Parçacısı ağına sunmadık. ot-ctl burada devreye giriyor. ot-ctl, OpenThread CLI uygulamasıyla aynı CLI'yi kullanır. Dolayısıyla, ot-daemon düğümlerini diğer simüle edilmiş İş Parçacık 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ıya girdikten sonra, ot-ctl işlemini başlatın:

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

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

> state
disabled
Done

Belirli Birleştiriciye katılmayı kısıtlamak için Düğüm 2'nin eui64 düğümünü alın:

> eui64
18b4300000000001
Done

Düğüm 1'de (ilk terminal penceresi), Komisyon'u başlatın ve katılımı 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çın ve ağa katılın:

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Birleştirici olarak, RCP (Düğüm 2) Komisyon (Düğüm 1) ile başarılı bir şekilde kendi kimliğini doğrulamış ve Mesaj Dizisi Ağı kimlik bilgilerini almıştır.

Şimdi 2. Düğüm'ü İş Parçacık ağına katılın (üçüncü terminal penceresinde tekrar):

> thread start
Done

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

Üçüncü terminalde, düğümün şimdi ağa katıldığını doğrulamak için Düğüm 2'deki state öğesini kontrol edin. Düğüm 2, iki dakika içinde child bölgesinden router bölgesine geçiş yapar:

> state
child
Done
...
> state
router
Done

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

Üçüncü terminal penceresinde, ot-ctl'dan çıkıp kapsayıcının bash konsoluna dönmek için Ctrl+D tuşlarına basın. Bu konsoldan, Düğüm 1'i, EID'sini ping6 komutuyla kullanarak pingleyin. ot-daemon RCP örneği başarıyla birleşip İş Parçacık ağıyla 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 Sorun Giderme

Docker container'dan çıkış yaptıysanız

bash istendiğinde, çalışıp çalışmadığını kontrol etmeniz ve gerekirse yeniden başlatmanız gerekebilir.

Hangi Docker container'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 container'larını (hem çalışan hem de durdurulmuş olan) 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

docker ps komutunun çıkışında codelab_otsim_ctnr container'ını görmüyorsanız 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/codelab_otsim bash

Kapsayıcı durdurulursa (docker ps -a listesinde listelenir ancak docker ps listelenmez) yeniden başlatın:

$ docker start -i codelab_otsim_ctnr

Docker container zaten çalışıyorsa (docker ps içinde listelenmiştir) her terminalde container'a yeniden bağlanın:

$ docker exec -it codelab_otsim_ctnr bash

"İşleme izin verilmiyor" hataları

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

7. Tebrikler!

OpenThread kullanarak ilk İş Parçacığı ağını başarıyla simüle ettiniz. Mükemmel!

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

  • OpenThread Simüle Docker container'ını başlatma ve yönetme
  • İleti Dizisi ağını simüle etme
  • İş Parçacığı düğümlerinin kimliğini doğrulama
  • OpenThread Daemon ile bir Thread ağı yönetme

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

Alternatif olarak, OpenThread Border Router in a Docker container'ı (OpenContainer Kenarlık Yönlendiricisi) kullanmayı da deneyebilirsiniz.