OpenThread ile 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, simüle edilen cihazlarda bir İleti Dizisi ağı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

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

2. Derleme sistemini ayarlama

Git

Bu Codelab'i tamamlamak için Git gerekiyor. Devam etmeden önce uygulamayı indirip yükleyin.

Uzantıyı yükledikten sonra, OpenThread'i indirmek ve derlemek için özel işletim sisteminize yönelik talimatları uygulayın.

Mac OS X için XCode

XCode, Mac OS X'te OpenThreader yüklemek ve derlemek için gereklidir.

XCode yüklendikten sonra XCode Komut Satırı Araçlarını yükleyin:

$ xcode-select --install

Linux / Mac OS X üzerinde geliştirme

Bu yükleme talimatları Ubuntu Server 14.04 LTS ve Mac OS X Sierra 10.12.6 üzerinde test edilmiştir.

OpenThread hizmetini yükleyin. bootstrap komutları, araç zincirinin yüklendiğinden ve ortamın doğru şekilde yapılandırıldığından emin olur:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap
$ ./bootstrap

Windows kullanma

Windows'u tercih ediyorsanız bu Codelab'in Docker sürümünü denemenizi öneririz.

3. OpenThread uygulamaları derleme

Yükleme işlemi tamamlandıktan sonra, örnek OpenThread uygulamasını derleyin. Bu Codelab için simülasyon örneğini kullanıyoruz.

$ cd ~/src/openthread
$ make -f examples/Makefile-simulation

Şimdi OpenThread Daemon'u oluşturun:

$ cd ~/src/openthread
$ make -f src/posix/Makefile-posix DAEMON=1

4. İ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, simüle edilmiş bir İş Parçacıklı cihazı başka bir simüle edilmiş İş Parçacığından pinglemek için gereken minimum adımları tamamlamanızı sağlar.

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

6e3aa07675f902dc.png

Düğüm pingleme

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

openthread dizinine gidin ve ot-cli-ftd ikili programını kullanarak simüle edilmiş bir iş parçacığı cihazının KSA sürecini oluşturun.

$ cd ~/src/openthread
$ ./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'in üstünde simüle edilmiş 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, simüle edilen cihaz için "fabrika tarafından atanan" IEEE EUI-64'ün en düşük öneme sahip 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 simüle edilmiş bir iş parçacığı cihazının her örneği farklı bir dosya tanımlayıcısı kullanır.

Not: Simüle edilmiş bir cihaz için işlem oluştururken, bu Codelab'de belirtildiği gibi yalnızca 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çıp openthread dizinine gidin ve KSA sürecini oluşturun. Bu, ikinci simüle edilmiş İş parçacığı cihazınızdır:

$ cd ~/src/openthread
$ ./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 | LQI In | LQI Out | Age | Extended MAC  |
+----+--------+----------+----------+-------+---------+-----+------------------+
| 20 | 0x5000 |       63 |         0 |     0 |      0 |   0 | 96da92ea13534f3b |
| 22 | 0x5800 |       63 |         0 |     3 |      3 |  23 | 5a4eb647eb6bc66c |

Düğüm 1'in RLOC'si 0xa800, tabloda bulunan ve ağa bağlanmakta olduğunu doğrular.

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

Simüle edilmiş 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 simüle edilmiş iki iş parçacığı 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, İş Parçacığını durdurun ve uygulamadan önce 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

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

> factoryreset
>
> exit

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

5. 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

1. Ağ oluşturma

Önceki alıştırmadan devam ediyorsa, zaten iki terminal penceresi açık olmalıdır. Açık değilse, iki cihazın da açık ve kullanıma hazır olduğundan emin olun. Bunlardan biri, Düğüm 1, diğeri ise Düğüm 2 olarak işlev görecektir.

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

$ cd ~/src/openthread
$ ./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 yeni bir CLI işlemi oluşturun. Bu, 2. Düğümdür.

$ cd ~/src/openthread
$ ./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 simüle edilmiş İş Parçacık cihazından çıkın:

> thread stop
Done
> factoryreset
>
> exit

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

6. 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.

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

Önceki alıştırmadan devam ediyorsanız zaten iki terminal penceresi açık olmalıdır. Bu alıştırma için üç terminal pencerenizin olduğundan emin olun.

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

İlk terminal penceresinde simüle edilmiş iş parçacığı cihazınızın KSA sürecini oluşturun:

$ cd ~/src/openthread
$ ./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, 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:

$ cd ~/src/openthread
$ ./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 penceresinde ot-ctl işlemini başlatın:

$ ./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

Düğüm 2'de (üçüncü terminal penceresi) 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ıkları ağına ekleyin:

> 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. Bağlantıyı doğrulayın

Ctrl+D tuşlarını kullanarak ve ana makinenizin komut satırında Düğüm 1'i pingleyerek, EID'sini ping6 komutuyla kullanarak ot-ctl ürününden çıkın. ot-daemon RCP örneği başarıyla birleşip İş Parçacık ağıyla iletişim kurarsa ping başarılı olur:

$ 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

7. Tebrikler!

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

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

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

Daha fazla bilgi edinmek istiyorsanız şu referansları inceleyebilirsiniz: