Docker'da OpenThread kullanarak Thread 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 yaygın olarak kullanabilmesi için OpenThread'i yayınladı. Burada amaç, bağlantılı evlerin ürünlerinin daha hızlı geliştirilmesini sağlamaktır.

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

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

Neler öğreneceksiniz?

  • OpenThread derleme araç zincirini ayarlama
  • Thread ağı simülasyonu yapma
  • Thread düğümlerinin kimliğini doğrulama
  • OpenThread Daemon ile Thread ağı yönetme

Gerekenler

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

2. Docker'ı kurma

Bu Codelab, Linux, Mac OS X veya Windows makinesinde 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ü alma

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

$ docker pull openthread/environment:latest

Tamamen indirme işleminin 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

--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 için gerekli olan flag'leri not edin:

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

Kapsayıcıya ulaştığınızda şuna 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 için istemlerde gösterilenden farklı olacaktır.

Docker'ı kullanma

Bu Codelab'de Docker kullanımıyla ilgili temel bilgilere sahip olduğunuz varsayılır. Codelab'in tamamı boyunca Docker container'ında kalmanız gerekir.

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

Bu Codelab için kullanacağınız örnek uygulama, temel bir komut satırı arayüzü (KSA) aracılığıyla OpenThread yapılandırma ve yönetim arayüzlerini kullanıma sunan minimal bir OpenThread uygulamasını gösterir.

Bu alıştırmada, emüle edilmiş bir Thread 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 bir Thread ağ topolojisi açıklanmaktadır. Bu alıştırmada, yeşil daire içindeki iki düğüme emülasyon uygulayacağız: bir İş Parçacığı Lideri ve aralarında tek bir bağlantı olan Thread Yönlendirici.

6e3aa07675f902dc.png

Ağı oluşturma

1. 1. Düğüm Başlatma

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'da, ot-cli-ftd ikili programını kullanarak emüle edilmiş bir Thread cihazı için CLI süreci 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 uygulanmıştır (IEEE 802.15.4 çerçeveleri UDP yükleri içinde iletilir).

1 bağımsız değişkeni, "fabrika ayarlarına atanmış" öğenin en az öneme sahip bitlerini temsil eden bir dosya tanımlayıcıdır emüle edilen cihaz için IEEE EUI-64. 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 her örneği farklı bir dosya tanımlayıcısı kullanır.

Not: Taklit edilmiş bir cihaz için işlem üretirken yalnızca bu Codelab'de belirtilen 1 veya daha büyük dosya tanımlayıcılarını kullanın. 0 dosya tanımlayıcısı başka kullanım için ayrıldı.

Yeni bir Operasyonel Veri Kümesi oluşturun ve bunu 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 İ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 Thread arayüzüne atanan IPv6 adreslerini görüntüleyin (çıktı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

İlgili IPv6 adresi türlerine dikkat edin:

  • fd ile başlar = ağ-yerel
  • fe80 ile başlar = link-local

Örgü-yerel adres türleri aşağıdaki alanlarda 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 çıkışınızdaki SIM kimliğini tanımlayın, daha sonra kullanmak üzere not edin. Yukarıdaki örnek çıkışta EID şöyle olur:

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

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

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

$ docker exec -it codelab_otsim_ctnr bash

Bu yeni bash isteminde, CLI işlemini 2 bağımsız değişkeniyle oluşturun. Bu, emülasyonlu ikinci 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örmezseniz enter tuşuna basın.

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 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 Alt öğe olarak başlatır. Thread Child, End Device ile eşdeğerdir. Son Cihaz, tek yayın trafiğini yalnızca üst cihazla ileten ve alan bir Thread cihazıdır.

> state
child
Done

2 dakika içinde child durumundan router durumuna geçiş olduğunu göreceksiniz. Thread Yönlendirici, Thread cihazları arasında trafik yönlendirebilir. Üst öğe olarak da adlandırılır.

> state
router
Done

Ağı doğrulama

Bağlantılı ağı doğrulamanın kolay bir yolu yönlendirici tablosuna bakmaktır.

1. Bağlantıyı kontrol edin

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

> rloc16
5800
Done

Düğüm 1'de, yönlendirici tablosunda Düğüm 2'nin RLOC16'sını 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 0x5800 RLOC'si tabloda bulundu ve ağa bağlı olduğunu onayladı.

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

Emülasyonlu iki Thread cihaz arasındaki bağlantıyı doğrulayın. Düğüm 2'de, Düğüm 1'e atanan SIM kimliği 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 Thread cihazı arasında başarıyla ping atabildiğinize göre bir düğümü çevrimdışı hale getirerek bağlantılı ağı test edin.

Düğüm 1'e geri dönün ve Thread'i durdurun:

> thread stop
Done

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

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra Docker bash istemine geri dönmeden önce Thread'i durdurun ve Düğüm 2'yi fabrika ayarlarına sıfırlayın. 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 işlemi yapılır.

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

factoryreset komutundan sonra > 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 Düğüm 1'den çıkın:

> factoryreset
>
> exit
root@c0f3912a74ff:/#

Mevcut tüm CLI komutlarını keşfetmek için OpenThread CLI Reference (OpenThread CLI Referansı) sayfasına bakın.

4. Devreye alma ile düğümlerin kimliğini doğrulama

Önceki alıştırmada, simüle edilmiş iki cihaz ve doğrulanmış bağlantı içeren bir Thread ağı kurdunuz. Bununla birlikte, bu yalnızca kimliği doğrulanmamış IPv6 yerel bağlantı trafiğinin cihazlar arasında geçişine izin verir. Aralarında küresel IPv6 trafiğini (ve bir Thread sınır yönlendiricisi aracılığıyla internet) yönlendirmek için düğümlerin kimliği doğrulanmalıdır.

Bir cihazın kimlik doğrulaması için yetkili olarak çalışması gerekir. Yetkili, yeni Thread cihazları için şu anda seçilmiş olan kimlik doğrulama sunucusudur ve cihazların ağa katılması için gereken ağ kimlik bilgilerinin sağlanmasını sağlayan yetkilendiricidir.

Bu alıştırmada öncekiyle aynı iki düğüm topolojisini kullanacağız. Kimlik doğrulama için İş Parçacığı Lideri, Yetkili ve Birleştirici olarak İş Parçacığı Yönlendiricisi olarak görev yapar.

d6a67e8a0d0b5dcb.png

Docker

Kalan alıştırmalardaki her Düğüm (terminal penceresi) için OpenThread derlemesiyle Docker container'ını çalıştırdığınızdan emin olun. Önceki alıştırmadan devam ediyorsanız aynı Docker container'ında açık olan iki bash isteminiz olacaktır. Görmezseniz Docker Sorun Giderme adımına bakın veya Thread ağı simülasyonu alıştırmasını yeniden uygulayın.

1. Ağ oluşturun

Düğüm 1'de 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örmezseniz enter tuşuna basın.

Yeni bir Operasyonel Veri Kümesi oluşturun, etkin veri kümesi olarak kaydedin 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 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 İleti Dizisi Lideri olduğunu doğrulayın:

> state
leader
Done

2. Delege rolünü başlatma

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

> commissioner start
Done

J01NME Birleştirici Kimlik Bilgisi'ne sahip herhangi bir Birleştirici'nin ağa komisyon almasına izin verin (* joker karakteri kullanılarak). Birleştirici, gerçek bir yönetici tarafından yaptırılan bir Thread 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üğüm.

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ştirici olarak cihaz (Düğüm 2), Yetkili (Düğüm 1) ile kimliğini başarıyla doğrulamış ve Thread Network kimlik bilgilerini almıştır.

Artık Düğüm 2'nin kimliği doğrulandığına 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. İki dakika içinde, 2. Düğüm child ürününden router ürününe 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 Thread'i durdurun, fabrika ayarlarına sıfırlayın ve emülasyonlu Thread cihazından çıkın:

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

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

5. Ağı OpenThread Daemon ile yönetme

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

ot-daemon, OpenThread çekirdeğinin bir hizmet olarak çalışabilmesi için giriş ve çıkış olarak UNIX yuvası kullanan bir OpenThread Posix uygulaması modudur. İstemciler, protokol olarak OpenThread KSA'yı kullanıp 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 KSA'dır. Bu komutla RCP'yi Thread cihazı tarafından oluşturulan ağa bağlayacağız.

Docker

Bu alıştırmadaki her Düğüm (terminal penceresi) için OpenThread derlemesiyle Docker container'ı çalıştırdığınızdan emin olun. Önceki alıştırmadan devam ediyorsanız aynı Docker container'ında zaten açık olan iki bash isteminiz olmalıdır. Görmüyorsanız Docker Sorun Giderme adımına bakın.

Ot-daemon kullanma

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

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

1. 1. Düğüm Başlatma

İlk terminal penceresinde, emüle edilen Thread cihazınız için 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örmezseniz enter tuşuna basın.

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

İş parçacığı ağını simüle etme adımında açıklandığı gibi, bir adres yerel bağlantı (fe80) ve üç adres bağlantılı yerel ağdır (fd). EID, adreste ff:fe00 içermeyen yerel ağ adresidir. Bu örnek çıkışta SIM kimliği fd55:cf34:dea5:7994:460:872c:e807:c4ab'dir.

ipaddr çıkışınızda, düğümle iletişim kurmak için kullanılacak ilgili SIM kimliğini belirleyin.

2. Ot-arka plan 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 alımı için kullanılır. Cihaz zaten oluşturulmuşsa hata alabilirsiniz. Bu normal bir durumdur ve yoksayılabilir.

Düğüm 2 olarak adlandıracağımız bir RCP düğümü için ot-daemon öğesini başlatın. Günlük çıkışını görebilmek ve çalıştığını onaylayabilmek 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ı moddaki ot-daemon, şuna 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. İçinde başka komut girmeyeceksiniz.

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

Düğüm 2'yi (ot-daemon RCP) henüz herhangi bir Thread ağına yaptırmadık. ot-ctl burada devreye giriyor. ot-ctl, OpenThread CLI uygulamasıyla aynı KSA'yı kullanır. Bu nedenle, ot-daemon düğümü, diğer simüle edilmiş Thread 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:/# /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'sini kontrol edin:

> state
disabled
Done

Belirli birleştiriciyle birleştirmeyi kısıtlamak için Düğüm 2'nin eui64 öğesini alın:

> eui64
18b4300000000001
Done

Düğüm 1'de (ilk terminal penceresi) Commissioner'ı başlatın ve birleştirmeyi 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), Yetkili (Düğüm 1) ile kimliğini başarıyla doğrulamış ve Thread Network kimlik bilgilerini almıştır.

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

> thread start
Done

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

Üçüncü terminalde, 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 ürününden router ürününe geç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, ping6 komutuyla EID'sini kullanarak Düğüm 1'i pingleyin. ot-daemon RCP örneği Thread ağına başarıyla katılır ve ağ ile 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 istemler ise uygulamanın çalışıp çalışmadığını kontrol etmeniz ve gerektiğinde yeniden başlatmanız veya yeniden girmeniz gerekebilir. Oluşturduğunuz ve --rm seçeneğini kullanmadığınız Docker container'ları hâlâ mevcut olmalıdır.

Hangi Docker container'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

docker ps komutunun çıkışında codelab_otsim_ctnr kapsayıcısını görmüyorsanız 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/environment bash

--rm seçeneğini yalnızca, kapsayıcıdan çıktığınızda kapsayıcının silinmesini istiyorsanız kullanın.

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

$ docker start -i codelab_otsim_ctnr

Docker container'ı halihazırda çalışıyorsa (docker ps bölümünde listeleniyorsa) her terminalde container'a yeniden bağlanın:

$ docker exec -it codelab_otsim_ctnr bash

"İşleme izin verilmiyor" hatalar

mknod komutunu kullanarak yeni OpenThread düğümleri oluştururken Operation not permitted hatalarıyla karşılaşırsanı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 Thread ağınızı başarıyla simüle ettiniz. Mükemmel!

Bu Codelab'de şunları öğrendiniz:

  • OpenThread Simulation Docker container'ını başlatma ve yönetme
  • Thread ağını simüle edin
  • Thread düğümlerinin kimliğini doğrulama
  • OpenThread Daemon ile Thread ağı yönetme

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

İsterseniz bir Docker container'ında OpenThread Sınır Yönlendirici kullanmayı deneyebilirsiniz.