1. ভূমিকা

থ্রেড কি?
থ্রেড হল একটি আইপি-ভিত্তিক লো-পাওয়ার ওয়্যারলেস মেশ নেটওয়ার্কিং প্রোটোকল যা ডিভাইস-টু-ডিভাইস এবং ডিভাইস-টু-ক্লাউড যোগাযোগকে সুরক্ষিত করে। থ্রেড নেটওয়ার্কগুলি একক-পয়েন্ট ব্যর্থতা এড়াতে টপোলজি পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে।
ওপেনথ্রেড কী?
গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড হল থ্রেড® এর একটি ওপেন-সোর্স বাস্তবায়ন।
ওপেনথ্রেড বর্ডার রাউটার কী?
গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড বর্ডার রাউটার (OTBR) হল থ্রেড বর্ডার রাউটারের একটি ওপেন-সোর্স বাস্তবায়ন।
IPv6 মাল্টিকাস্ট
থ্রেড রিয়েলম লোকালের চেয়ে বড় স্কোপের মাল্টিকাস্ট ঠিকানার জন্য একটি ভিন্নধর্মী নেটওয়ার্ক (থ্রেড এবং ওয়াই-ফাই/ইথারনেট নেটওয়ার্ক বিভাগ) জুড়ে মাল্টিকাস্ট সমর্থন করার জন্য বৈশিষ্ট্যগুলির একটি সিরিজ সংজ্ঞায়িত করে।
একটি থ্রেড বর্ডার রাউটার তার ব্যাকবোন রাউটার (BBR) ডেটাসেট নিবন্ধন করে এবং নির্বাচিত BBR পরিষেবাটি হল প্রাইমারি ব্যাকবোন রাউটার (PBBR), যা মাল্টিকাস্ট ইনবাউন্ডিং/আউটবাউন্ডিং ফরোয়ার্ডের জন্য দায়ী।
একটি থ্রেড ডিভাইস মাল্টিকাস্ট ঠিকানাটি PBBR (মাল্টিকাস্ট লিসেনার রেজিস্ট্রেশন, সংক্ষেপে MLR) -এ নিবন্ধন করার জন্য একটি CoAP বার্তা পাঠায় যদি ঠিকানাটি realm local এর চেয়ে বড় হয়। PBBR তার স্থানীয় থ্রেড নেটওয়ার্কের পক্ষ থেকে, IPv6 মাল্টিকাস্ট গ্রুপগুলি সম্পর্কে বৃহত্তর IPv6 LAN/WAN-এর সাথে যোগাযোগ করার জন্য তার বহিরাগত ইন্টারফেসে MLDv2 ব্যবহার করে। এবং PBBR শুধুমাত্র তখনই থ্রেড নেটওয়ার্কে মাল্টিকাস্ট ট্র্যাফিক ফরোয়ার্ড করে যদি গন্তব্যটি কমপক্ষে একটি থ্রেড ডিভাইস দ্বারা সাবস্ক্রাইব করা থাকে।
থ্রেড মিনিমাল এন্ড ডিভাইসের জন্য, তারা মাল্টিকাস্ট ঠিকানা একত্রিত করার জন্য তাদের পিতামাতার উপর নির্ভর করতে পারে এবং তাদের পক্ষে MLR করতে পারে, অথবা যদি তাদের পিতামাতা থ্রেড 1.1 ব্যবহার করে থাকে তবে তারা নিজেদের নিবন্ধন করতে পারে।
আরও বিস্তারিত জানার জন্য, অনুগ্রহ করে থ্রেড স্পেসিফিকেশন দেখুন।
তুমি কী তৈরি করবে
এই কোডল্যাবে, আপনি একটি থ্রেড বর্ডার রাউটার এবং দুটি থ্রেড ডিভাইস সেট আপ করতে যাচ্ছেন, তারপর থ্রেড ডিভাইস এবং ওয়াই-ফাই ডিভাইসে মাল্টিকাস্ট বৈশিষ্ট্যগুলি সক্ষম এবং যাচাই করবেন।
তুমি কি শিখবে
- IPv6 মাল্টিকাস্ট সাপোর্ট সহ nRF52840 ফার্মওয়্যার কীভাবে তৈরি করবেন।
- থ্রেড ডিভাইসে IPv6 মাল্টিকাস্ট ঠিকানাগুলিতে কীভাবে সাবস্ক্রাইব করবেন।
তোমার যা লাগবে
- একটি লিনাক্স ওয়ার্কস্টেশন, যা একটি থ্রেড আরসিপি, ওপেনথ্রেড সিএলআই তৈরি এবং ফ্ল্যাশ করার জন্য এবং আইপিভি৬ মাল্টিকাস্ট পরীক্ষা করার জন্য।
- থ্রেড বর্ডার রাউটারের জন্য একটি রাস্পবেরি পাই।
- ২টি নর্ডিক সেমিকন্ডাক্টর nRF52840 USB ডঙ্গেল (একটি RCP এর জন্য এবং দুটি থ্রেড এন্ড ডিভাইসের জন্য)।
2. OTBR সেটআপ করুন
OTBR সেটআপ করার দ্রুততম উপায় হল OTBR সেটআপ গাইড অনুসরণ করা।
OTBR সেটআপ সম্পূর্ণ হওয়ার পর, ot-ctl ব্যবহার করে যাচাই করুন যে OTBR কয়েক সেকেন্ডের মধ্যে প্রাথমিক ব্যাকবোন রাউটার হয়ে উঠেছে।
> bbr state Primary Done > bbr BBR Primary: server16: 0xF800 seqno: 21 delay: 5 secs timeout: 3600 secs Done
৩. থ্রেড ডিভাইস তৈরি এবং ফ্ল্যাশ করুন
মাল্টিকাস্ট দিয়ে থ্রেড সিএলআই অ্যাপ্লিকেশন তৈরি করুন এবং দুটি nRF52840 ডিকে বোর্ড ফ্ল্যাশ করুন।
nRF52840 DK ফার্মওয়্যার তৈরি করুন
প্রকল্পটি ক্লোন করতে এবং nRF52840 ফার্মওয়্যার তৈরি করতে নির্দেশাবলী অনুসরণ করুন।
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
nRF52840 বোর্ড এবং OpenThread codelab দিয়ে "Build a Thread network" লেখাটি চালিয়ে যান। CLI ইমেজ সহ শেষ ডিভাইসটি ফ্ল্যাশ করার পরে, "থ্রেড নেটওয়ার্কে দ্বিতীয় নোডটি যোগ করুন" অনুসরণ করুন যাতে থ্রেড ডিভাইসটি থ্রেড নেটওয়ার্কে যোগ করা যায়। দ্বিতীয় থ্রেড এন্ড ডিভাইসের জন্য পুনরাবৃত্তি করুন।
৪. IPv6 মাল্টিকাস্ট ঠিকানায় সাবস্ক্রাইব করুন
nRF52840 এন্ড ডিভাইস ১-এ ff05::abcd সাবস্ক্রাইব করুন:
> ipmaddr add ff05::abcd Done
ff05::abcd সফলভাবে সাবস্ক্রাইব হয়েছে কিনা তা যাচাই করুন:
> ipmaddr ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 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 নেটওয়ার্ক ইন্টারফেসে (যেমন wlan0) ff05::abcd সাবস্ক্রাইব করতে subscribe6.py চালান:
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
মাল্টিকাস্ট সাবস্ক্রিপশন সহ চূড়ান্ত নেটওয়ার্ক টপোলজি নীচে দেখানো হয়েছে:

এখন যেহেতু আমরা থ্রেড নেটওয়ার্কে nRF52840 এন্ড ডিভাইস 1 এবং ওয়াই-ফাই নেটওয়ার্কে ল্যাপটপ উভয়ের জন্য IPv6 মাল্টিকাস্ট ঠিকানা সাবস্ক্রাইব করেছি, আমরা নিম্নলিখিত বিভাগগুলিতে দ্বি-মুখী IPv6 মাল্টিকাস্ট পৌঁছানোযোগ্যতা যাচাই করতে যাচ্ছি।
৫. ইনবাউন্ড IPv6 মাল্টিকাস্ট যাচাই করুন
এখন, আমরা Wi-Fi নেটওয়ার্ক থেকে IPv6 মাল্টিকাস্ট ঠিকানা ff05::abcd ব্যবহার করে থ্রেড নেটওয়ার্কে nRF52840 End Device 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 End Device 1 এবং Laptop উভয় থেকেই দুটি পিং উত্তর পেতে পারে কারণ তারা উভয়ই ff05::abcd তে সাবস্ক্রাইব করেছে। এটি দেখায় যে OTBR IPv6 Ping Request মাল্টিকাস্ট প্যাকেটগুলি Wi-Fi নেটওয়ার্ক থেকে Thread নেটওয়ার্কে ফরোয়ার্ড করতে পারে।
৬. আউটবাউন্ড 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 End Device 2, nRF52840 End Device 1 এবং ল্যাপটপ উভয় থেকেই পিং রিপ্লাই পেতে পারে। এটি দেখায় যে OTBR IPv6 পিং রিপ্লাই মাল্টিকাস্ট প্যাকেজগুলিকে থ্রেড নেটওয়ার্ক থেকে Wi-Fi নেটওয়ার্কে ফরোয়ার্ড করতে পারে।
৭. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে একটি থ্রেড বর্ডার রাউটার সেট আপ করেছেন এবং দ্বি-মুখী IPv6 মাল্টিকাস্ট যাচাই করেছেন!
OpenThread সম্পর্কে আরও জানতে, openthread.io দেখুন।
রেফারেন্স ডক্স: