डॉकर में OpenThread का इस्तेमाल करके थ्रेड नेटवर्क को सिम्युलेट करना

1. परिचय

26b7f4f6b3ea0700.png

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

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

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

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

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

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

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

2. डॉकर सेट करें

इस कोडलैब को Linux, Mac OS X या Windows मशीन पर डॉकर का इस्तेमाल करने के लिए डिज़ाइन किया गया है. Linux एक सुझाया गया एनवायरमेंट है.

डॉकर इंस्टॉल करें

अपनी पसंद के ओएस पर डॉक करने वाला टूल इंस्टॉल करें.

डॉकर इमेज को खींचें

डॉकर इंस्टॉल होने के बाद, टर्मिनल विंडो खोलें और openthread/environment डॉकर इमेज खींचें. इस इमेज में OpenThread और OpenThread डेमन को पहले से बनाया गया है. यह इस कोडलैब के लिए इस्तेमाल की जा सकती है.

$ docker pull openthread/environment:latest

ध्यान दें कि इसे पूरी तरह से डाउनलोड करने में कुछ मिनट लग सकते हैं.

टर्मिनल विंडो में, इमेज से डॉकर कंटेनर शुरू करें और इसे अपने bash शेल से कनेक्ट करें:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/environment bash

फ़्लैग पर ध्यान दें, जो इस कोडलैब के लिए ज़रूरी हैं:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 — इससे कंटेनर में IPv6 चालू होता है
  • --cap-add=net_admin — NET_ADMIN की सुविधा चालू करता है, जिससे आप नेटवर्क से जुड़े काम कर सकते हैं, जैसे कि आईपी रूट जोड़ना

कंटेनर में शामिल होने के बाद, आपको इस तरह का अनुरोध होगा:

root@c0f3912a74ff:/#

ऊपर दिए गए उदाहरण में, c0f3912a74ff कंटेनर आईडी है. डॉकर कंटेनर के आपके इंस्टेंस का कंटेनर आईडी, इस कोडलैब के निर्देशों में दिखाए गए कंटेनर आईडी से अलग होगा.

डॉकर का इस्तेमाल करना

इस कोडलैब से यह माना जाता है कि आपको डॉकर का इस्तेमाल करने से जुड़ी बुनियादी बातें पता हैं. आपको कोडलैब (कोड बनाना सीखना) से जुड़े सभी काम करने के लिए, डॉक कंटेनर में बने रहना चाहिए.

3. थ्रेड नेटवर्क को सिम्युलेट करें

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

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

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

6e3aa07675f902dc.png

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

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

अगर आपने पहले ही ऐसा नहीं किया है, तो किसी टर्मिनल विंडो में, डॉकर शुरू करें कंटेनर को उसके bash शेल से कनेक्ट करें:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/environment bash

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

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

ध्यान दें: अगर आपको ऐसा नहीं होता है, तो > का अनुरोध करने के लिए enter दबाएं.

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

1 का तर्क, फ़ाइल की जानकारी देने वाला है. यह एम्युलेट किए गए डिवाइस के लिए, &kot;Factory-assigned&kot; IEEE EUI-64 के सबसे छोटे बिट को दिखाता है. इस मान का इस्तेमाल IEEE 802.15.4 रेडियो एम्युलेशन (पोर्ट = 9000 + फ़ाइल डिस्क्रिप्टर) के लिए यूडीपी पोर्ट से जुड़े होने पर भी किया जाता है. इस कोडलैब में एम्युलेट किए गए थ्रेड डिवाइस का हर इंस्टेंस, अलग-अलग फ़ाइल डिस्क्रिप्टर का इस्तेमाल करेगा.

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

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

> 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

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

> state
leader
Done

नोड 1's थ्रेड इंटरफ़ेस को असाइन किए गए 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

खास IPv6 पते के टाइप नोट करें:

  • fd से शुरू होने वाला = मेश-लोकल
  • fe80 = लिंक-स्थानीय से शुरू होता है

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

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

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

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

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

एक नया टर्मिनल खोलें और नोड 2 के लिए इस्तेमाल करने के लिए, फ़िलहाल चल रहे डॉकर कंटेनर में एक bash शेल चलाएं.

$ docker exec -it codelab_otsim_ctnr bash

इस नए bash प्रॉम्प्ट में, 2 तर्क के साथ सीएलआई प्रोसेस को शुरू करें. यह आपका दूसरा एम्युलेट किया गया थ्रेड डिवाइस है:

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

ध्यान दें: अगर आपको ऐसा नहीं होता है, तो > का अनुरोध करने के लिए enter दबाएं.

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

> 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 के बीच, स्थिति का स्विच दिखने लगेगा. थ्रेड राऊटर, थ्रेड डिवाइसों के बीच ट्रैफ़िक को रूट करने में सक्षम है. इसे अभिभावक भी कहा जाता है.

> state
router
Done

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

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

1. कनेक्टिविटी जांचें

नोड 2 पर, RLOC16 पाएं. RLOC16, डिवाइस का #16 बिट और#39;s RLOC IPv6 पता है.

> rloc16
5800
Done

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

> 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 का नोड 2's RLOC टेबल में मिला है, जो पुष्टि करता है कि यह मेश से कनेक्ट है.

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

दो एम्युलेट किए गए थ्रेड डिवाइसों के बीच, कनेक्टिविटी की पुष्टि करें. नोड 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

> CLI अनुरोध पर वापस लौटने के लिए enter दबाएं.

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

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

नोड 1 पर वापस जाएं और थ्रेड को रोकें:

> thread stop
Done

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

> state
router
Done
...
> state
leader
Done

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

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

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

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

> factoryreset
>
> exit
root@c0f3912a74ff:/#

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

4. कमीशन वाले नोड की पुष्टि करें

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

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

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

d6a67e8a0d0b5dcb.png

डॉकर

बाकी कसरतों में हर नोड (टर्मिनल विंडो) के लिए, पक्का करें कि आप OpenThread बिल्ड के साथ डॉकर कंटेनर चला रहे हों. अगर पिछली कसरत से जारी रखा गया है, तब भी आपके पास एक ही डॉक करने वाले कंटेनर में दो bash प्रॉम्प्ट पहले से खुले हुए होने चाहिए. अगर ऐसा नहीं है, तो डेकर समस्या का हल चरण को देखें या बस एक थ्रेड नेटवर्क सिम्युलेट करें व्यायाम करें.

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

नोड 1 में, सीएलआई प्रोसेस को बनाएं:

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

ध्यान दें: अगर आपको ऐसा नहीं होता है, तो > का अनुरोध करने के लिए enter दबाएं.

नया ऑपरेशनल डेटासेट बनाएं, इसे चालू डेटासेट की तरह इस्तेमाल करें, और थ्रेड शुरू करें:

> 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

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

> state
leader
Done

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

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

> commissioner start
Done

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

> commissioner joiner add * J01NME
Done

3. सदस्य की भूमिका शुरू करें

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

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

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

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

शामिल होने वाले उपयोगकर्ता के तौर पर, डिवाइस (नोड 2) ने कमिश्नर (नोड 1) के साथ अपनी पुष्टि की है और उसे थ्रेड नेटवर्क क्रेडेंशियल मिले हैं.

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

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

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

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

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

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

5. Openthread Deemon की मदद से नेटवर्क को मैनेज करें

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

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

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

डॉकर

इस अभ्यास में हर नोड (टर्मिनल विंडो) के लिए, पक्का करें कि आप OpenThread बिल्ड के साथ डॉकर कंटेनर चला रहे हों. अगर पिछली कसरत से आगे बढ़ते हैं, तो उसी डॉकर कंटेनर में दो bash प्रॉम्प्ट पहले से खुले हुए होने चाहिए. अगर ऐसा नहीं है, तो डॉकर की समस्या का हल चरण देखें.

ot-daemon का इस्तेमाल करें

यह व्यायाम नीचे दी गई बातों के अनुसार, तीन टर्मिनल विंडो का इस्तेमाल करेगा:

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

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

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

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

ध्यान दें: अगर आपको ऐसा नहीं होता है, तो > का अनुरोध करने के लिए enter दबाएं.

नया ऑपरेशनल डेटासेट बनाएं, इसे चालू डेटासेट की तरह इस्तेमाल करें, और थ्रेड शुरू करें:

> 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's थ्रेड इंटरफ़ेस को असाइन किए गए 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
>

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

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

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

दूसरी टर्मिनल विंडो में, tun डिवाइस नोड बनाएं और पढ़ने/लिखने की अनुमतियां सेट करें:

root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200
root@c0f3912a74ff:/# chmod 600 /dev/net/tun

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

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

root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-daemon -v \
'spinel+hdlc+forkpty://openthread/build/examples/apps/ncp/ot-rcp?forkpty-arg=2'

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

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

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

3. नेटवर्क से जुड़ने के लिए ot-ctl का इस्तेमाल करें

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

तीसरी टर्मिनल विंडो खोलकर, मौजूदा कंटेनर को चलाएं:

$ docker exec -it codelab_otsim_ctnr bash

कंटेनर में जाकर, ot-ctl शुरू करें:

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

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

> state
disabled
Done

किसी खास जॉइनर से जुड़ने के लिए, नोड 2's 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) के साथ पुष्टि की है और थ्रेड नेटवर्क क्रेडेंशियल मिले हैं.

अब थ्रेड 2 में नोड 2 से जुड़ें (फिर से, तीसरी टर्मिनल विंडो में):

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

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

तीसरी टर्मिनल विंडो में, Ctrl+D या exit निर्देश का इस्तेमाल करके ot-ctl से बाहर निकलें और कंटेनर's bash कंसोल पर वापस जाएं. इस कंसोल से, नोड 1 को ping6 निर्देश के साथ उसके ईआईडी का इस्तेमाल करके पिंग करें. अगर ot-daemon RCP इंस्टेंस, थ्रेड नेटवर्क से जुड़ गया है और उससे बातचीत हो रही है, तो पिंग हो जाता है:

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. डॉक करने से जुड़ी समस्या का हल

अगर आप डॉकर कंटेनर से बाहर निकल गए हैं

bash अनुरोध, आपको यह देखना पड़ सकता है कि क्या यह ##39; चल रहा है और ज़रूरत के हिसाब से रीस्टार्ट / फिर से डालें.

यह दिखाने के लिए कि कौनसे डॉकर कंटेनर चल रहे हैं:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        environment       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

सभी डॉकर कंटेनर दिखाने के लिए (चल रहे और बंद किए गए दोनों):

$ 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 निर्देश के आउटपुट में कंटेनर codelab_otsim_ctnr#39 नहीं दिखता, तो इसे फिर से चलाएं:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/environment bash

अगर कंटेनर बंद हो गया है (docker ps -a में दिया गया है, लेकिन docker ps में नहीं), तो इसे रीस्टार्ट करें:

$ docker start -i codelab_otsim_ctnr

अगर डॉकर कंटेनर पहले से चल रहा है (docker ps में मौजूद), तो हर टर्मिनल के कंटेनर से फिर से कनेक्ट करें:

$ docker exec -it codelab_otsim_ctnr bash

&की कार्रवाई नहीं की जा सकती&कोटेशन

अगर आप नए OpenThread नोड (mknod निर्देश का इस्तेमाल करते समय) बनाते समय Operation not permitted की गड़बड़ी का सामना करते हैं, तो पक्का करें कि आप इस कोडलैब में दिए गए निर्देशों के मुताबिक, डॉक उपयोगकर्ता को रूट उपयोगकर्ता की तरह इस्तेमाल कर रहे हैं. इस कोडलैब के साथ रूटलेस मोड में डॉकर को नहीं चलाया जा सकता.

7. बधाई हो!

आपने' आपके पहले Thread नेटवर्क को OpenThread का इस्तेमाल करके सिम्युलेट किया है. कमाल है!

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

  • OpenThread सिम्युलेशन सिम्युलेशन डॉक को शुरू करें और मैनेज करें
  • थ्रेड नेटवर्क को सिम्युलेट करें
  • थ्रेड नोड की पुष्टि करें
  • Openthread Deemon की मदद से, Thread नेटवर्क को मैनेज करें

थ्रेड और OpenThread के बारे में ज़्यादा जानने के लिए इन रेफ़रंस को देखें:

इसके अलावा, डॉकर कंटेनर में OpenThread बॉर्डर राऊटर का इस्तेमाल करके देखें!