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

1. परिचय

608c4c35050eb280.png

Thread क्या है?

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

OpenThread की सुविधा क्या है?

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

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

Google की ओर से रिलीज़ किया गया OpenThread Border Router (OTBR), Thread Border राऊटर के लिए ओपन सोर्स को लागू किया गया था.

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

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

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

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

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

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

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

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

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

  • Thread 1.2 मल्टीकास्ट फ़ीचर के साथ nRF52840 फ़र्मवेयर बनाने का तरीका.
  • Thread डिवाइसों पर, आईपीवी6 मल्टीकास्ट पते की सदस्यता लेने का तरीका.

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

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

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

Raspberry Pi पर Thread बॉर्डर राऊटर को सेट अप करने के लिए Thread Border राऊटर - दो-तरफ़ा IPv6 कनेक्टिविटी और डीएनएस-आधारित सेवा डिस्कवरी कोडलैब का पालन करें.

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

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

$ 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 और फ़्लैश डिवाइस बनाएं

मल्टीकास्ट की मदद से Thread 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

हम कामयाब HEX फ़र्मवेयर को ot-cli-ftd.hex पर देख सकते हैं.

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

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

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

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

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

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

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

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

$ screen /dev/ttyACM0 115200

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

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

Thread स्टैक शुरू करें और कुछ सेकंड इंतज़ार करें. इसके बाद, देखें कि डिवाइस सही तरीके से अटैच हो गया है या नहीं:

> ifconfig up
Done
> thread start
Done
> state
child

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

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

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

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

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

फ़ाइनल नेटवर्क टोपोलॉजी नीचे दिखाया गया है:

5d0f36fd69ebcc9a.png

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

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

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

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

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

वाई-फ़ाई इंटरफ़ेस से, OTBR पर ff05::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 एंड डिवाइस 1 और लैपटॉप, दोनों से दो पिंग जवाब मिल सकते हैं क्योंकि उन दोनों ने ff05::abcd की सदस्यता ली हुई है. इससे पता चलता है कि ओटीबीआर, आईपीवी6 पिंग रिक्वेस्ट मल्टीकास्ट पैकेट को वाई-फ़ाई नेटवर्क से Thread नेटवर्क पर फ़ॉरवर्ड कर सकता है.

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

पिंग ff05::abcd 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 End डिवाइस 1 और लैपटॉप, दोनों से पिंग जवाब मिल सकते हैं. इससे पता चलता है कि OTBR, आईपीवी6 पिंग रिप्लाई मल्टीकास्ट पैकेज को Thread नेटवर्क से वाई-फ़ाई नेटवर्क पर फ़ॉरवर्ड कर सकता है.

9. बधाई हो

बधाई हो, आपने Thread Border राऊटर को सेट अप कर लिया है. साथ ही, दो-तरफ़ा IPv6 मल्टीकास्ट को सेट अप कर लिया है!

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

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