Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

Docker में OpenThread का उपयोग करके एक थ्रेड नेटवर्क का अनुकरण करना

26b7f4f6b3ea0700.png

Google द्वारा जारी OpenThread थ्रेड नेटवर्किंग प्रोटोकॉल का एक ओपन-सोर्स कार्यान्वयन है। Google Nest ने कनेक्टेड घर के लिए उत्पादों के विकास में तेजी लाने के लिए डेवलपर्स के लिए व्यापक रूप से नेस्ट उत्पादों में उपयोग की जाने वाली तकनीक बनाने के लिए OpenThread जारी किया है।

थ्रेड विनिर्देशन IPv6- आधारित विश्वसनीय, सुरक्षित और कम-शक्ति वाले वायरलेस डिवाइस-टू-डिवाइस संचार प्रोटोकॉल को घरेलू अनुप्रयोगों के लिए परिभाषित करता है। OpenThread IPv6, 6LoWPAN, IEEE 802.15.4 सहित सभी थ्रेड नेटवर्किंग लेयर्स को मैक सिक्योरिटी, मेश लिंक इंस्टालेशन और मेश राउटिंग के साथ लागू करता है।

यह कोडलैब आपको डॉकटर का उपयोग करके उत्सर्जित उपकरणों पर एक थ्रेड नेटवर्क के अनुकरण के माध्यम से चलेगा।

आप क्या सीखेंगे

  • OpenThread build toolchain कैसे सेट करें
  • थ्रेड नेटवर्क का अनुकरण कैसे करें
  • थ्रेड नोड्स को कैसे प्रमाणित करें
  • OpenThread Daemon के साथ थ्रेड नेटवर्क का प्रबंधन कैसे करें

आपको किस चीज़ की ज़रूरत पड़ेगी

  • डाक में काम करनेवाला मज़दूर
  • लिनक्स, नेटवर्क रूटिंग का बुनियादी ज्ञान

यह कोडलैब लिनक्स, मैक ओएस एक्स या विंडोज मशीन पर डॉकर का उपयोग करने के लिए बनाया गया है। लिनक्स अनुशंसित वातावरण है।

डॉकर स्थापित करें

अपनी पसंद के ओएस पर डॉकर स्थापित करें।

डॉकर डाउनलोड करें

डॉकर छवि को खींचो

openthread/codelab_otsim स्थापित होने के बाद, एक टर्मिनल विंडो खोलें और openthread/codelab_otsim Docker छवि openthread/codelab_otsim । इस छवि में OpenThread और OpenThread Daemon पूर्व-निर्मित और इस कोडेलैब के लिए उपयोग करने के लिए तैयार है।

$ docker pull openthread/codelab_otsim:latest

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

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

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

झंडे पर ध्यान दें, जो इस कोडलैब के लिए आवश्यक हैं:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 - यह कंटेनर के भीतर --sysctl net.ipv6.conf.all.disable_ipv6=0 सक्षम करता है
  • --cap-add=net_admin - NET_ADMIN क्षमता को सक्षम करता है, जो आपको नेटवर्क से संबंधित संचालन को निष्पादित करने की अनुमति देता है, जैसे कि आईपी मार्ग जोड़ना

कंटेनर में एक बार, आपके पास इसके समान एक संकेत होना चाहिए:

root@c0f3912a74ff:/#

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

डॉकर का उपयोग करना

यह कोडेलैब मानता है कि आपको डोकर के उपयोग की मूल बातें पता हैं। कोडेलैब की संपूर्णता के लिए आपको डॉकटर कंटेनर में रहना चाहिए।

इस कोडलैब के लिए आपके द्वारा उपयोग किया जाने वाला उदाहरण एप्लिकेशन एक न्यूनतम OpenThread एप्लिकेशन प्रदर्शित करता है जो OpenThread कॉन्फ़िगरेशन और प्रबंधन इंटरफ़ेस को एक बुनियादी कमांड-लाइन इंटरफ़ेस (CLI) के माध्यम से उजागर करता है।

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

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

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/codelab_otsim bash

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

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1

यह बाइनरी एक ओपनथ्रेड डिवाइस लागू करता है जो पोसिक्स के शीर्ष पर उत्सर्जित होता है। IEEE 802.15.4 रेडियो ड्राइवर UDP के शीर्ष पर कार्यान्वित किया जाता है (IEEE 802.15.4 फ्रेम UDP पेलोड लोड के भीतर पास किए जाते हैं)।

1 का तर्क एक फाइल डिस्क्रिप्टर है जो एमुलेटेड डिवाइस के लिए "फैक्टरी-असाइन" आईईईई ईयूआई -64 के कम से कम महत्वपूर्ण बिट्स का प्रतिनिधित्व करता है। IEEE 802.15.4 रेडियो इम्यूलेशन (पोर्ट = 9000 + फ़ाइल डिस्क्रिप्टर) के लिए UDP पोर्ट पर बाइंड करते समय भी इस मान का उपयोग किया जाता है। इस कोडेलैब में एक एमुलेटेड थ्रेड डिवाइस का प्रत्येक उदाहरण एक अलग फाइल डिस्क्रिप्टर का उपयोग करेगा।

ध्यान दें: केवल 1 या अधिक के फाइल डिस्क्रिप्टर का उपयोग करें, जैसा कि इस कोडेलैब में नोट किया गया है जब एक उत्सर्जित डिवाइस के लिए प्रक्रिया को स्पैनिंग करते हैं। 0 का एक फाइल डिस्क्रिप्टर अन्य उपयोग के लिए आरक्षित है।

यदि आप नहीं देखते हैं

>

इस कमांड को चलाने के बाद तुरंत दबाएँ

enter

एक नया ऑपरेशनल डेटासेट बनाएं और इसे सक्रिय के रूप में प्रतिबद्ध करें। ऑपरेशनल डेटासेट आपके द्वारा बनाए जा रहे थ्रेड नेटवर्क के लिए कॉन्फ़िगरेशन है।

> 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
Master 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 start
Done

कुछ सेकंड प्रतीक्षा करें और सत्यापित करें कि डिवाइस थ्रेड लीडर बन गया है। लीडर राउटर आईडी असाइनमेंट के प्रबंधन के लिए जिम्मेदार उपकरण है।

> state
leader
Done

नोड 1 के थ्रेड इंटरफ़ेस को निर्दिष्ट 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 शामिल है ff:fe00 = राउटर लोकेटर ( ff:fe00 )
  • ff:fe00 शामिल नहीं है ff:fe00 = समापन बिंदु पहचानकर्ता (ईआईडी)

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

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

2. नोड 2 प्रारंभ करें

नया टर्मिनल खोलें और वर्तमान में चल रहे डॉक कंटेनर में नोड 2 के उपयोग के लिए bash शेल निष्पादित करें।

$ docker exec -it codelab_otsim_ctnr bash

इस नए bash प्रॉम्प्ट पर, openthread डायरेक्टरी में जाएँ और CLI प्रोसेस को स्पॉन करें। यह आपका दूसरा उत्सर्जित थ्रेड डिवाइस है:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

यदि आप नहीं देखते हैं

>

इस कमांड को चलाने के बाद तुरंत दबाएँ

enter

नोड 1 के संचालन डेटासेट के समान मानों का उपयोग करके थ्रेड मास्टर कुंजी और पैन आईडी कॉन्फ़िगर करें:

> dataset masterkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

इस डेटासेट को सक्रिय के रूप में प्रतिबद्ध करें:

> dataset commit active
Done

IPv6 इंटरफ़ेस लाओ:

> ifconfig up
Done

थ्रेड प्रोटोकॉल ऑपरेशन शुरू करें:

> thread start
Done

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

> state
child
Done

2 मिनट के भीतर आपको child से router लिए राज्य स्विच देखना चाहिए। थ्रेड राउटर थ्रेड डिवाइसेस के बीच ट्रैफ़िक को रूट करने में सक्षम है। इसे अभिभावक के रूप में भी जाना जाता है।

07722 ए 2330

नेटवर्क का सत्यापन करें

मेष नेटवर्क को सत्यापित करने का एक आसान तरीका राउटर टेबल है।

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

नोड 2 पर, RLOC16 प्राप्त करें। RLOC16 डिवाइस के RLOC IPv6 पते के अंतिम 16 बिट्स हैं।

> rloc16
5800
Done

नोड 1 पर, नोड 2 के 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 का 0x5800 पाया जाता है, यह पुष्टि करता है कि यह मेष से जुड़ा है।

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

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

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

आप प्रेस करना पड़ सकता है enter लाने के लिए कई बार > एक के बाद शीघ्र वापस factoryreset आदेश। डॉकटर कंटेनर से बाहर न निकलें।

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

> factoryreset
>
> exit
root@c0f3912a74ff:/#

सभी उपलब्ध सीएलआई कमांड का पता लगाने के लिए OpenThread CLI संदर्भ देखें।

पिछले अभ्यास में, आपने दो सिम्युलेटेड डिवाइस और सत्यापित कनेक्टिविटी के साथ थ्रेड नेटवर्क स्थापित किया है। हालाँकि, यह केवल डिवाइसों के बीच असंबद्ध IPv6 लिंक-स्थानीय ट्रैफ़िक को अनुमति देता है। वैश्विक IPv6 ट्रैफ़िक (और थ्रेड बॉर्डर राउटर के माध्यम से इंटरनेट) को रूट करने के लिए, नोड्स को प्रमाणित किया जाना चाहिए।

प्रमाणित करने के लिए, एक उपकरण को आयुक्त के रूप में कार्य करना चाहिए। आयुक्त वर्तमान में नए थ्रेड डिवाइसेस के लिए ऑथेंटिकेशन सर्वर और नेटवर्क से जुड़ने के लिए आवश्यक नेटवर्क क्रेडेंशियल्स प्रदान करने के लिए ऑथराइज़र है।

इस अभ्यास में, हम पहले की तरह ही दो-नोड टोपोलॉजी का उपयोग करेंगे। प्रमाणीकरण के लिए, थ्रेड लीडर आयुक्त के रूप में कार्य करेगा, थ्रेड राउटर एक योजक के रूप में।

d6a67e8a0d0b5dcb.png

डाक में काम करनेवाला मज़दूर

शेष अभ्यास में प्रत्येक नोड (टर्मिनल विंडो) के लिए, सुनिश्चित करें कि आप डॉकटर कंटेनर को ओपनथ्रेड बिल्ड के साथ चला रहे हैं। यदि पिछले अभ्यास से जारी है, तो आपके पास पहले से ही खुले एक ही डॉकर कंटेनर के भीतर दो bash संकेत होने चाहिए। यदि नहीं, तो Docker समस्या निवारण चरण देखें, या बस थ्रेड नेटवर्क व्यायाम को फिर से बनाएं

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

नोड 1 में, CLI प्रक्रिया स्पॉन करें:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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
Master 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 start
Done

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

> state
leader
Done

2. आयुक्त की भूमिका शुरू करें

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

> commissioner start
Done

नेटवर्क पर कमीशन करने के लिए J01NME Joiner क्रेडेंशियल के साथ किसी भी योजक ( * वाइल्डकार्ड का उपयोग करके) को अनुमति दें। एक योजक एक उपकरण है जो एक मानव प्रशासक द्वारा एक कमीशन थ्रेड नेटवर्क में जोड़ा जाता है।

> commissioner joiner add * J01NME
Done

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

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

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

नोड 2 पर, J01NME जॉइनर क्रेडेंशियल का उपयोग करके जॉइनर भूमिका को सक्षम करें।

01cbeaeaab0

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

Join success

एक योजक के रूप में, डिवाइस (नोड 2) ने आयुक्त (नोड 1) के साथ सफलतापूर्वक प्रमाणित किया और थ्रेड नेटवर्क क्रेडेंशियल्स प्राप्त किया।

अब जब नोड 2 प्रमाणित है, तो थ्रेड प्रारंभ करें:

> thread start
Done

4. नेटवर्क प्रमाणीकरण सत्यापित करें

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

> state
child
Done
...
> state
router
Done

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

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

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

आप प्रेस करना पड़ सकता है enter लाने के लिए कई बार > एक के बाद शीघ्र वापस factoryreset आदेश।

इस अभ्यास के लिए, हम एक सीएलआई उदाहरण (एक एकल एम्बेडेड थ्रेड डिवाइस) और एक रेडियो सह-प्रोसेसर (आरसीपी) उदाहरण का अनुकरण करने जा रहे हैं।

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

ot-ctl , RCP को प्रबंधित और कॉन्फ़िगर करने के लिए ot-daemon द्वारा प्रदान किया गया CLI है। इसका उपयोग करके, हम RCP को थ्रेड डिवाइस द्वारा बनाए गए नेटवर्क से जोड़ेंगे।

डाक में काम करनेवाला मज़दूर

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

ओट-डेमन का उपयोग करें

यह अभ्यास निम्नलिखित के लिए तीन टर्मिनल विंडो का उपयोग करेगा:

  1. नकली धागा डिवाइस का सीएलआई उदाहरण (नोड 1)
  2. ot-daemon प्रक्रिया
  3. ot-ctl सीएलआई उदाहरण

1. प्रारंभ करें नोड 1

पहले टर्मिनल विंडो में, अपने उत्सर्जित थ्रेड डिवाइस के लिए CLI प्रक्रिया स्पॉन करें:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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
Master 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 start
Done

नोड 1 के थ्रेड इंटरफ़ेस को निर्दिष्ट 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
>

जैसा कि Simulate a Thread network स्टेप में बताया गया है, एक एड्रेस लिंक-लोकल ( fe80 ) है और तीन मेश-लोकल ( fd ) हैं। ईआईडी एक जाल-स्थानीय पता है जिसमें ff:fe00 शामिल नहीं है ff:fe00 पते में 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

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

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

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-daemon -v \
    'spinel+hdlc+forkpty://output/simulation/bin/ot-rcp?forkpty-arg=2'

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

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

3. नेटवर्क से जुड़ने के लिए ot-ctl का उपयोग करें

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

तीसरा टर्मिनल विंडो खोलें और मौजूदा कंटेनर को निष्पादित करें:

$ docker exec -it codelab_otsim_ctnr bash

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

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-ctl
>

नोड 2 (आरसीपी नोड) की state की जांच करें जिसे आपने ot-daemon साथ शुरू किया था:

> state
disabled
Done

विशिष्ट योजक में शामिल होने को प्रतिबंधित करने के लिए, नोड 2 का eui64 प्राप्त करें:

> eui64
18b4300000000001
Done

नोड 1 पर, कमिश्नर शुरू करें और केवल उस eui64 में शामिल होने को प्रतिबंधित करें:

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

नोड 2 पर, नेटवर्क इंटरफ़ेस लाएँ और नेटवर्क से जुड़ें:

01cbeaeaab0

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

Join success

एक योजक के रूप में, आरसीपी (नोड 2) ने सफलतापूर्वक आयुक्त (नोड 1) के साथ प्रमाणित किया और थ्रेड नेटवर्क क्रेडेंशियल्स प्राप्त किया।

अब Node 2 को थ्रेड नेटवर्क में शामिल करें:

> thread start
Done

4. नेटवर्क प्रमाणीकरण सत्यापित करें

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

> state
child
Done
...
> state
router
Done

5. कनेक्टिविटी को मान्य करें

छोड़ो ot-ctl Ctrl + D का उपयोग करके और अपने होस्ट मशीन के कमांड लाइन, पिंग पर नोड 1, के साथ अपने ईआईडी का उपयोग कर ping6 आदेश। यदि ot-daemon आरसीपी इंस्टेंस सफलतापूर्वक थ्रेड नेटवर्क के साथ जुड़ने और संचार करने में सफल होता है, तो पिंग सफल होता है:

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

यदि आपने डॉकटर कंटेनर को बाहर निकाल दिया है

bash संकेत देता है , आपको यह जांचने की आवश्यकता हो सकती है कि यह चल रहा है और आवश्यकतानुसार पुन: प्रारंभ / पुनः दर्ज करें।

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

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

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

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

यदि आपको कंटेनर codelab_otsim_ctnr या तो codelab_otsim_ctnr docker ps कमांड के आउटपुट में नहीं दिखता है, तो इसे फिर से चलाएँ:

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

तो कंटेनर बंद कर दिया जाता है (में सूचीबद्ध docker ps -a नहीं बल्कि docker ps ), उसे पुन: प्रारंभ:

077c8080d0

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

$ docker exec -it codelab_otsim_ctnr bash

आपने सफलतापूर्वक OpenThread का उपयोग करके अपने पहले थ्रेड नेटवर्क का अनुकरण किया है। बहुत बढ़िया!

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

  • OpenThread सिमुलेशन डॉकर कंटेनर को शुरू और प्रबंधित करें
  • एक थ्रेड नेटवर्क का अनुकरण करें
  • थ्रेड नोड्स को प्रमाणित करें
  • OpenThread Daemon के साथ एक थ्रेड नेटवर्क प्रबंधित करें

थ्रेड और ओपनथ्रेड के बारे में अधिक जानने के लिए, इन संदर्भों को देखें:

या, डॉकटर कंटेनर में ओपनथ्रेड बॉर्डर राउटर का उपयोग करने का प्रयास करें!