OpenThread की मदद से, Thread नेटवर्क को सिम्युलेट करना

1. परिचय

26b7f4f6b3ea0700.png

Google की ओर से रिलीज़ किया गया OpenThread, Thread नेटवर्किंग प्रोटोकॉल का ओपन सोर्स लागू किया गया है. Google Nest ने OpenThread लॉन्च किया है, ताकि Nest के प्रॉडक्ट में इस्तेमाल की जाने वाली टेक्नोलॉजी को डेवलपर के लिए बड़े पैमाने पर उपलब्ध कराया जा सके. इससे कनेक्टेड होम के लिए प्रॉडक्ट बनाने में तेज़ी लाने में मदद मिली है.

Thread की खास बातें, होम ऐप्लिकेशन के लिए आईपीवी6 आधारित भरोसेमंद, सुरक्षित, और कम पावर वाले वायरलेस डिवाइस-टू-डिवाइस कम्यूनिकेशन प्रोटोकॉल के बारे में बताती हैं. OpenThread ने सभी Thread नेटवर्किंग लेयर को लागू किया होता है, जिनमें आईपीवी6, 6LoWPAN, IEEE 802.15.4 के साथ-साथ MAC सिक्योरिटी, मेश लिंक इस्टैब्लिशमेंट, और मेश रूटिंग शामिल हैं.

यह कोडलैब आपको सिम्युलेट किए गए डिवाइसों पर Thread नेटवर्क को सिम्युलेट करने का तरीका बताता है.

आप इन चीज़ों के बारे में जानेंगे

  • OpenThread: बिल्ड टूलचेन को सेट अप करने का तरीका
  • Thread नेटवर्क को सिम्युलेट करने का तरीका
  • थ्रेड नोड की पुष्टि करने का तरीका
  • OpenThread Deemon की मदद से, Thread नेटवर्क को मैनेज करने का तरीका

आपको इनकी ज़रूरत होगी

  • Git
  • Linux, नेटवर्क रूटिंग की बुनियादी जानकारी

2. बिल्ड सिस्टम को सेट अप करें

Git

इस कोडलैब को पूरा करने के लिए Git ज़रूरी है. जारी रखने से पहले इसे डाउनलोड और इंस्टॉल करें.

इंस्टॉल हो जाने के बाद, OpenThread को डाउनलोड करने और बनाने के लिए, अपने ओएस के निर्देशों का पालन करें.

Mac OS X के लिए XCode

Mac OS X पर OpenThread को इंस्टॉल और बनाने के लिए, XCode की ज़रूरत होती है.

XCode इंस्टॉल होने के बाद, XCode कमांड लाइन टूल इंस्टॉल करें:

$ xcode-select --install

Linux / Mac OS X पर बनाएं

इन इंस्टॉलेशन निर्देशों का Ubuntu Server 14.04 LTS और Mac OS X Sierra 10.12.6 पर परीक्षण किया जा चुका है.

OpenThread इंस्टॉल करें. bootstrap निर्देशों से यह पक्का होता है कि टूलचेन इंस्टॉल हो गया है और एनवायरमेंट सही तरीके से कॉन्फ़िगर किया गया है:

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

Windows का इस्तेमाल करना

अगर आपको Windows इस्तेमाल करना है, तो हमारा सुझाव है कि आप इस कोडलैब के Docker वर्शन का इस्तेमाल करें.

3. OpenThread ऐप्लिकेशन बनाएं

इंस्टॉल पूरा होने के बाद, उदाहरण के तौर पर OpenThread ऐप्लिकेशन बनाएं. इस कोडलैब के लिए, हम सिम्युलेशन के उदाहरण का इस्तेमाल कर रहे हैं.

$ cd ~/src/openthread
$ ./script/cmake-build simulation

अब OpenThread Deemon बनाएं:

$ ./script/cmake-build posix -DOT_DAEMON=ON

4. Thread नेटवर्क को सिम्युलेट करें

इस कोडलैब के लिए उदाहरण के तौर पर इस्तेमाल किया जाने वाला ऐप्लिकेशन, छोटे से छोटे OpenThread ऐप्लिकेशन को दिखाता है. यह एक बेसिक कमांड-लाइन इंटरफ़ेस (सीएलआई) के ज़रिए, OpenThread कॉन्फ़िगरेशन और मैनेजमेंट इंटरफ़ेस को दिखाता है.

इस अभ्यास में, आपको सिम्युलेट किए गए एक Thread डिवाइस को दूसरे सिम्युलेटेड Thread डिवाइस से पिंग करने के लिए, ज़रूरी कम से कम चरणों को पूरा करने में मदद मिलती है.

यहां दिए गए डायग्राम में Thread नेटवर्क की बुनियादी टोपोलॉजी के बारे में बताया गया है. इस अभ्यास के लिए, हम हरे रंग के सर्कल में मौजूद दो नोड को सिम्युलेट करेंगे: Thread Leader और Thread राऊटर के बीच एक कनेक्शन.

6e3aa07675f902dc.png

नोड को पिंग करना

1. नोड 1 शुरू करें

openthread डायरेक्ट्री पर जाएं और ot-cli-ftd बाइनरी का इस्तेमाल करके, सिम्युलेटेड Thread डिवाइस के लिए सीएलआई प्रोसेस को शुरू करें.

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

ध्यान दें: अगर इस निर्देश को चलाने के बाद आपको > प्रॉम्प्ट नहीं दिखता है, तो enter दबाएं.

यह बाइनरी, POSIX पर सिम्युलेट किए गए OpenThread डिवाइस को लागू करती है. आईईईई 802.15.4 रेडियो ड्राइवर को यूडीपी के ऊपर लागू किया जाता है (आईईई 802.15.4 फ़्रेम यूडीपी पेलोड में पास किए जाते हैं).

1 का आर्ग्युमेंट ऐसा फ़ाइल डिस्क्रिप्टर है जो "फ़ैक्ट्री के तौर पर असाइन किए गए" के सबसे कम अहम बिट के बारे में बताता है सिम्युलेट किए गए डिवाइस के लिए आईईईई ईयूआई-64. इस वैल्यू का इस्तेमाल तब भी किया जाता है, जब आईईईई 802.15.4 रेडियो एम्युलेशन (पोर्ट = 9000 + फ़ाइल डिस्क्रिप्टर) के लिए यूडीपी पोर्ट से जोड़ा जाता है. इस कोडलैब में, सिम्युलेटेड Thread डिवाइस का हर इंस्टेंस अलग-अलग फ़ाइल डिस्क्रिप्टर का इस्तेमाल करेगा.

ध्यान दें: सिम्युलेटेड डिवाइस की प्रोसेस को तैयार करते समय, इस कोडलैब (कोड बनाना सीखना) में बताए गए तरीके से, सिर्फ़ 1 या उससे बड़े साइज़ के फ़ाइल डिस्क्रिप्टर का इस्तेमाल करें. 0 का फ़ाइल डिस्क्रिप्टर दूसरे इस्तेमाल के लिए रिज़र्व है.

एक नया ऑपरेशनल डेटासेट बनाएं और उसे ऐक्टिव डेटासेट के तौर पर सेट करें. ऑपरेशनल डेटासेट उस Thread नेटवर्क का कॉन्फ़िगरेशन है, जिसे आप बना रहे हैं.

> 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

इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:

> dataset commit active
Done

IPv6 इंटरफ़ेस खोलें:

> ifconfig up
Done

Thread प्रोटोकॉल पर कार्रवाई शुरू करें:

> thread start
Done

कुछ सेकंड इंतज़ार करें और पुष्टि करें कि डिवाइस Thread लीडर बन गया है. लीडर वह डिवाइस है जो राऊटर आईडी के असाइनमेंट को मैनेज करने का काम करता है.

> state
leader
Done

नोड 1 के Thread इंटरफ़ेस को असाइन किए गए IPv6 पते देखें (आपका आउटपुट अलग होगा):

> 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

कुछ खास तरह के आईपीवी6 पते पर ध्यान दें:

  • fd से शुरू होता है = मेश-लोकल
  • fe80 से शुरू होता है = link-local

मेश-स्थानीय पते के टाइप को आगे भी कैटगरी में बांटा गया है:

  • इसमें ff:fe00 = राऊटर लोकेटर (आरएलओसी) शामिल है
  • इसमें ff:fe00 = एंडपॉइंट आइडेंटिफ़ायर (ईआईडी) शामिल नहीं है

अपने कंसोल आउटपुट में ईआईडी की पहचान करें. इसे बाद में इस्तेमाल करने के लिए नोट करें. ऊपर दिए गए सैंपल आउटपुट में, ईआईडी यह है:

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

2. नोड 2 शुरू करें

नया टर्मिनल खोलें और openthread डायरेक्ट्री पर जाएं. इसके बाद, सीएलआई प्रोसेस को शुरू करें. यह आपका दूसरा सिम्युलेट किया गया Thread डिवाइस है:

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

ध्यान दें: अगर इस निर्देश को चलाने के बाद आपको > प्रॉम्प्ट नहीं दिखता है, तो enter दबाएं.

नोड 1 के ऑपरेशनल डेटासेट के समान मानों का इस्तेमाल करके Thread नेटवर्क कुंजी और पैन आईडी को कॉन्फ़िगर करें:

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:

> dataset commit active
Done

IPv6 इंटरफ़ेस खोलें:

> ifconfig up
Done

Thread प्रोटोकॉल पर कार्रवाई शुरू करें:

> thread start
Done

डिवाइस खुद ही चाइल्ड के तौर पर शुरू हो जाएगा. Thread चाइल्ड, किसी एंड डिवाइस की तरह होता है. यह ऐसा Thread डिवाइस है जो सिर्फ़ माता-पिता के डिवाइस से यूनिकास्ट ट्रैफ़िक को भेजता और पाता है.

> state
child
Done

दो मिनट के अंदर, child से router पर स्विच किया जाएगा. Thread राऊटर की मदद से, Thread डिवाइसों के बीच ट्रैफ़िक को रूट किया जा सकता है. इसे अभिभावक भी कहा जाता है.

> state
router
Done

नेटवर्क की पुष्टि करें

राऊटर टेबल पर जाकर, मेश नेटवर्क की पुष्टि करने का आसान तरीका है.

1. इंटरनेट कनेक्शन की जांच करें

नोड 2 पर, RLOC16 पाएं. RLOC16, डिवाइस के RLOC IPv6 पते के आखिरी 16 बिट होते हैं.

> rloc16
5800
Done

नोड 1 पर, Node 2 के RLOC16 के लिए राऊटर टेबल देखें. पक्का करें कि नोड 2 को पहले राऊटर की स्थिति पर स्विच कर दिया गया हो.

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

नोड 1 के 0xa800 का RLOC से पता चलता है कि वह मेश से कनेक्ट है या नहीं.

2. नोड 2 से पिंग नोड 1

सिम्युलेट किए गए दो Thread डिवाइसों के बीच कनेक्टिविटी की पुष्टि करें. नोड 2 में, ping को नोड 1 को असाइन किया गया ईआईडी:

> 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

> सीएलआई प्रॉम्प्ट पर वापस जाने के लिए, enter दबाएं.

नेटवर्क की जांच करें

अब जबकि दो सिम्युलेटेड Thread डिवाइसों के बीच पिंग किया जा सकता है, तो एक नोड को ऑफ़लाइन करके मेश नेटवर्क की जांच करें.

नोड 1 पर वापस जाएं और Thread को बंद करें:

> thread stop
Done

नोड 2 पर स्विच करें और स्टेटस देखें. दो मिनट में, नोड 2 यह पता लगा लेता है कि लीडर (नोड 1) ऑफ़लाइन है और आपको नोड 2 का ट्रांज़िशन नेटवर्क के leader के तौर पर दिखेगा:

> state
router
Done
...
> state
leader
Done

पुष्टि होने के बाद, Thread को बंद करें और बाहर निकलने से पहले, नोड 2 को फ़ैक्ट्री रीसेट करें. फ़ैक्ट्री रीसेट इसलिए किया जाता है, ताकि यह पक्का किया जा सके कि इस अभ्यास में हमने जिन Thread नेटवर्क के क्रेडेंशियल इस्तेमाल किए हैं वे अगली कसरत पर न जाएं.

> thread stop
Done
> factoryreset
>
> exit

फ़ैक्ट्री रीसेट करें और नोड 1 से बाहर निकलें:

> factoryreset
>
> exit

सभी उपलब्ध सीएलआई निर्देशों के बारे में जानने के लिए, OpenThread CLI रेफ़रंस पर जाएं.

5. कमीशन की मदद से नोड की पुष्टि करें

पिछली कसरत में, आपने दो सिम्युलेटेड डिवाइसों और पुष्टि किए गए कनेक्टिविटी के साथ Thread नेटवर्क सेट अप किया था. हालांकि, इससे सिर्फ़ बिना पुष्टि वाले IPv6 लिंक-लोकल ट्रैफ़िक को एक डिवाइस से दूसरे डिवाइस पर जाने में मदद मिलती है. ग्लोबल आईपीवी6 ट्रैफ़िक को उनके बीच (और Thread बॉर्डर राऊटर के ज़रिए इंटरनेट) को रूट करने के लिए, नोड की पुष्टि की जानी चाहिए.

पुष्टि करने के लिए, एक डिवाइस को कमिश्नर के तौर पर काम करना होगा. नए Thread डिवाइसों के लिए, फ़िलहाल कमिश्नर को ऑथेंटिकेशन सर्वर (पुष्टि करने वाला) के तौर पर चुना गया है. साथ ही, यह डिवाइसों को नेटवर्क में शामिल होने के लिए ज़रूरी नेटवर्क क्रेडेंशियल देने का अधिकार देता है.

इस अभ्यास में, हम पहले की तरह ही टू-नोड टोपोलॉजी का इस्तेमाल करेंगे. पुष्टि करने के लिए, थ्रेड लीडर, कमिश्नर और थ्रेड राऊटर को जॉइनर के तौर पर काम करेगा.

d6a67e8a0d0b5dcb.png

1. नेटवर्क बनाएं

अगर पिछली एक्सरसाइज़ से जारी रखने के लिए, आपको पहले से ही दो टर्मिनल विंडो खुली होनी चाहिए. अगर नहीं है, तो पक्का करें कि दो खुले हैं और इस्तेमाल के लिए तैयार हैं. एक नोड 1 के तौर पर और दूसरा नोड 2 के तौर पर काम करेगा.

नोड 1 में, सीएलआई प्रोसेस को शुरू करें:

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

ध्यान दें: अगर इस निर्देश को चलाने के बाद आपको > प्रॉम्प्ट नहीं दिखता है, तो enter दबाएं.

एक नया ऑपरेशनल डेटासेट बनाएं, उसे ऐक्टिव डेटासेट के तौर पर तय करें, और Thread को शुरू करें:

> 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

इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:

> dataset commit active
Done

IPv6 इंटरफ़ेस खोलें:

> ifconfig up
Done

Thread प्रोटोकॉल पर कार्रवाई शुरू करें:

> thread start
Done

कुछ सेकंड इंतज़ार करें और पुष्टि करें कि डिवाइस Thread लीडर बन गया है:

> state
leader
Done

2. कमिश्नर की भूमिका शुरू करें

नोड 1 पर रहते हुए, कमिश्नर की भूमिका शुरू करें:

> commissioner start
Done

J01NME जॉइनर क्रेडेंशियल वाले किसी भी जॉइनर को नेटवर्क पर कमीशन देने की अनुमति दें. इसके लिए, * वाइल्डकार्ड का इस्तेमाल करके ऐसा करें. जॉइनर एक ऐसा डिवाइस है जिसे कोई व्यक्ति एडमिन, मान्यता पा चुके Thread नेटवर्क में जोड़ता है.

> commissioner joiner add * J01NME
Done

3. जॉइनर की भूमिका शुरू करें

दूसरी टर्मिनल विंडो में, एक नई सीएलआई प्रोसेस बनाएं. यह नोड 2 है.

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

नोड 2 पर, J01NME जॉइनर क्रेडेंशियल का इस्तेमाल करके, जॉइनर की भूमिका चालू करें.

> ifconfig up
Done
> joiner start J01NME
Done

... पुष्टि के लिए कुछ सेकंड इंतज़ार करें ...

Join success

जॉइनर के तौर पर, डिवाइस (नोड 2) ने कमिश्नर (नोड 1) के साथ खुद की पुष्टि कर ली है और Thread नेटवर्क के क्रेडेंशियल पाए हैं.

नोड 2 की पुष्टि हो चुकी है, इसलिए अब Thread को शुरू करें:

> thread start
Done

4. नेटवर्क की पुष्टि करने की सुविधा चालू करें

नोड 2 पर state की जांच करके, यह पुष्टि करें कि अब वह नेटवर्क में शामिल हो गया है. दो मिनट में, नोड 2 child से router में बदल जाता है:

> state
child
Done
...
> state
router
Done

5. कॉन्फ़िगरेशन रीसेट करें

अगले एक्सरसाइज़ की तैयारी करने के लिए, कॉन्फ़िगरेशन को रीसेट करें. हर नोड पर, Thread को बंद करें, फ़ैक्ट्री रीसेट करें, और सिम्युलेट किए गए Thread डिवाइस से बाहर निकलें:

> thread stop
Done
> factoryreset
>
> exit

factoryreset निर्देश के बाद, > प्रॉम्प्ट को वापस लाने के लिए, आपको कुछ बार enter दबाना पड़ सकता है.

6. OpenThread Deemon की मदद से, नेटवर्क को मैनेज करें

इस काम के लिए, हम एक सीएलआई इंस्टेंस (एम्बेड किया गया एक SoC Thread डिवाइस) और एक रेडियो को-प्रोसेसर (आरसीपी) इंस्टेंस को सिम्युलेट करेंगे.

ot-daemon, OpenThread Posix ऐप्लिकेशन का मोड है. यह इनपुट और आउटपुट के तौर पर UNIX सॉकेट का इस्तेमाल करता है, ताकि OpenThread कोर को सेवा के तौर पर चलाया जा सके. क्लाइंट, OpenThread CLI को प्रोटोकॉल के तौर पर इस्तेमाल करके, सॉकेट से कनेक्ट करके इस सेवा से संपर्क कर सकता है.

ot-ctl एक सीएलआई है, जिसे ot-daemon उपलब्ध कराता है. यह आरसीपी को मैनेज और कॉन्फ़िगर करने के लिए उपलब्ध होता है. इसका इस्तेमाल करके, हम आरसीपी को Thread डिवाइस के बनाए गए नेटवर्क से कनेक्ट करेंगे.

ओट-डेमन का इस्तेमाल करें

इस अभ्यास में, नीचे दिए गए तीन टर्मिनल विंडो का इस्तेमाल किया जाएगा:

  1. सिम्युलेट किए गए थ्रेड डिवाइस (नोड 1) का सीएलआई इंस्टेंस
  2. ot-daemon प्रोसेस
  3. ot-ctl सीएलआई इंस्टेंस

अगर पिछले एक्सरसाइज़ से जारी रखना है, तो आपके पास पहले से ही दो टर्मिनल विंडो खुली होनी चाहिए. यह पक्का करने के लिए कि आपके पास इस अभ्यास के लिए तीन टर्मिनल विंडो उपलब्ध हैं, तीसरी विंडो खोलें.

1. नोड 1 शुरू करें

पहली टर्मिनल विंडो में, सिम्युलेट किए गए Thread डिवाइस के लिए सीएलआई प्रोसेस को शुरू करें:

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 1

ध्यान दें: अगर इस निर्देश को चलाने के बाद आपको > प्रॉम्प्ट नहीं दिखता है, तो enter दबाएं.

एक नया ऑपरेशनल डेटासेट बनाएं, उसे ऐक्टिव डेटासेट के तौर पर तय करें, और Thread को शुरू करें:

> 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

इस डेटासेट को ऐक्टिव डेटासेट के तौर पर सेट करें:

> dataset commit active
Done

IPv6 इंटरफ़ेस खोलें:

> ifconfig up
Done

Thread प्रोटोकॉल पर कार्रवाई शुरू करें:

> thread start
Done

नोड 1 के Thread इंटरफ़ेस को असाइन किए गए IPv6 पते देखें:

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

जैसा कि Thread नेटवर्क को सिम्युलेट करें चरण में बताया गया है, एक पता लिंक-लोकल (fe80) और तीन मेश-लोकल (fd) होता है. ईआईडी, मेश नेटवर्क का एक ऐसा पता है जिसके पते में ff:fe00 नहीं होता. सैंपल के इस आउटपुट में, ईआईडी fd55:cf34:dea5:7994:460:872c:e807:c4ab है.

अपने ipaddr आउटपुट से उस ईआईडी की पहचान करें जिसका इस्तेमाल नोड से संपर्क करने के लिए किया जाएगा.

2. ओट-डेमन शुरू करें

दूसरी टर्मिनल विंडो में, openthread डायरेक्ट्री पर जाएं और आरसीपी नोड के लिए ot-daemon शुरू करें, जिसे हम नोड 2 कहेंगे. -v वर्बोस फ़्लैग का इस्तेमाल करें, ताकि आप लॉग आउटपुट देख सकें और पुष्टि कर सकें कि यह चल रहा है. साथ ही, sudo का इस्तेमाल ज़रूर करें:

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+forkpty://build/simulation/examples/apps/ncp/ot-rcp?forkpty-arg=2'

पुष्टि हो जाने पर, वर्बोस मोड में, ot-daemon इस तरह का आउटपुट जनरेट करता है:

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

इस टर्मिनल को खुला रहने दें और बैकग्राउंड में चालू रखें. इसमें आपको कोई और निर्देश नहीं डालना होगा.

3. नेटवर्क में शामिल होने के लिए ot-ctl का इस्तेमाल करें

हमने अब तक किसी भी Thread नेटवर्क के लिए नोड 2 (ot-daemon आरसीपी) को चालू नहीं किया है. ऐसी ही स्थिति में ot-ctl की ज़रूरत पड़ती है. ot-ctl, OpenThread सीएलआई ऐप्लिकेशन के सीएलआई का ही इस्तेमाल करता है. इसलिए, ot-daemon नोड को सिम्युलेट किए गए अन्य Thread डिवाइसों की तरह ही कंट्रोल किया जा सकता है.

तीसरी टर्मिनल विंडो में, ot-ctl से शुरू करें:

$ sudo ./build/posix/src/posix/ot-ctl
>

ध्यान दें: अगर इस निर्देश को चलाने के बाद आपको > प्रॉम्प्ट नहीं दिखता है, तो enter दबाएं.

आपको इस तीसरी टर्मिनल विंडो में ot-ctl का इस्तेमाल, ot-daemon के साथ दूसरी टर्मिनल विंडो में शुरू किए गए नोड 2 (आरसीपी नोड) को मैनेज करने के लिए करना होगा. नोड 2 के state की जांच करें:

> state
disabled
Done

नोड 2 का eui64 पाएं, ताकि किसी खास जॉइनर में शामिल होने पर पाबंदी लगाई जा सके:

> eui64
18b4300000000001
Done

नोड 1 (पहली टर्मिनल विंडो) पर, कमिश्नर को शुरू करें और सिर्फ़ उस eui64 से ही शामिल करें:

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

नोड 2 (तीसरी टर्मिनल विंडो) पर, नेटवर्क इंटरफ़ेस लाएं और नेटवर्क से जुड़ें:

> ifconfig up
Done
> joiner start J01NME
Done

... पुष्टि के लिए कुछ सेकंड इंतज़ार करें ...

Join success

आरसीपी (नोड 2) को जॉइनर के तौर पर, कमिश्नर (नोड 1) के साथ खुद की पुष्टि कर ली है और Thread नेटवर्क के क्रेडेंशियल मिल गए हैं.

अब नोड 2 को Thread नेटवर्क से जोड़ें:

> thread start
Done

4. नेटवर्क की पुष्टि करने की पुष्टि करें

नोड 2 पर state की जांच करके, यह पुष्टि करें कि अब वह नेटवर्क में शामिल हो गया है. दो मिनट में, नोड 2 child से router में बदल जाता है:

> state
child
Done
...
> state
router
Done

5. कनेक्टिविटी की पुष्टि करें

Ctrl+D या exit कमांड का इस्तेमाल करके और अपने होस्ट मशीन की कमांड लाइन, ping Node 1 का इस्तेमाल करके, ot-ctl से बाहर निकलें. इसके लिए, ping6 कमांड के साथ EID का इस्तेमाल करें. अगर ot-daemon आरसीपी इंस्टेंस, Thread नेटवर्क से कनेक्ट हो जाता है और उससे कनेक्ट हो जाता है, तो पिंग ये काम करता है:

$ 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. बधाई हो!

आपने OpenThread का इस्तेमाल करके, अपने पहले Thread नेटवर्क को सिम्युलेट कर दिया है. बहुत बढ़िया!

इस कोडलैब में, आपने ये काम करने का तरीका सीखा:

  • OpenThread बिल्ड टूलचेन सेट अप करना
  • Thread नेटवर्क को सिम्युलेट करें
  • थ्रेड नोड की पुष्टि करें
  • OpenThread Deemon की मदद से, Thread नेटवर्क को मैनेज करना

अगर आपको ज़्यादा जानना है, तो ये रेफ़रंस देखें: