थ्रेड बॉर्डर राऊटर - थ्रेड 1.2 मल्टीकास्ट

1. शुरुआती जानकारी

608c4c35050eb280.png

थ्रेड क्या है?

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

OpenThread क्या है?

Google की ओर से रिलीज़ किया गया OpenThread Thread® का एक ओपन सोर्स लागू करने का तरीका है.

OpenThread बॉर्डर राऊटर क्या है?

Google का रिलीज़ किया गया OpenThread बॉर्डर राऊटर (OTBR) Thread बॉर्डर बॉर्डर को ओपन-सोर्स लागू करता है.

थ्रेड 1.2 मल्टीकास्ट

थ्रेड 1.2 में कई तरह के फ़ीचर शामिल हैं. इनका इस्तेमाल करके, कई तरह के नेटवर्क (थ्रेड और वाई-फ़ाई/ईथरनेट नेटवर्क सेगमेंट) पर एक से ज़्यादा कास्ट किए जा सकते हैं. नेटवर्क से ज़्यादा जगहों पर मल्टीकास्ट कास्ट करने की सुविधा काम करती है.

थ्रेड 1.2 बॉर्डर राऊटर अपने बैकबोन राऊटर (BBR) डेटासेट को रजिस्टर करता है. साथ ही, चुनी गई BBR सेवा, प्राइमरी बैकबोन राऊटर (PBBR) है, जो मल्टीकास्ट इनबाउंड/आउटबाउंड के लिए ज़िम्मेदार है.

थ्रेड 1.2 डिवाइस, मल्टीकास्ट पते को PBBR (मल्टीकास्ट ऑडियंस रजिस्ट्रेशन, MLR for संक्षिप्त) के लिए रजिस्टर करने के लिए CoAP मैसेज भेजता है. ऐसा तब किया जाता है, जब पता लोकल से बड़ा हो. PBBR अपने एक्सटर्नल इंटरफ़ेस पर MLDv2 का इस्तेमाल करता है, ताकि IPv6 LAN/WAN के बारे में उसे ज़्यादा से ज़्यादा IPv6 मल्टीकास्ट ग्रुप के बारे में बताया जा सके. साथ ही, यह अपने लोकल थ्रेड नेटवर्क की तरफ़ से सुनना चाहता है. अगर डेस्टिनेशन ने कम से कम एक थ्रेड डिवाइस की सदस्यता ली है, तो PBBR सिर्फ़ थ्रेड नेटवर्क में मल्टीकास्ट ट्रैफ़िक को फ़ॉरवर्ड करता है.

थ्रेड 1.2 कम से कम डिवाइस पर, मल्टीकास्ट पते को एग्रीगेट करने के लिए वे अपने माता-पिता की मदद ले सकते हैं या अपनी ओर से एमएलआर सेट कर सकते हैं. इसके अलावा, अगर वे पैरंट 1.1 वर्शन वाले हैं, तो वे खुद को रजिस्टर कर सकते हैं.

ज़्यादा जानकारी के लिए, कृपया थ्रेम 1.2 स्पेसिफ़िकेशन 5.24 मल्टीकास्ट फ़ॉरवर्डिंग का इस्तेमाल करें, जो रेल्म के लोकल स्कोप से ज़्यादा है देखें.

आपको क्या बनाना है

इस कोडलैब में, थ्रेड बॉर्डर राऊटर और दो थ्रेड डिवाइसों को सेट अप किया जाएगा. इसके बाद, थ्रेड डिवाइसों और वाई-फ़ाई डिवाइसों पर, मल्टीकास्ट सुविधाओं को चालू और पुष्टि किया जा सकेगा.

आपको इनके बारे में जानकारी मिलेगी

  • Thread 1.2 मल्टीकास्ट सुविधाओं के साथ nRF52840 फ़र्मवेयर बनाने का तरीका.
  • Thread डिवाइसों पर, IPv6 मल्टीकास्ट पतों की सदस्यता लेने का तरीका.

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

  • Raspबेरी Pi 3/4 डिवाइस और एसडी कार्ड जिसमें कम से कम 8 जीबी क्षमता हो.
  • तीन नॉर्डिक सेमीकंडक्टर nRF52840 डीके बोर्ड.
  • ऐसा वाई-फ़ाई एपी जिसके लिए IPv6 राऊटर के विज्ञापन गार्ड मौजूद नहीं हैं.
  • Linux/macOS लैपटॉप (Raspबेरी Pi भी काम करता है) के साथ इसमें Python3 इंस्टॉल किया गया है.

2. OTBR सेटअप करें

Thread बॉर्डर बॉर्डर - बाईडायरेक्शनल IPv6 कनेक्टिविटी और डीएनएस-आधारित सर्विस डिस्कवरी कोडलैब का इस्तेमाल करके, Raspber Pi पर थ्रेड बॉर्डर राऊटर सेट अप करें.

पूरा होने पर, Raspber Pi को एक सक्रिय Thread नेटवर्क बना लेना चाहिए और वाई-फ़ाई नेटवर्क से कनेक्ट कर दिया जाना चाहिए.

OTBR कुछ ही सेकंड में प्राइमरी बैकर राऊटर बन जाना चाहिए.

$ sudo ot-ctl bbr state
Primary
Done
$ sudo ot-ctl bbr
BBR Primary:
server16: 0xD800
seqno:    23
delay:    1200 secs
timeout:  3600 secs
Done

3. बिल्ड और फ़्लैश थ्रेड डिवाइस

मल्टीकास्ट के साथ Thread 1.2 सीएलआई ऐप्लिकेशन बनाएं. इसके बाद, दो nRF52840 डीके बोर्ड फ़्लैश करें.

nRF52840 DK फ़र्मवेयर बनाना

प्रोजेक्ट को क्लोन करने और nRF52840 फ़र्मवेयर बनाने के निर्देशों का पालन करें.

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recurse-submodules --depth 1 https://github.com/openthread/ot-nrf528xx.git
$ cd ot-nrf528xx/
$ script/build nrf52840 USB_trans -DOT_MLR=ON -DOT_THREAD_VERSION=1.2
$ arm-none-eabi-objcopy -O ihex build/bin/ot-cli-ftd ot-cli-ftd.hex

हमने ot-cli-ftd.hex पर HEX फ़र्मवेयर की जानकारी ढूंढ ली है.

फ़्लैश nRF52840 DK फ़र्मवेयर

nrfjprog का इस्तेमाल करके फ़र्मवेयर को nRF52840 DK पर फ़्लैश करें. यह nRF कमांड लाइन टूल का हिस्सा है.

$ nrfjprog -f nrf52 --chiperase --program ot-cli-ftd.hex --reset

4. Thread नेटवर्क के साथ, Thread डिवाइसों को अटैच करें

OTBR ने पिछले चरणों में Thread नेटवर्क बनाया है. अब हम nRF52840 DK को थ्रेड नेटवर्क में जोड़ सकते हैं:

OTBR से रॉ ऐक्टिव डेटासेट पाएं:

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

किसी nRF52840 DK बोर्ड से कनेक्ट करें:

$ screen /dev/ttyACM0 115200

nRF52840 DK के लिए ऐक्टिव डेटासेट कॉन्फ़िगर करें:

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

थ्रेड स्टैक शुरू करें और कुछ सेकंड इंतज़ार करें. साथ ही, पुष्टि करें कि डिवाइस सही तरीके से अटैच हो गया है:

> ifconfig up
Done
> thread start
Done
> state
child

थ्रेड नेटवर्क में अन्य nRF52840 डीके बोर्ड को जोड़ने के लिए, ऊपर बताया गया तरीका दोहराएं.

हमने अब Thread नेटवर्क को तीन थ्रेड डिवाइसों के साथ सेट अप कर दिया है: OTBR और दो nRF52840 DK बोर्ड.

5. वाई-फ़ाई नेटवर्क सेटअप करें

OTBR और लैपटॉप पर वाई-फ़ाई नेटवर्क सेटअप करें, ताकि वे एक ही वाई-फ़ाई AP से कनेक्ट हो जाएं.

हम Raspber Pi OTBR पर, वाई-फ़ाई SSID और लंबे पासवर्ड को सेट अप करने के लिए ranpi-config का इस्तेमाल कर सकते हैं.

अंतिम नेटवर्क टोपोलॉजी नीचे दिखाई गई है:

5d0f36fd69ebcc9a.png

6. IPv6 मल्टीकास्ट पते की सदस्यता लेना

n052840 End Device 1 पर ff05::abcd की सदस्यता लें:

> ipmaddr add ff05::abcd
Done

पुष्टि करें कि ff05::abcd ने सदस्यता ले ली है:

> ipmaddr
ff33:40:fdde:ad00:beef:0:0:1
ff32:40:fdde:ad00:beef:0:0:1
ff05:0:0:0:0:0:0:abcd            <--- ff05::abcd subscribed
ff02:0:0:0:0:0:0:2
ff03:0:0:0:0:0:0:2
ff02:0:0:0:0:0:0:1
ff03:0:0:0:0:0:0:1
ff03:0:0:0:0:0:0:fc
Done

लैपटॉप पर ff05::abcd की सदस्यता लें:

लैपटॉप पर मल्टीकास्ट पते की सदस्यता लेने के लिए, हमें Python स्क्रिप्ट subscribe6.py की ज़रूरत है.

नीचे दिए गए कोड को कॉपी करके, subscribe6.py के तौर पर सेव करें:

import ctypes
import ctypes.util
import socket
import struct
import sys

libc = ctypes.CDLL(ctypes.util.find_library('c'))
ifname, group = sys.argv[1:]
addrinfo = socket.getaddrinfo(group, None)[0]
assert addrinfo[0] == socket.AF_INET6
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
interface_index = libc.if_nametoindex(ifname.encode('ascii'))
mreq = group_bin + struct.pack('@I', interface_index)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
print("Subscribed %s on interface %s." % (group, ifname))
input('Press ENTER to quit.')

वाई-फ़ाई नेटवर्क इंटरफ़ेस (उदा. wlan0) पर ff05::abcd की सदस्यता लेने के लिए subscribe6.py चलाएं:

$ sudo python3 subscribe6.py wlan0 ff05::abcd
Subscribed ff05::abcd on interface wlan0.
Press ENTER to quit.

मल्टीकास्ट सदस्यताओं के साथ नेटवर्क की आखिरी टोपोलॉजी नीचे दी गई है:

b118448c98b2d583.png

अब हमने थ्रेड नेटवर्क में nRF52840 एंड डिवाइस 1, और वाई-फ़ाई नेटवर्क में लैपटॉप, दोनों के लिए IPv6 मल्टीकास्ट पते की सदस्यता ले ली है. हम इन सेक्शन में, दो-दिशाओं वाले IPv6 मल्टीकास्ट रीचेबिलिटी की पुष्टि करने जा रहे हैं.

7. इनबाउंड IPv6 मल्टीकास्ट की पुष्टि करें

अब हमें, थ्रेड नेटवर्क में nRF52840 End Device 1 और लैपटॉप पर वाई-फ़ाई नेटवर्क के IPv6 मल्टीकास्ट पते ff05::abcd का इस्तेमाल करके, दोनों डिवाइसों को ऐक्सेस करने की सुविधा मिलनी चाहिए.

वाई-फ़ाई इंटरफ़ेस से OTBR पर f05::abcd को पिंग करें:

$ ping -6 -b -t 5 -I wlan0 ff05::abcd
PING ff05::abcd(ff05::abcd) from 2401:fa00:41:801:83c1:a67:ae22:5346 wlan0: 56 data bytes
64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=1 ttl=64 time=57.4 ms
64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=1 ttl=64 time=84.9 ms (DUP!)
64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=2 ttl=64 time=54.8 ms
64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=2 ttl=64 time=319 ms (DUP!)
64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=3 ttl=64 time=57.5 ms
64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=3 ttl=64 time=239 ms (DUP!)

# If using MacOS, use this command. The interface is typically not "wlan0" for Mac.
$ ping6 -h 5 -I wlan0 ff05::abcd

हमें पता चला है कि OTBR को nRF52840 End Device 1 और लैपटॉप, दोनों से दो पिंग जवाब मिल सकते हैं. ऐसा इसलिए है, क्योंकि दोनों ने ff05::abcd की सदस्यता ली है. इससे पता चलता है कि OTBR से, वाई-फ़ाई नेटवर्क से IPv6 पिंग अनुरोध मल्टीकास्ट पैकेट को थ्रेड नेटवर्क पर भेजा जा सकता है.

8. आउटबाउंड IPv6 मल्टीकास्ट की पुष्टि करें

nRF52840 End Device 2 पर ff5::abcd को पिंग करें:

> ping ff05::abcd 100 10 1
108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=12 hlim=64 time=297ms
108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=12 hlim=63 time=432ms
108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=13 hlim=64 time=193ms
108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=13 hlim=63 time=306ms
108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=14 hlim=64 time=230ms
108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=14 hlim=63 time=279ms

nRF52840 एंड डिवाइस 2 को nRF52840 एंड डिवाइस 1 और लैपटॉप, दोनों से पिंग किया गया जवाब मिल सकता है. इससे पता चलता है कि OTBR, थ्रेड6 नेटवर्क के IPv6 पिंग जवाब मल्टीकास्ट पैकेज को वाई-फ़ाई नेटवर्क पर फ़ॉरवर्ड कर सकता है.

9. बधाई हो

बधाई हो, आपने थ्रेड बॉर्डर राऊटर सेट कर लिया है. साथ ही, आपने दो दिशाओं में चलने वाले IPv6 मल्टीकास्ट की पुष्टि कर ली है!

OpenThread पर ज़्यादा जानकारी के लिए, openthread.io पर जाएं.

रेफ़रंस के लिए दस्तावेज़: