1. Giriş
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, simüle edilmiş cihazlarda Thread ağını simüle etme konusunda size yol gösterir.
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
- git
- Temel Linux, ağ yönlendirme bilgisi
2. Derleme sistemini ayarlama
Git
Bu Codelab'i tamamlamak için Git gereklidir. Devam etmeden önce uygulamayı indirip yükleyin.
Yüklendikten sonra OpenThread'i indirip derlemek için işletim sisteminize yönelik talimatları uygulayın.
Mac OS X için XCode
Mac OS X'te OpenThread'i yüklemek ve derlemek için XCode gerekir.
XCode yüklendikten sonra XCode Komut Satırı Araçları'nı yükleyin:
$ xcode-select --install
Linux / Mac OS X'te geliştirin
Bu yükleme talimatları Ubuntu Server 14.04 LTS ve Mac OS X Sierra 10.12.6 üzerinde test edilmiştir.
OpenThread'i yükleyin. bootstrap
komutları, araç zincirinin yüklendiğinden ve ortamın doğru şekilde yapılandırıldığından emin olmanızı sağlar:
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
Windows'u kullanma
Windows'u tercih ediyorsanız bu Codelab'in Docker sürümünü denemenizi öneririz.
3. OpenThread uygulamalarını derleme
Yüklemeniz tamamlandıktan sonra örnek OpenThread uygulamasını oluşturun. Bu Codelab için simülasyon örneğini kullanıyoruz.
$ cd ~/src/openthread $ ./script/cmake-build simulation
Şimdi OpenThread Daemon'ı derleyin:
$ ./script/cmake-build posix -DOT_DAEMON=ON
4. 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, simüle edilmiş bir Thread cihazını, simüle edilmiş başka bir 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üğümü simüle edeceğiz: Bir İş Parçacığı Lideri ve aralarında tek bir bağlantı olan İleti Dizisi Yönlendirici.
Düğümü pingleme
1. 1. Düğüm Başlatma
openthread
dizinine gidin ve ot-cli-ftd
ikili programını kullanarak simüle edilmiş Thread cihazı için CLI işlemini oluşturun.
$ cd ~/src/openthread $ ./build/simulation/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, POSIX üzerine simüle edilen bir OpenThread cihazını 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 Simü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 simüle edilmiş Thread 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 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ğ-yerelfe80
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çıp openthread
dizinine gidin ve CLI işlemini oluşturun. İkinci simüle edilmiş Thread cihazınız:
$ cd ~/src/openthread $ ./build/simulation/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 | 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 0xa800
RLOC'si tabloda bulundu ve ağa bağlı olduğunu onayladı.
2. Düğüm 2'den Düğüm 1 Ping
Simüle edilen 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 simü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, çıkmadan ö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
Ayrıca, fabrika ayarlarına sıfırlayın ve Düğüm 1'den çıkın:
> factoryreset > > exit
Mevcut tüm CLI komutlarını keşfetmek için OpenThread CLI Reference (OpenThread CLI Referansı) sayfasına bakın.
5. 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.
1. Ağ oluşturun
Önceki alıştırmadan devam ediyorsanız zaten iki terminal pencerenizin açık olması gerekir. Değilse iki tanesinin açık ve kullanıma hazır olduğundan emin olun. Biri Düğüm 1, diğeri Düğüm 2 olarak hizmet verir.
Düğüm 1'de CLI işlemini oluşturun:
$ cd ~/src/openthread $ ./build/simulation/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 yeni bir CLI işlemi oluşturun. Bu, 2. Düğüm.
$ cd ~/src/openthread $ ./build/simulation/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 simüle edilen Thread cihazından çıkın:
> thread stop Done > factoryreset > > exit
factoryreset
komutundan sonra >
istemini geri getirmek için enter
tuşuna birkaç kez basmanız gerekebilir.
6. 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.
Ot-daemon kullanma
Bu alıştırmada, aşağıdakilere karşılık gelen üç terminal penceresi kullanılacaktır:
- Simüle edilen Thread cihazının KSA örneği (Düğüm 1)
ot-daemon
işlemot-ctl
CLI örneği
Önceki alıştırmadan devam ediyorsanız halihazırda iki terminal pencerenizin açık olması gerekir. Bu alıştırma için kullanabileceğiniz üç terminal pencereniz olduğundan emin olmak için üçüncü bir tane açın.
1. 1. Düğüm Başlatma
İlk terminal penceresinde, simüle edilen Thread cihazınız için CLI işlemini oluşturun:
$ cd ~/src/openthread $ ./build/simulation/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 openthread
dizinine gidin ve bir RCP düğümü için ot-daemon
öğesini başlatın. Buna Düğüm 2 denir. Günlük çıkışını görebilmek, çalıştığını teyit etmek ve sudo
kullandığınızdan emin olmak için ayrıntılı -v
işaretini kullanın:
$ cd ~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+forkpty://build/simulation/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[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
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 penceresinde ot-ctl
işlemini başlatın:
$ sudo ./build/posix/src/posix/ot-ctl >
Not: Bu komutu çalıştırdıktan sonra >
istemini görmezseniz enter
tuşuna basın.
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
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), 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:
> 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. Bağlantıyı doğrulayın
Ctrl+D veya exit
komutlarını kullanarak ve ana makinenizin komut satırında, ping6
komutuyla EID numarasını kullanarak Düğüm 1'i pingleyerek ot-ctl
uygulamasından çıkın. 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:
$ 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 Thread ağınızı başarıyla simüle ettiniz. Mükemmel!
Bu Codelab'de şunları öğrendiniz:
- OpenThread derleme araç zincirini ayarlama
- Thread ağını simüle edin
- Thread düğümlerinin kimliğini doğrulama
- OpenThread Daemon ile Thread ağı yönetme
Daha fazla bilgi edinmek için şu kaynakları inceleyin: