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

1. परिचय

608c4c35050eb280.png

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

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

OpenThread क्या है?

Google की ओर से रिलीज़ किया गया Openथ्रेड, Thread® का ओपन सोर्स इस्तेमाल है.

OpenThread Border राऊटर क्या है?

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

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

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

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

अगर थ्रेड स्थानीय क्षेत्र से बड़ा है, तो थ्रेड 1.2 डिवाइस, PBBR (मल्टीकास्ट लिसनर रजिस्ट्रेशन, एमएलआर के लिए मल्टीकास्ट पता) को रजिस्टर करने के लिए CoAP मैसेज भेजता है. PBBR अपने स्थानीय थ्रेड नेटवर्क की ओर से, IPv6 मल्टीकास्ट समूहों के बारे में व्यापक IPv6 LAN/WAN को बताने के लिए अपने बाहरी इंटरफ़ेस पर MLDv2 का इस्तेमाल करता है. और पीबीबीआर, मल्टीकास्ट ट्रैफ़िक को थ्रेड नेटवर्क में सिर्फ़ तब फ़ॉरवर्ड करती है, जब डेस्टिनेशन में कम से कम एक थ्रेड की सदस्यता ली गई हो.

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

ज़्यादा जानकारी के लिए, कृपया Thread_1.2 Specification सेक्शन 5.24 के मल्टीकास्ट फ़ॉरवर्ड करने की सुविधा के इस्तेमाल के बारे में जानें. यह काम, Realm-Local दायरे से ज़्यादा है.

आप क्या बनाएंगे

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

आप क्या जानेंगे

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

आपको किन चीज़ों की ज़रूरत होगी

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

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

इसे फ़ॉलो करेंथ्रेड बॉर्डर राऊटर - दोतरफ़ा लिंक करने वाला IPv6 कनेक्टिविटी और डीएनएस आधारित सेवा डिस्कवरी Raspबेरी Pi में थ्रेड बॉर्डर राऊटर सेट अप करने के लिए कोडलैब (कोड बनाना सीखना) करें.

यह पूरा हो जाने पर, रसभरी पिअ का काम कर रहा कोई थ्रेड नेटवर्क बना देगा और किसी वाई-फ़ाई नेटवर्क से कनेक्ट हो जाएगा.

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. बिल्ड और फ़्लैश थ्रेड डिवाइस

मल्टीकास्ट के साथ थ्रेड 1.2 CLI ऐप्लिकेशन बनाएं और दो nRF52840 DK बोर्ड फ़्लैश करें.

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 फ़र्मवेयर मिल सकता है.

Flash nRF52840 DK फ़र्मवेयर

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

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

4. थ्रेड वाले डिवाइस को थ्रेड नेटवर्क से जोड़ें

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

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

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

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

$ screen /dev/ttyACM0 115200

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

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

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

> ifconfig up
Done
> thread start
Done
> state
child

अन्य nRF52840 DK बोर्ड को थ्रेड नेटवर्क से अटैच करने के लिए ऊपर दिए गए चरणों को दोहराएं.

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

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

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

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

नेटवर्क की आखिरी जानकारी दिखाने का तरीका नीचे दिया गया है:

5d0f36fd69ebcc9a.png

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

nRF52840 असली डिवाइस 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 मल्टीकास्ट की पुष्टि करें

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

वाई-फ़ाई इंटरफ़ेस के ज़रिए OTBR पर पिंग करें::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!)

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

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

पिंग f05::abcd on nRF52840 असली डिवाइस 2:

$ 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, IPv6 पिंग जवाब मल्टीकास्ट पैकेज को थ्रेड नेटवर्क से वाई-फ़ाई नेटवर्क पर फ़ॉरवर्ड कर सकता है.

9. बधाई हो

बधाई हो, आपने Thread Border राऊटर सेट अप कर लिया है और दो दिशाओं में होने वाले IPv6 मल्टीकास्ट को पुष्टि कर ली है!

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

संदर्भ दस्तावेज़: