থ্রেড বর্ডার রাউটার - থ্রেড 1.2 মাল্টিকাস্ট

1. ভূমিকা

608c4c35050eb280.png

থ্রেড কি?

থ্রেড হল একটি আইপি-ভিত্তিক লো-পাওয়ার ওয়্যারলেস মেশ নেটওয়ার্কিং প্রোটোকল যা সুরক্ষিত ডিভাইস-টু-ডিভাইস এবং ডিভাইস-টু-ক্লাউড যোগাযোগ সক্ষম করে। থ্রেড নেটওয়ার্ক একক-পয়েন্ট ব্যর্থতা এড়াতে টপোলজি পরিবর্তনের সাথে মানিয়ে নিতে পারে।

OpenThread কি?

Google দ্বারা প্রকাশিত OpenThread হল Thread®-এর একটি ওপেন-সোর্স বাস্তবায়ন।

একটি OpenThread বর্ডার রাউটার কি?

Google দ্বারা প্রকাশিত OpenThread Border Router (OTBR) হল থ্রেড বর্ডার রাউটারের একটি ওপেন-সোর্স বাস্তবায়ন।

থ্রেড 1.2 মাল্টিকাস্ট

থ্রেড 1.2 একটি ভিন্নধর্মী নেটওয়ার্ক (থ্রেড এবং ওয়াই-ফাই/ইথারনেট নেটওয়ার্ক সেগমেন্ট) জুড়ে মাল্টিকাস্টকে সমর্থন করার জন্য বৈশিষ্ট্যগুলির একটি সিরিজ সংজ্ঞায়িত করে যাতে মাল্টিকাস্ট অ্যাড্রেসের জন্য এলাকা স্থানীয়ের চেয়ে বড় সুযোগ রয়েছে।

একটি থ্রেড 1.2 বর্ডার রাউটার তার ব্যাকবোন রাউটার (BBR) ডেটাসেট নিবন্ধন করে এবং নির্বাচিত BBR পরিষেবা হল প্রাইমারি ব্যাকবোন রাউটার (PBBR), যা মাল্টিকাস্ট ইনবাউন্ডিং/আউটবাউন্ডিং ফরোয়ার্ডের জন্য দায়ী।

একটি থ্রেড 1.2 ডিভাইস পিবিবিআর (মাল্টিকাস্ট লিসেনার রেজিস্ট্রেশন, সংক্ষেপে এমএলআর) ঠিকানাটি স্থানীয় এলাকা থেকে বড় হলে একটি CoAP বার্তা পাঠায়। PBBR তার বাহ্যিক ইন্টারফেসে MLDv2 ব্যবহার করে বৃহত্তর IPv6 LAN/WAN-এর সাথে যোগাযোগ করতে IPv6 মাল্টিকাস্ট গোষ্ঠীগুলি সম্পর্কে যা শুনতে প্রয়োজন, তার স্থানীয় থ্রেড নেটওয়ার্কের পক্ষে। এবং PBBR শুধুমাত্র থ্রেড নেটওয়ার্কে মাল্টিকাস্ট ট্র্যাফিক ফরোয়ার্ড করে যদি গন্তব্যটি কমপক্ষে একটি থ্রেড ডিভাইস দ্বারা সাবস্ক্রাইব করা হয়।

থ্রেড 1.2 মিনিমাল এন্ড ডিভাইসের জন্য, তারা মাল্টিকাস্ট ঠিকানা একত্রিত করতে এবং তাদের পক্ষে এমএলআর করতে তাদের পিতামাতার উপর নির্ভর করতে পারে, অথবা যদি তাদের অভিভাবক থ্রেড 1.1 এর হয় তবে নিজেদের নিবন্ধন করতে পারে।

আরও বিশদ বিবরণের জন্য, অনুগ্রহ করে থ্রেড 1.2 স্পেসিফিকেশন বিভাগ 5.24 মাল্টিকাস্ট ফরোয়ার্ডিং দেখুন রিয়েলম-লোকাল স্কোপের চেয়ে বড়।

যা আপনি নির্মাণ করবেন

এই কোডল্যাবে, আপনি একটি থ্রেড বর্ডার রাউটার এবং দুটি থ্রেড ডিভাইস সেট আপ করতে যাচ্ছেন, তারপর থ্রেড ডিভাইস এবং ওয়াই-ফাই ডিভাইসে মাল্টিকাস্ট বৈশিষ্ট্যগুলি সক্ষম এবং যাচাই করুন৷

যা শিখবেন

  • থ্রেড 1.2 মাল্টিকাস্ট বৈশিষ্ট্য সহ nRF52840 ফার্মওয়্যার কীভাবে তৈরি করবেন।
  • কিভাবে থ্রেড ডিভাইসে IPv6 মাল্টিকাস্ট ঠিকানায় সদস্যতা নিতে হয়।

আপনি কি প্রয়োজন হবে

  • একটি রাস্পবেরি পাই 3/4 ডিভাইস এবং কমপক্ষে 8 জিবি ক্ষমতা সহ একটি SD কার্ড৷
  • 3 নর্ডিক সেমিকন্ডাক্টর nRF52840 DK বোর্ড।
  • IPv6 রাউটার বিজ্ঞাপন গার্ড ছাড়া একটি Wi-Fi AP রাউটারে সক্রিয়।
  • Python3 ইনস্টল সহ Linux/macOS ল্যাপটপ (রাস্পবেরি পাইও কাজ করে)।

2. OTBR সেটআপ করুন

রাস্পবেরি পাইতে একটি থ্রেড বর্ডার রাউটার সেট আপ করতে থ্রেড বর্ডার রাউটার - দ্বিমুখী IPv6 সংযোগ এবং DNS-ভিত্তিক পরিষেবা আবিষ্কার কোডল্যাব অনুসরণ করুন

সম্পূর্ণ হলে, রাস্পবেরি পাই একটি কার্যকরী থ্রেড নেটওয়ার্ক তৈরি করা উচিত এবং একটি Wi-Fi নেটওয়ার্কের সাথে সংযুক্ত হওয়া উচিত।

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 ফার্মওয়্যারটি খুঁজে পেতে পারি।

ফ্ল্যাশ 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 DK বোর্ডের সাথে সংযোগ করুন:

$ screen /dev/ttyACM0 115200

nRF52840 DK-এর জন্য সক্রিয় ডেটাসেট কনফিগার করুন:

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

থ্রেড স্ট্যাকটি শুরু করুন এবং কয়েক সেকেন্ডের জন্য অপেক্ষা করুন এবং ডিভাইসটি সফলভাবে সংযুক্ত হয়েছে তা যাচাই করুন:

> ifconfig up
Done
> thread start
Done
> state
child

থ্রেড নেটওয়ার্কে অন্যান্য nRF52840 DK বোর্ড সংযুক্ত করতে উপরের পদক্ষেপগুলি পুনরাবৃত্তি করুন।

আমরা এখন 3টি থ্রেড ডিভাইসের সাথে থ্রেড নেটওয়ার্ক সফলভাবে সেট আপ করেছি: OTBR এবং দুটি nRF52840 DK বোর্ড।

5. Wi-Fi নেটওয়ার্ক সেটআপ করুন৷

OTBR এবং ল্যাপটপে Wi-Fi নেটওয়ার্ক সেটআপ করুন যাতে তারা একই Wi-Fi AP এর সাথে সংযুক্ত থাকে।

আমরা রাস্পবেরি পাই ওটিবিআর-এ Wi-Fi SSID এবং পাসফ্রেজ সেটআপ করতে raspi-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-এ সদস্যতা নিন:

ল্যাপটপে একটি মাল্টিকাস্ট ঠিকানায় সদস্যতা নিতে আমাদের একটি পাইথন স্ক্রিপ্ট 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.')

Wi-Fi নেটওয়ার্ক ইন্টারফেসে ff05::abcd সাবস্ক্রাইব করতে subscribe6.py চালান (যেমন wlan0):

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

মাল্টিকাস্ট সাবস্ক্রিপশন সহ চূড়ান্ত নেটওয়ার্ক টপোলজি নীচে দেখানো হয়েছে:

b118448c98b2d583.png

এখন যেহেতু আমরা থ্রেড নেটওয়ার্কে nRF52840 এন্ড ডিভাইস 1 এবং Wi-Fi নেটওয়ার্কের ল্যাপটপ উভয়ের IPv6 মাল্টিকাস্ট ঠিকানা সাবস্ক্রাইব করেছি, আমরা নিম্নলিখিত বিভাগে দ্বি-দিকনির্দেশক IPv6 মাল্টিকাস্ট অ্যাক্সেসযোগ্যতা যাচাই করতে যাচ্ছি।

7. ইনবাউন্ড IPv6 মাল্টিকাস্ট যাচাই করুন

এখন, আমাদের Wi-Fi নেটওয়ার্ক থেকে IPv6 মাল্টিকাস্ট ঠিকানা ff05::abcd ব্যবহার করে থ্রেড নেটওয়ার্কে nRF52840 এন্ড ডিভাইস 1 এবং ল্যাপটপ উভয়েই পৌঁছাতে সক্ষম হওয়া উচিত।

Wi-Fi ইন্টারফেসের মাধ্যমে 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 এ সদস্যতা নিয়েছে। এটি দেখায় যে OTBR ওয়াই-ফাই নেটওয়ার্ক থেকে থ্রেড নেটওয়ার্কে IPv6 পিং অনুরোধ মাল্টিকাস্ট প্যাকেট ফরোয়ার্ড করতে পারে।

8. আউটবাউন্ড IPv6 মাল্টিকাস্ট যাচাই করুন

nRF52840 এন্ড ডিভাইস 2-এ পিং ff05::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 থ্রেড নেটওয়ার্ক থেকে IPv6 পিং রিপ্লাই মাল্টিকাস্ট প্যাকেজগুলিকে ওয়াই-ফাই নেটওয়ার্কে ফরোয়ার্ড করতে পারে।

9. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে একটি থ্রেড বর্ডার রাউটার সেট আপ করেছেন এবং দ্বি-মুখী IPv6 মাল্টিকাস্ট যাচাই করেছেন!

OpenThread সম্পর্কে আরও জানতে, openthread.io দেখুন।

রেফারেন্স ডক্স: