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 kullanımına sunarak bağlantılı ev ürünlerinin geliştirilmesini hızlandırmak için OpenThread'i yayınladı.

Thread spesifikasyonu, ev uygulamaları için IPv6 tabanlı güvenilir, güvenli ve düşük güç tüketen kablosuz cihazdan cihaza iletişim protokolünü tanımlar. OpenThread, IPv6, 6LoWPAN, MAC güvenliği ile IEEE 802.15.4, Mesh Link Establishment ve Mesh Routing dahil olmak üzere tüm Thread ağ katmanlarını uygular.

Bu Codelab'de, Docker kullanarak emüle edilmiş cihazlarda Thread ağı simülasyonu yapma adımları açıklanmaktadır.

Neler öğreneceksiniz?

  • OpenThread derleme araç zinciri nasıl ayarlanır?
  • Thread ağı simülasyonu yapma
  • Thread düğümlerinin kimliği nasıl doğrulanır?
  • OpenThread Daemon ile Thread ağını yönetme

İhtiyacınız olanlar

  • Docker
  • Linux ve ağ yönlendirme hakkında temel bilgiler

2. Docker'ı ayarlama

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

Docker'ı yükle

Seçtiğiniz işletim sistemine Docker'ı yükleyin.

Docker görüntüsünü çekme

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

$ docker pull openthread/environment:latest

Tamamen indirilmesi birkaç dakika sürebilir.

Bir terminal penceresinde, görüntüden bir Docker kapsayıcısı 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 işaretlere dikkat edin:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0: Kapsayıcıda IPv6'yı etkinleştirir.
  • --cap-add=net_admin: IP rotaları ekleme gibi ağla ilgili işlemleri yürütmenize olanak tanıyan NET_ADMIN özelliğini etkinleştirir.

Kapsayıcıya girdikten sonra şuna benzer bir istem görmeniz gerekir:

root@c0f3912a74ff:/#

Yukarıdaki örnekte c0f3912a74ff, kapsayıcı kimliğidir. Docker kapsayıcınızın örneğinin kapsayıcı kimliği, bu Codelab'deki istemlerde gösterilenden farklı olacaktır.

Docker'ı kullanma

Bu Codelab'de Docker'ın temel kullanımını bildiğiniz varsayılır. Codelab boyunca Docker kapsayıcısında kalmanız gerekir.

3. Thread ağı simülasyonu

Bu Codelab'de kullanacağınız örnek uygulama, OpenThread yapılandırma ve yönetim arayüzlerini temel bir komut satırı arayüzü (CLI) üzerinden kullanıma sunan minimum düzeyde bir OpenThread uygulamasını gösterir.

Bu alıştırma, bir emüle edilmiş Thread cihazından başka bir emüle edilmiş Thread cihazına ping göndermek için gereken minimum adımları gösterir.

Aşağıdaki şekilde temel bir Thread ağ topolojisi açıklanmaktadır. Bu alıştırmada, yeşil daire içindeki iki düğümü (aralarında tek bağlantı olan bir Thread lideri ve Thread yönlendirici) taklit edeceğiz.

6e3aa07675f902dc.png

Ağı oluşturma

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

Henüz yapmadıysanız bir terminal penceresinde Docker'ı 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 kapsayıcısında, ot-cli-ftd ikili programını kullanarak emüle edilmiş bir Thread cihazı için 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.

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

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

Not: Emüle edilmiş 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ını kullanın. 0 dosya tanımlayıcısı başka bir kullanım için ayrılmıştır.

Yeni bir operasyonel veri kümesi oluşturun ve bunu etkin veri kümesi olarak kaydedin. İşletim 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

Start Thread protokol işlemi:

> thread start
Done

Birkaç saniye bekleyin ve cihazın Thread lideri olduğunu doğrulayın. Lider, yönlendirici kimliği atamasını yönetmekten sorumlu cihazdır.

> state
leader
Done

1. düğümün Thread arayüzüne atanmış IPv6 adreslerini görüntüleyin (çıktı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ürlerini not edin:

  • fd = mesh-local ile başlar
  • fe80 ile başlar = bağlantı yerel

Ağa özgü adres türleri daha ayrıntılı olarak sınıflandırılır:

  • ff:fe00 = Yönlendirici Bulucu (RLOC) içerir
  • ff:fe00 = Uç nokta tanımlayıcısı (EID) içermiyor

Konsol çıkışınızda EID'yi belirleyin ve daha sonra kullanmak üzere not edin. Yukarıdaki örnek çıktıda EID:

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

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

Yeni bir terminal açın ve Node 2 için kullanılacak, şu anda çalışan Docker kapsayıcısında bir bash kabuğu yürütün.

$ docker exec -it codelab_otsim_ctnr bash

Bu yeni bash isteminde, 2 bağımsız değişkeniyle CLI sürecini başlatın. Bu, ikinci emüle edilmiş 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örmüyorsanız enter tuşuna basın.

İş parçacığı ağı anahtarını ve PAN kimliğini, 1. düğümün operasyonel veri kümesiyle 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

Start Thread protokol işlemi:

> thread start
Done

Cihaz, kendisini çocuk cihazı olarak başlatır. Thread Child, yalnızca bir Parent cihazla tek noktaya yayın trafiği ileten ve alan bir Thread cihazı olan End Device'a eşdeğerdir.

> state
child
Done

2 dakika içinde durumun child'dan router'ya değiştiğini görürsünüz. Thread yönlendirici, Thread cihazları arasındaki trafiği 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

2. düğümde RLOC16'yı alın. RLOC16, cihazın RLOC IPv6 adresinin son 16 bitidir.

> rloc16
5800
Done

1. düğümde, 2. düğümün RLOC16'sı için yönlendirici tablosunu kontrol edin. 2. düğümün ö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 |

0x5800 cihazının 2. düğüm RLOC'u tabloda bulunarak ağa bağlı olduğu onaylanır.

2. Node 2'den Node 1'e ping atma

İki taklit edilmiş Thread cihazı arasındaki bağlantıyı doğrulayın. 2. düğümde, ping 1. düğüme 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

> CLI istemine dönmek için enter tuşuna basın.

Ağı test etme

Artık iki emüle edilmiş Thread cihazı arasında başarılı bir şekilde ping işlemi gerçekleştirebildiğinize göre bir düğümü çevrimdışı duruma getirerek bağlantılı ağı test edin.

1. düğüme dönün ve iş parçacığını durdurun:

> thread stop
Done

2. düğüme 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 olarak geçiş yaptığını görürsünüz:

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra Thread'i durdurun ve Docker bash istemine geri dönmeden önce Node 2'yi fabrika ayarlarına sıfırlayın. Fabrika ayarlarına sıfırlama işlemi, bu alıştırmada kullandığımız Thread ağı kimlik bilgilerinin bir sonraki alıştırmaya aktarılmamasını sağlamak için 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 kapsayıcısından çıkmayın.

Ayrıca, Node 1'i fabrika ayarlarına sıfırlayın ve çıkın:

> factoryreset
>
> exit
root@c0f3912a74ff:/#

Kullanılabilir tüm KSA komutlarını incelemek için OpenThread KSA Referansı'na bakın.

4. Düğümleri devreye alma ile kimlik doğrulama

Önceki alıştırmada, iki simüle edilmiş cihazla bir Thread ağı kurmuş ve bağlantıyı doğrulamıştınız. Ancak bu yalnızca kimliği doğrulanmamış IPv6 bağlantı yerel trafiğinin cihazlar arasında geçmesine izin verir. Global IPv6 trafiğini aralarında (ve Thread sınır yönlendiricisi aracılığıyla internette) yönlendirmek için düğümlerin kimliği doğrulanmalıdır.

Kimlik doğrulaması yapmak için bir cihazın Komisyon Üyesi olarak hareket etmesi gerekir. Yetkilendirilmiş kullanıcı, yeni Thread cihazları için şu anda seçilmiş kimlik doğrulama sunucusudur ve cihazların ağa katılması için gereken ağ kimlik bilgilerini sağlayan yetkilidir.

Bu alıştırmada, daha önce kullandığımız iki düğümlü topolojiyi kullanacağız. Kimlik doğrulama için Thread lideri, yetkili olarak; Thread yönlendirici ise katılımcı olarak görev yapar.

d6a67e8a0d0b5dcb.png

Docker

Kalan alıştırmalarda her bir düğüm (terminal penceresi) için Docker container'ı OpenThread derlemesiyle çalıştırdığınızdan emin olun. Önceki alıştırmadan devam ediyorsanız aynı Docker kapsayıcısında iki bash istemi açık olmalıdır. Aksi takdirde Docker Sorun Giderme adımına bakın veya Thread ağı simülasyonu alıştırmasını tekrar yapın.

1. Ağ oluşturun

1. düğümde 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örmüyorsanız enter tuşuna basın.

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

Start Thread protokol işlemi:

> thread start
Done

Birkaç saniye bekleyin ve cihazın Thread lideri olduğunu doğrulayın:

> state
leader
Done

2. Komisyon üyesi rolünü başlatma

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

> commissioner start
Done

* joker karakterini kullanarak J01NME Katılımcı Kimlik Bilgisi'ne sahip tüm katılımcıların ağa katılmasına izin verin. Katılımcı, bir insan yönetici tarafından görevlendirilmiş 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 kapsayıcısında yeni bir CLI işlemi oluşturun. Bu, 2. düğümdür.

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

2. düğümde, J01NME Joiner Credential'ı kullanarak Joiner rolünü etkinleştirin.

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

Katılımcı olarak cihaz (2. düğüm), Komisyoner (1. düğüm) ile kimliğini başarıyla doğruladı ve Thread ağı kimlik bilgilerini aldı.

2. düğümün kimliği doğrulandığına göre Thread'i başlatın:

> thread start
Done

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

Node 2'deki state öğesini kontrol ederek ağa katıldığını doğrulayın. İki dakika içinde 2. düğüm child'dan router'ye geçer:

> state
child
Done
...
> state
router
Done

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

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ırlama işlemi yapın ve emüle edilmiş 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. OpenThread Daemon ile ağı yönetme

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

ot-daemon, OpenThread çekirdeğinin hizmet olarak çalışabilmesi için giriş ve çıkış olarak UNIX soketi kullanan OpenThread Posix uygulamasının bir modudur. Bir istemci, 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 CLI'dır. Bunu kullanarak RCP'yi Thread cihazı tarafından oluşturulan ağa bağlayacağız.

Docker

Bu alıştırmadaki her bir düğüm (terminal penceresi) için Docker kapsayıcısını OpenThread derlemesiyle çalıştırdığınızdan emin olun. Önceki alıştırmadan devam ediyorsanız aynı Docker kapsayıcısında iki bash istemi açık olmalıdır. Aksi takdirde Docker Sorun Giderme adımına bakın.

ot-daemon'u kullanma

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

  1. Simüle edilmiş Thread cihazının (Node 1) KSA örneği
  2. ot-daemon süreci
  3. ot-ctl CLI örneği

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

İlk terminal penceresinde, emüle edilmiş Thread cihazınız için KSA sürecini başlatın:

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

Start Thread protokol işlemi:

> thread start
Done

1. düğümün Thread arayüzüne atanmış 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
>

Simüle edilmiş bir Thread ağı adımında açıklandığı gibi, bir adres bağlantı yerel (fe80), üç adres ise ağ yereldir (fd). EID, adresinde ff:fe00 içermeyen ağ yerel adresidir. Bu örnek çıktıda EID fd55:cf34:dea5:7994:460:872c:e807:c4ab'dir.

ipaddr çıktınızdaki düğümle iletişim kurmak için kullanılacak EID'yi belirleyin.

2. ot-daemon'u başlatma

İ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 daha önce oluşturulduysa hata alabilirsiniz. Bu normal bir durumdur ve yoksayılabilir.

Node 2 olarak adlandıracağımız bir RCP düğümü için ot-daemon'ı başlatın. Günlük çıktısını görebilmek ve çalıştığını onaylayabilmek için -v verbose 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ı moddaki ot-daemon, aşağıdakine benzer bir çıktı 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 bırakın ve arka planda çalışmaya devam edin. Bu pencereye başka komut girmeyeceksiniz.

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

Node 2'yi (ot-daemon RCP) henüz herhangi bir Thread ağına atamadık. Bu noktada ot-ctl devreye girer. ot-ctl, OpenThread CLI uygulamasıyla aynı CLI'yı kullanır. Bu nedenle, ot-daemon düğümlerini diğer simüle edilmiş Thread 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 girdikten sonra ot-ctl'yı başlatın:

root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-ctl
>

Bu üçüncü terminal penceresinde, ikinci terminal penceresinde ot-daemon ile başlattığınız Node 2'yi (RCP düğümü) yönetmek için ot-ctl komutunu kullanacaksınız. 2. düğümün state değerini kontrol edin:

> state
disabled
Done

Katılma işlemini belirli bir katılımcıyla kısıtlamak için Node 2'nin eui64 değerini alın:

> eui64
18b4300000000001
Done

1. düğümde (ilk terminal penceresi) Komisyon Üyesi'ni başlatın ve katılımı yalnızca bu eui64 ile sınırlayın:

> commissioner start
Done
> commissioner joiner add 18b4300000000001 J01NME
Done

Üçüncü terminal penceresinde, 2. düğümün 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

Katılımcı olarak RCP (Node 2), Komisyon Üyesi (Node 1) ile kimliğini başarıyla doğrulamış ve Thread ağı kimlik bilgilerini almıştır.

Şimdi Node 2'yi Thread ağına bağlayın (yine üçüncü terminal penceresinde):

> thread start
Done

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

Üçüncü terminalde, Node 2'nin ağa katıldığını doğrulamak için state işaretini kontrol edin. İki dakika içinde 2. düğüm child'dan router'ye geçer:

> state
child
Done
...
> state
router
Done

5. Bağlantıyı doğrulama

Üçüncü terminal penceresinde ot-ctl uygulamasını Ctrl+D veya exit komutunu kullanarak kapatın ve kapsayıcının bash konsoluna dönün. Bu konsoldan, ping6 komutuyla EID'sini kullanarak 1. düğüme ping gönderin. 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 ile ilgili sorunları giderme

Docker kapsayıcısından çıktıysanız

bash istemleri çalıştırıyorsanız çalışıp çalışmadığını kontrol etmeniz ve gerektiğinde yeniden başlatmanız / girmeniz gerekebilir. --rm seçeneğini kullanmadan oluşturduğunuz Docker kapsayıcıları hala 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ı (hem çalışan hem de 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 komutlarından birinin çıkışında container codelab_otsim_ctnr ifadesini görmüyorsanız 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

Yalnızca kapsayıcıdan çıkıldığında kapsayıcının silinmesini istiyorsanız --rm seçeneğini kullanın.

Kapsayıcı durdurulmuşsa (docker ps -a içinde listelenir ancak docker ps içinde listelenmez) yeniden başlatın:

$ docker start -i codelab_otsim_ctnr

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

$ docker exec -it codelab_otsim_ctnr bash

"İşleme izin verilmiyor" hataları

Operation not permitted komutunu kullanarak yeni OpenThread düğümleri oluştururken mknod hatalarıyla karşılaşırsanız Docker'ı bu Codelab'de verilen komutlara göre kök kullanıcı olarak çalıştırdığınızdan emin olun. Bu Codelab'de Docker'ın kök kullanıcı olmadan modda çalıştırılması desteklenmez.

7. Tebrikler!

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

Bu Codelab'de şunları öğrendiniz:

  • OpenThread Simulation Docker kapsayıcısını başlatma ve yönetme
  • Thread ağı simülasyonu
  • Thread düğümlerinin kimliğini doğrulama
  • OpenThread Daemon ile Thread ağını yönetme

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

Alternatif olarak Docker container'da OpenThread Border Router'ı kullanmayı deneyin.