১. ভূমিকা

গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড হলো থ্রেড® নেটওয়ার্কিং প্রোটোকলের একটি ওপেন-সোর্স বাস্তবায়ন। গুগল নেস্ট, কানেক্টেড হোমের জন্য পণ্যের উন্নয়নকে ত্বরান্বিত করতে এবং নেস্ট পণ্যগুলিতে ব্যবহৃত প্রযুক্তিটি ডেভেলপারদের কাছে ব্যাপকভাবে সহজলভ্য করার জন্য ওপেনথ্রেড প্রকাশ করেছে।
থ্রেড স্পেসিফিকেশনটি হোম অ্যাপ্লিকেশনের জন্য একটি IPv6-ভিত্তিক নির্ভরযোগ্য, সুরক্ষিত এবং স্বল্প-শক্তিসম্পন্ন ওয়্যারলেস ডিভাইস-টু-ডিভাইস কমিউনিকেশন প্রোটোকল সংজ্ঞায়িত করে। ওপেনথ্রেড IPv6, 6LoWPAN, MAC সিকিউরিটিসহ IEEE 802.15.4, মেশ লিঙ্ক এস্টাবলিশমেন্ট এবং মেশ রাউটিং সহ সমস্ত থ্রেড নেটওয়ার্কিং লেয়ার বাস্তবায়ন করে।
এই কোডল্যাবে, আপনি বাস্তব হার্ডওয়্যারে ওপেনথ্রেড প্রোগ্রাম করবেন, একটি থ্রেড নেটওয়ার্ক তৈরি ও পরিচালনা করবেন এবং নোডগুলোর মধ্যে বার্তা আদান-প্রদান করবেন।

আপনি যা শিখবেন
- ডেভ বোর্ডে OpenThread CLI বাইনারি তৈরি এবং ফ্ল্যাশ করা
- একটি লিনাক্স মেশিন এবং একটি ডেভ বোর্ড নিয়ে একটি আরসিপি তৈরি করা
- OpenThread Daemon এবং
ot-ctlব্যবহার করে একটি RCP-এর সাথে যোগাযোগ - GNU Screen এবং OpenThread CLI ব্যবহার করে ম্যানুয়ালি থ্রেড নোড পরিচালনা করা
- থ্রেড নেটওয়ার্কে ডিভাইসগুলোর নিরাপদ কমিশনিং
- IPv6 মাল্টিকাস্ট কীভাবে কাজ করে
- UDP ব্যবহার করে থ্রেড নোডগুলির মধ্যে বার্তা আদান-প্রদান
আপনার যা যা লাগবে
হার্ডওয়্যার:
- ৩টি নর্ডিক সেমিকন্ডাক্টর nRF52840 ডেভ বোর্ড
- বোর্ডগুলো সংযোগ করার জন্য ৩টি ইউএসবি থেকে মাইক্রো-ইউএসবি কেবল
- কমপক্ষে ৩টি ইউএসবি পোর্ট সহ একটি লিনাক্স মেশিন
সফটওয়্যার:
- জিএনইউ টুলচেইন
- নর্ডিক nRF5x কমান্ড লাইন টুলস
- সেগার জে-লিঙ্ক সফটওয়্যার
- ওপেনথ্রেড
- গিট
২. শুরু করা
ওপেনথ্রেড সিমুলেশন
শুরু করার আগে, থ্রেডের প্রাথমিক ধারণা এবং ওপেনথ্রেড সিএলআই (OpenThread CLI)-এর সাথে পরিচিত হওয়ার জন্য আপনি ওপেনথ্রেড সিমুলেশন কোডল্যাবটি একবার দেখে নিতে পারেন।
সিরিয়াল পোর্ট টার্মিনাল
টার্মিনালের মাধ্যমে কীভাবে সিরিয়াল পোর্টে সংযোগ স্থাপন করতে হয়, সে সম্পর্কে আপনার ধারণা থাকা উচিত। এই কোডল্যাবটিতে GNU Screen ব্যবহার করা হয়েছে এবং এর ব্যবহারবিধি সম্পর্কে একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে, তবে অন্য যেকোনো টার্মিনাল সফটওয়্যারও ব্যবহার করা যেতে পারে।
লিনাক্স মেশিন
এই কোডল্যাবটি একটি i386- বা x86-ভিত্তিক লিনাক্স মেশিনকে রেডিও কো-প্রসেসর (RCP) থ্রেড ডিভাইসের হোস্ট হিসেবে ব্যবহার করার জন্য এবং সমস্ত থ্রেড ডেভেলপমেন্ট বোর্ড ফ্ল্যাশ করার জন্য ডিজাইন করা হয়েছিল। সমস্ত ধাপ উবুন্টু 14.04.5 LTS (ট্রাস্টি টাহর)-এ পরীক্ষা করা হয়েছিল।
নর্ডিক সেমিকন্ডাক্টর nRF52840 বোর্ড
এই কোডল্যাবে তিনটি nRF52840 PDK বোর্ড ব্যবহার করা হয়েছে।

SEGGER J-Link ইনস্টল করুন
আমরা nRF52840 বোর্ডগুলো প্রোগ্রাম করার জন্য SEGGER J-Link ব্যবহার করি, যেগুলোতে অনবোর্ড JTAG মডিউল রয়েছে। এটি আপনার লিনাক্স মেশিনে ইনস্টল করুন।
আপনার মেশিনের জন্য উপযুক্ত প্যাকেজটি ডাউনলোড করুন এবং সঠিক স্থানে ইনস্টল করুন। লিনাক্সে এটি হলো /opt/SEGGER/JLink ।
nRF5x কমান্ড লাইন টুলস ইনস্টল করুন
nRF5x কমান্ড লাইন টুলস ব্যবহার করে আপনি nRF52840 বোর্ডগুলিতে OpenThread বাইনারিগুলি ফ্ল্যাশ করতে পারবেন। আপনার লিনাক্স মেশিনে উপযুক্ত nRF5x-Command-Line-Tools-<OS> বিল্ডটি ইনস্টল করুন।
এক্সট্র্যাক্ট করা প্যাকেজটি রুট ফোল্ডার ~/ -এ রাখুন।
ARM GNU টুলচেইন ইনস্টল করুন
বিল্ড করার জন্য ARM GNU টুলচেইন ব্যবহার করা হয়।
আমরা আপনার লিনাক্স মেশিনের /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/ ফোল্ডারে এক্সট্র্যাক্ট করা আর্কাইভটি রাখার পরামর্শ দিচ্ছি। ইনস্টলেশন নির্দেশাবলীর জন্য আর্কাইভটির readme.txt ফাইলে দেওয়া নির্দেশনাগুলো অনুসরণ করুন।
স্ক্রিন ইনস্টল করুন (ঐচ্ছিক)
স্ক্রিন হলো সিরিয়াল পোর্টের মাধ্যমে সংযুক্ত ডিভাইসগুলো অ্যাক্সেস করার একটি সহজ টুল। এই কোডল্যাবে স্ক্রিন ব্যবহার করা হয়েছে, কিন্তু আপনি আপনার ইচ্ছামতো যেকোনো সিরিয়াল পোর্ট টার্মিনাল অ্যাপ্লিকেশন ব্যবহার করতে পারেন।
$ sudo apt-get install screen
৩. রিপোজিটরি ক্লোন করুন
ওপেনথ্রেড
OpenThread ক্লোন ও ইনস্টল করুন। script/bootstrap কমান্ডগুলো নিশ্চিত করে যে টুলচেইনটি ইনস্টল হয়েছে এবং পরিবেশটি সঠিকভাবে কনফিগার করা হয়েছে:
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
ওপেনথ্রেড ডেমন তৈরি করুন:
$ script/cmake-build posix -DOT_DAEMON=ON
এখন আপনি nRF52840 বোর্ডগুলিতে OpenThread বিল্ড এবং ফ্ল্যাশ করার জন্য প্রস্তুত।
৪. আরসিপি জয়নারটি সেট আপ করুন।
নির্মাণ এবং ফ্ল্যাশ
Joiner এবং নেটিভ USB কার্যকারিতা সহ OpenThread nRF52840 উদাহরণটি তৈরি করুন। একটি ডিভাইস একটি থ্রেড নেটওয়ার্কে নিরাপদে প্রমাণীকৃত এবং চালু হওয়ার জন্য Joiner ভূমিকাটি ব্যবহার করে। নেটিভ USB, nRF52840 এবং হোস্টের মধ্যে একটি সিরিয়াল ট্রান্সপোর্ট হিসাবে USB CDC ACM-এর ব্যবহার সক্ষম করে।
সর্বদা প্রথমে rm -rf build . কমান্ডটি চালিয়ে পূর্ববর্তী বিল্ডগুলো থেকে রিপোটি পরিষ্কার করুন।
$ cd ~/src $ git clone --recursive https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx $ script/build nrf52840 USB_trans
OpenThread RCP বাইনারিটি যে ডিরেক্টরিতে আছে সেখানে যান এবং এটিকে হেক্স ফরম্যাটে রূপান্তর করুন:
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
nRF52840 বোর্ডের এক্সটার্নাল পাওয়ার পিনের পাশে থাকা মাইক্রো-ইউএসবি ডিবাগ পোর্টে ইউএসবি কেবলটি সংযুক্ত করুন এবং তারপরে এটিকে লিনাক্স মেশিনে প্লাগ করুন। nRF52840 বোর্ডের nRF পাওয়ার সোর্স সুইচটি VDD- তে সেট করুন। সঠিকভাবে সংযুক্ত হলে, LED5 জ্বলে উঠবে।

যদি এটি লিনাক্স মেশিনে সংযুক্ত প্রথম বোর্ড হয়, তবে এটি সিরিয়াল পোর্ট /dev/ttyACM0 হিসাবে প্রদর্শিত হয় (সমস্ত nRF52840 বোর্ড সিরিয়াল পোর্ট শনাক্তকারী হিসাবে ttyACM ব্যবহার করে)।
$ ls /dev/ttyACM* /dev/ttyACM0
RCP-এর জন্য ব্যবহৃত nRF52840 বোর্ডের সিরিয়াল নম্বরটি নোট করুন:

nRFx কমান্ড লাইন টুলস-এর অবস্থানে যান এবং বোর্ডের সিরিয়াল নম্বর ব্যবহার করে nRF52840 বোর্ডে OpenThread RCP হেক্স ফাইলটি ফ্ল্যাশ করুন। মনে রাখবেন, যদি আপনি --verify ফ্ল্যাগটি বাদ দেন, তাহলে আপনি একটি সতর্কীকরণ বার্তা দেখতে পাবেন, যেখানে বলা থাকবে যে ফ্ল্যাশ প্রক্রিয়াটি কোনো ত্রুটি ছাড়াই ব্যর্থ হতে পারে।
$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \
~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset
সফল হলে নিম্নলিখিত আউটপুট তৈরি হয়:
Parsing hex file. Erasing user available code and UICR flash areas. Applying system reset. Checking that the area to write is not protected. Programing device. Applying system reset. Run.
বোর্ডটিকে "RCP" নামে চিহ্নিত করুন, যাতে পরে বোর্ডের ভূমিকাগুলো নিয়ে কোনো বিভ্রান্তি না হয়।
নেটিভ ইউএসবি-তে সংযোগ করুন
যেহেতু OpenThread RCP বিল্ডটি সিরিয়াল ট্রান্সপোর্ট হিসেবে নেটিভ USB CDC ACM ব্যবহারের সুযোগ দেয়, তাই RCP হোস্টের (লিনাক্স মেশিন) সাথে যোগাযোগের জন্য আপনাকে অবশ্যই nRF52840 বোর্ডের nRF USB পোর্টটি ব্যবহার করতে হবে।
ফ্ল্যাশ করা nRF52840 বোর্ডের ডিবাগ পোর্ট থেকে USB কেবলের মাইক্রো-ইউএসবি প্রান্তটি খুলে ফেলুন, তারপর এটিকে RESET বাটনের পাশের nRF মাইক্রো-ইউএসবি পোর্টে পুনরায় সংযুক্ত করুন। nRF পাওয়ার সোর্স সুইচটি USB- তে সেট করুন।

ওপেনথ্রেড ডেমন শুরু করুন
RCP ডিজাইনে, থ্রেড ডিভাইসের সাথে যোগাযোগ ও তা পরিচালনা করার জন্য OpenThread Daemon ব্যবহার করুন। ot-daemon -v verbose ফ্ল্যাগ দিয়ে চালু করুন, যাতে আপনি লগ আউটপুট দেখতে পারেন এবং এটি চলছে কিনা তা নিশ্চিত করতে পারেন:
$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800'
সফল হলে, ভার্বোস মোডে থাকা ot-daemon নিম্নলিখিতের মতো আউটপুট তৈরি করে:
ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
এই টার্মিনাল উইন্ডোটি খোলা রাখুন যাতে ot-daemon এর লগগুলো দেখা যায়।
RCP নোডের সাথে যোগাযোগের জন্য ot-ctl ব্যবহার করুন। ot-ctl OpenThread CLI অ্যাপের মতোই একই CLI ব্যবহার করে। তাই, আপনি অন্যান্য সিমুলেটেড থ্রেড ডিভাইসগুলোর মতোই ot-daemon নোডগুলোকে নিয়ন্ত্রণ করতে পারবেন।
দ্বিতীয় একটি টার্মিনাল উইন্ডোতে, ot-ctl চালু করুন:
$ sudo ./build/posix/src/posix/ot-ctl >
ot-daemon দিয়ে চালু করা নোড ২ (RCP নোড)-এর state পরীক্ষা করুন:
> state disabled Done
৫. এফটিডিগুলো সেট আপ করুন।
এই কোডল্যাবে ব্যবহৃত অন্য দুটি থ্রেড নোড হলো স্ট্যান্ডার্ড সিস্টেম-অন-চিপ (SoC) ডিজাইনের ফুল থ্রেড ডিভাইস (FTD)। একটি ডিভাইস কমিশনার হিসেবে কাজ করে, যা সেই নেটওয়ার্কে ডিভাইসগুলোকে নিরাপদে প্রমাণীকরণ ও কমিশন করে। অন্য ডিভাইসটি জয়নার হিসেবে কাজ করে, যাকে কমিশনার থ্রেড নেটওয়ার্কে প্রমাণীকরণ করতে পারে।
নির্মাণ এবং ফ্ল্যাশ
কমিশনার এবং জয়নার রোলগুলো সক্রিয় রেখে nRF52840 প্ল্যাটফর্মের জন্য OpenThread FTD উদাহরণটি তৈরি করুন:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON
OpenThread Full Thread Device (FTD) CLI বাইনারিটি যে ডিরেক্টরিতে রয়েছে, সেখানে যান এবং এটিকে হেক্স ফরম্যাটে রূপান্তর করুন:
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex
nRF52840 বোর্ডের এক্সটার্নাল পাওয়ার পিনের পাশের মাইক্রো-ইউএসবি পোর্টে ইউএসবি কেবলটি সংযুক্ত করুন, এবং তারপর এটিকে লিনাক্স মেশিনে প্লাগ করুন। যদি আরসিপি তখনও লিনাক্স মেশিনের সাথে সংযুক্ত থাকে, তাহলে এই নতুন বোর্ডটি সিরিয়াল পোর্ট /dev/ttyACM1 হিসাবে প্রদর্শিত হবে (সমস্ত nRF52840 বোর্ড সিরিয়াল পোর্ট আইডেন্টিফায়ার হিসাবে ttyACM ব্যবহার করে)।
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
পূর্বের ন্যায়, FTD-এর জন্য ব্যবহৃত nRF52840 বোর্ডের সিরিয়াল নম্বরটি নোট করুন:

nRFx কমান্ড লাইন টুলস-এর অবস্থানে যান এবং বোর্ডের সিরিয়াল নম্বর ব্যবহার করে OpenThread CLI FTD হেক্স ফাইলটি nRF52840 বোর্ডে ফ্ল্যাশ করুন:
$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \
~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset
বোর্ডটিতে 'কমিশনার' লেবেল লাগান।
নেটিভ ইউএসবি-তে সংযোগ করুন
যেহেতু OpenThread FTD বিল্ডটি সিরিয়াল ট্রান্সপোর্ট হিসেবে নেটিভ USB CDC ACM ব্যবহারের সুযোগ দেয়, তাই RCP হোস্টের (লিনাক্স মেশিন) সাথে যোগাযোগের জন্য আপনাকে অবশ্যই nRF52840 বোর্ডের nRF USB পোর্টটি ব্যবহার করতে হবে।
ফ্ল্যাশ করা nRF52840 বোর্ডের ডিবাগ পোর্ট থেকে USB কেবলের মাইক্রো-ইউএসবি প্রান্তটি খুলে ফেলুন, তারপর এটিকে RESET বাটনের পাশের nRF মাইক্রো-ইউএসবি পোর্টে পুনরায় সংযুক্ত করুন। nRF পাওয়ার সোর্স সুইচটি USB- তে সেট করুন।

বিল্ড যাচাই করুন
একটি টার্মিনাল উইন্ডো থেকে GNU Screen ব্যবহার করে OpenThread CLI-তে প্রবেশ করে বিল্ডটি সফল হয়েছে কিনা তা যাচাই করুন।
$ screen /dev/ttyACM1
নতুন উইন্ডোতে, OpenThread > প্রম্পটটি আনতে কিবোর্ডে কয়েকবার Return চাপুন। IPv6 ইন্টারফেসটি চালু করুন এবং অ্যাড্রেসগুলো পরীক্ষা করুন:
> ifconfig up Done > ipaddr fe80:0:0:0:1cd6:87a9:cb9d:4b1d Done
Ctrl+a ব্যবহার করুন →
পরবর্তী বোর্ডটি ফ্ল্যাশ করার জন্য FTD কমিশনার CLI স্ক্রিন থেকে বিচ্ছিন্ন হয়ে লিনাক্স টার্মিনালে ফিরে যেতে d ব্যবহার করুন। যেকোনো সময় CLI-তে পুনরায় প্রবেশ করতে, কমান্ড লাইন থেকে screen -r ব্যবহার করুন। উপলব্ধ স্ক্রিনগুলির তালিকা দেখতে, screen -ls ব্যবহার করুন।
$ screen -ls
There is a screen on:
74182.ttys000.mylinuxmachine (Detached)
1 Socket in /tmp/uscreens/S-username.
FTD জয়নার সেট আপ করুন
বিদ্যমান ot-cli-ftd.hex বিল্ডটি ব্যবহার করে তৃতীয় nRF52840 বোর্ডটি ফ্ল্যাশ করার জন্য উপরের প্রক্রিয়াটি পুনরাবৃত্তি করুন। কাজ শেষ হলে, nRF USB পোর্ট ব্যবহার করে বোর্ডটিকে পিসির সাথে পুনরায় সংযোগ করতে এবং nRF পাওয়ার সোর্স সুইচটি VDD- তে সেট করতে ভুলবেন না।
এই তৃতীয় বোর্ডটি সংযুক্ত করার সময় যদি অন্য দুটি নোড লিনাক্স মেশিনের সাথে সংযুক্ত থাকে, তবে এটি সিরিয়াল পোর্ট /dev/ttyACM2 হিসাবে প্রদর্শিত হবে:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
বোর্ডটির নাম দিন 'Joiner'।
Screen ব্যবহার করে যাচাই করার সময়, কমান্ড লাইন থেকে Screen-এর একটি নতুন ইনস্ট্যান্স তৈরি করার পরিবর্তে, বিদ্যমান ইনস্ট্যান্সটির সাথে পুনরায় সংযুক্ত হন এবং এর ভিতরে একটি নতুন উইন্ডো তৈরি করুন (যেটি আপনি FTD কমিশনারের জন্য ব্যবহার করেছিলেন):
$ screen -r
Ctrl+a → c চেপে Screen-এর মধ্যে নতুন উইন্ডোটি তৈরি করুন ।
একটি নতুন কমান্ড লাইন প্রম্পট প্রদর্শিত হবে। FTD Joiner-এর জন্য OpenThread CLI অ্যাক্সেস করুন:
$ screen /dev/ttyACM2
এই নতুন উইন্ডোতে, OpenThread > প্রম্পটটি আনতে কিবোর্ডে কয়েকবার Return চাপুন। IPv6 ইন্টারফেসটি চালু করুন এবং অ্যাড্রেসগুলো পরীক্ষা করুন:
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
এখন যেহেতু FTD Joiner CLI এবং FTD Commissioner একই Screen ইনস্ট্যান্সে রয়েছে, আপনি Ctrl+a → n ব্যবহার করে তাদের মধ্যে সুইচ করতে পারবেন।
Ctrl+a ব্যবহার করুন →
স্ক্রিন থেকে বের হতে যেকোনো সময় d ।
৬. টার্মিনাল উইন্ডো সেটআপ
ভবিষ্যতে, আপনাকে ঘন ঘন থ্রেড ডিভাইসগুলির মধ্যে পরিবর্তন করতে হবে, তাই নিশ্চিত করুন যে সেগুলি সবই সচল এবং সহজে ব্যবহারযোগ্য। এখন পর্যন্ত, আমরা দুটি FTD অ্যাক্সেস করার জন্য স্ক্রিন ব্যবহার করে আসছি, এবং এই টুলটি একই টার্মিনাল উইন্ডোতে স্প্লিট স্ক্রিনেরও সুবিধা দেয়। একটি নোডে দেওয়া কমান্ডের জবাবে অন্য নোডটি কীভাবে প্রতিক্রিয়া দেখায়, তা দেখতে এটি ব্যবহার করুন।
আদর্শগতভাবে, আপনার চারটি জানালা হাতের কাছে প্রস্তুত থাকা উচিত:
-
ot-daemonপরিষেবা / লগ - আরসিপি জয়েনার
ot-ctlএর মাধ্যমে - ওপেনথ্রেড সিএলআই এর মাধ্যমে এফটিডি কমিশনার
- OpenThread CLI এর মাধ্যমে FTD Joiner
আপনি যদি আপনার নিজস্ব টার্মিনাল / সিরিয়াল পোর্ট কনফিগারেশন বা টুল ব্যবহার করতে চান, তবে নির্দ্বিধায় পরবর্তী ধাপে চলে যান। আপনার জন্য সবচেয়ে সুবিধাজনক উপায়ে সমস্ত ডিভাইসের জন্য টার্মিনাল উইন্ডোগুলো কনফিগার করুন।
স্ক্রিন ব্যবহার করে
ব্যবহারের সুবিধার জন্য, শুধুমাত্র একটি স্ক্রিন সেশন চালু করুন। দুটি FTD সেট আপ করার সময় থেকেই আপনার একটি সেশন তৈরি থাকার কথা।
স্ক্রিনের ভেতরের সমস্ত কমান্ড Ctrl+a দিয়ে শুরু হয়।
মৌলিক স্ক্রিন কমান্ড:
স্ক্রিন সেশনে পুনরায় সংযুক্ত হন (কমান্ড লাইন থেকে) | |
স্ক্রিন সেশন ত্যাগ করুন | Ctrl+a → |
স্ক্রিন সেশনের মধ্যে নতুন উইন্ডো তৈরি করুন | Ctrl+a → |
একই স্ক্রিন সেশনে উইন্ডোগুলোর মধ্যে স্যুইচ করুন | Ctrl+a → |
স্ক্রিন সেশনে বর্তমান উইন্ডোটি বন্ধ করুন | Ctrl+a → |
স্প্লিট স্ক্রিন
Screen-এর সাহায্যে আপনি টার্মিনালকে একাধিক উইন্ডোতে ভাগ করতে পারেন:

screen কমান্ডগুলো Ctrl+a ব্যবহার করে অ্যাক্সেস করা হয়। প্রতিটি কমান্ড এই অ্যাক্সেস কী কম্বো দিয়ে শুরু করা উচিত।
আপনি যদি কোডল্যাবটি হুবহু অনুসরণ করে থাকেন, তাহলে আপনার একই স্ক্রিন ইনস্ট্যান্সে দুটি উইন্ডো (FTD Commissioner, FTD Joiner) থাকার কথা। দুটির মধ্যে স্ক্রিনটি ভাগ করার জন্য, প্রথমে আপনার বর্তমান স্ক্রিন সেশনে প্রবেশ করুন:
$ screen -r
আপনাকে FTD ডিভাইসগুলোর একটিতে থাকতে হবে। স্ক্রিনে এই ধাপগুলো অনুসরণ করুন:
- Ctrl+a →
Sউইন্ডোটিকে আনুভূমিকভাবে ভাগ করতে। - Ctrl+a →
Tabচাপলে কার্সার নতুন ফাঁকা উইন্ডোতে যাবে। - Ctrl+a →
nচাপলে নতুন উইন্ডোটি পরেরটিতে যাবে। - যদি এটি উপরের উইন্ডোর মতোই হয়, তাহলে অন্য FTD ডিভাইসটি দেখার জন্য আবার Ctrl+a →
nচাপুন।
এখন দুটোই দেখা যাচ্ছে। Ctrl+a → Tab ব্যবহার করে এদের মধ্যে পরিবর্তন করুন। বিভ্রান্তি এড়াতে Ctrl+a → A ব্যবহার করে প্রতিটি উইন্ডোর শিরোনাম পরিবর্তন করার পরামর্শ দেওয়া হচ্ছে।
উন্নত ব্যবহার
স্ক্রিনকে আরও কয়েকটি ভাগে ভাগ করতে এবং ot-daemon লগ ও RCP Joiner ot-ctl দেখতে হলে, সেই সার্ভিসগুলোকে অবশ্যই এই একই Screen ইনস্ট্যান্সের মধ্যে চালু করতে হবে। এটি করার জন্য, ot-daemon বন্ধ করুন এবং ot-ctl থেকে বেরিয়ে আসুন, এবং নতুন Screen উইন্ডোতে সেগুলোকে আবার চালু করুন (Ctrl+a → c )।
এই সেটআপটি আবশ্যক নয় এবং এটি ব্যবহারকারীর অনুশীলনের জন্য রেখে দেওয়া হলো।
নিম্নলিখিত কমান্ডগুলো ব্যবহার করে উইন্ডোগুলো বিভক্ত করুন এবং সেগুলোর মধ্যে চলাচল করুন:
নতুন উইন্ডো তৈরি করুন | Ctrl+a → |
উল্লম্বভাবে বিভক্ত জানালা | Ctrl+a → |
অনুভূমিকভাবে বিভক্ত জানালা | Ctrl+a → |
পরবর্তী প্রদর্শিত উইন্ডোতে যান | Ctrl+a → |
প্রদর্শিত উইন্ডোটি সামনে বা পিছনে সরান | Ctrl+a → |
বর্তমান উইন্ডোটির নাম পরিবর্তন করুন | Ctrl+a → |
যেকোনো সময় Ctrl+a → d চেপে Screen থেকে বেরিয়ে আসুন এবং কমান্ড লাইন থেকে screen -r চেপে পুনরায় সংযুক্ত হন।
স্ক্রিন সম্পর্কে আরও তথ্যের জন্য, জিএনইউ স্ক্রিন কুইক রেফারেন্স দেখুন।
৭. থ্রেড নেটওয়ার্ক তৈরি করুন
এখন যেহেতু আপনার সমস্ত টার্মিনাল উইন্ডো এবং স্ক্রিন কনফিগার করা হয়ে গেছে, চলুন আমাদের থ্রেড নেটওয়ার্ক তৈরি করি। FTD কমিশনার- এ, একটি নতুন অপারেশনাল ডেটাসেট তৈরি করুন এবং এটিকে সক্রিয় হিসেবে কমিট করুন। এই অপারেশনাল ডেটাসেটটিই হলো আপনার তৈরি করা থ্রেড নেটওয়ার্কের কনফিগারেশন।
## FTD Commissioner ## ---------------------- > dataset init new Done > dataset Active Timestamp: 1 Channel: 11 Channel Mask: 07fff800 Ext PAN ID: c0de7ab5c0de7ab5 Mesh Local Prefix: fdc0:de7a:b5c0/64 Network Key: 1234c0de7ab51234c0de7ab51234c0de Network Name: OpenThread-c0de PAN ID: 0xc0de PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
নেটওয়ার্ক কী 1234c0de7ab51234c0de7ab51234c0de নোট করে রাখুন, যা পরবর্তীতে ব্যবহার করা হবে।
এই ডেটাসেটটিকে সক্রিয় হিসেবে কমিট করুন:
> dataset commit active Done
IPv6 ইন্টারফেসটি চালু করুন:
> ifconfig up Done
থ্রেড প্রোটোকল অপারেশন শুরু করুন:
> thread start Done
কিছুক্ষণ পর ডিভাইসটির অবস্থা পরীক্ষা করুন। এটির লিডার (Leader) থাকা উচিত। ভবিষ্যতের জন্য RLOC16-টিও সংগ্রহ করে নিন।
## FTD Commissioner ## ---------------------- > state leader Done > rloc16 0c00 Done
ডিভাইসটির IPv6 ঠিকানাগুলো যাচাই করুন:
## FTD Commissioner ## ---------------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:c00 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a # Mesh-Local EID (ML-EID) fe80:0:0:0:1cd6:87a9:cb9d:4b1d # Link-Local Address (LLA)
'কোডল্যাব' নেটওয়ার্কটি এখন অন্যান্য থ্রেড ডিভাইস থেকে স্ক্যান করলে দেখা যায়।
RCP Joiner- এ ot-ctl থেকে:
## RCP Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |
FTD Joiner- এর OpenThread CLI থেকে:
## FTD Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
যদি "codelab" নেটওয়ার্কটি তালিকায় না থাকে, তবে আবার স্ক্যান করার চেষ্টা করুন।
৮. আরসিপি জয়নার যোগ করুন
নেটওয়ার্কে থ্রেড কমিশনিং সক্রিয় নেই, যার মানে হলো, আমাদের সদ্য তৈরি করা থ্রেড নেটওয়ার্কটিতে একটি আউট-অফ-ব্যান্ড কমিশনিং প্রক্রিয়া ব্যবহার করে RCP জয়নারটি যুক্ত করতে হবে।
FTD কমিশনার- এ, আমরা নেটওয়ার্ক কী-টি লিখে রেখেছি, যেমন 1234c0de7ab51234c0de7ab51234c0de । যদি আপনার আবার নেটওয়ার্ক কী-টি খুঁজে বের করার প্রয়োজন হয়, তাহলে FTD কমিশনার- এ নিম্নলিখিত কমান্ডটি চালান:
## FTD Commissioner ## > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done
এরপরে, RCP Joiner- এ, এর সক্রিয় ডেটাসেট নেটওয়ার্ক কী-টি FTD কমিশনার নেটওয়ার্ক কী-তে সেট করুন:
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
ডেটা সেটটি সঠিকভাবে সেট করা আছে কিনা তা নিশ্চিত করতে পরীক্ষা করুন।
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
থ্রেডটি চালু করুন যাতে RCP Joiner "codelab" নেটওয়ার্কে যোগদান করে। কয়েক সেকেন্ড অপেক্ষা করুন, অবস্থা, RLOC16 এবং এর IPv6 অ্যাড্রেসগুলো পরীক্ষা করুন:
## RCP Joiner ## ---------------- > ifconfig up Done > thread start Done > state child Done > rloc16 0c01 Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:0c01 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f # Mesh-Local EID (ML-EID) fe80:0:0:0:18e5:29b3:a638:943b # Link-Local Address (LLA) Done
মেশ-লোকাল IPv6 অ্যাড্রেসটি (এখানে fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f ) লিখে রাখুন, এটি আপনার পরে কাজে লাগবে।
FTD কমিশনার- এ ফিরে এসে, রাউটার এবং চাইল্ড টেবিলগুলো পরীক্ষা করে নিশ্চিত করুন যে উভয় ডিভাইস একই নেটওয়ার্কের অংশ। RCP জয়নার শনাক্ত করতে RLOC16 ব্যবহার করুন।
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 35 | 1ed687a9cb9d4b1d | Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|VER| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1| 2| 1ae529b3a638943b | Done
সংযোগ যাচাই করার জন্য RCP Joiner-এর মেশ-লোকাল অ্যাড্রেসটি (RCP Joiner-এর ipaddr আউটপুট থেকে প্রাপ্ত মেশ-লোকাল অ্যাড্রেস) পিং করুন:
## FTD Commissioner ## ---------------------- > ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f > 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms
এখন আমাদের দুটি নোড নিয়ে গঠিত একটি থ্রেড নেটওয়ার্ক রয়েছে, যা এই টপোলজি ডায়াগ্রাম দ্বারা চিত্রিত করা হয়েছে:

টপোলজি ডায়াগ্রাম
আপনি যখন কোডল্যাবের বাকি অংশটি সম্পন্ন করবেন, তখন নেটওয়ার্কের অবস্থা পরিবর্তন হলেই আমরা একটি নতুন থ্রেড টপোলজি ডায়াগ্রাম দেখাবো। নোডের ভূমিকাগুলো নিম্নরূপভাবে চিহ্নিত করা হয়:

মেশ এক্সটেন্ডারগুলো সর্বদা পঞ্চভুজ এবং এন্ড ডিভাইসগুলো সর্বদা বৃত্তাকার হয়। প্রতিটি নোডের উপরের সংখ্যাগুলো সেই সময়ে নোডটির বর্তমান ভূমিকা ও অবস্থার উপর নির্ভর করে CLI আউটপুটে প্রদর্শিত রাউটার আইডি বা চাইল্ড আইডি নির্দেশ করে।
৯. এফটিডি জয়নারকে দায়িত্ব প্রদান করুন
এখন 'কোডল্যাব' নেটওয়ার্কে তৃতীয় থ্রেড ডিভাইসটি যুক্ত করা যাক। এবার আমরা আরও সুরক্ষিত ইন-ব্যান্ড কমিশনিং প্রক্রিয়াটি ব্যবহার করব এবং শুধুমাত্র FTD Joiner-কে যুক্ত হওয়ার অনুমতি দেব।
FTD Joiner- এ eui64 টি সংগ্রহ করুন, যাতে FTD কমিশনার এটি শনাক্ত করতে পারেন:
## FTD Joiner ## ---------------- > eui64 2f57d222545271f1 Done
FTD কমিশনার- এ, কমিশনারটি চালু করুন এবং যে ডিভাইসটি যোগদান করতে পারবে তার eui64 , জয়নার ক্রেডেনশিয়াল-সহ নির্দিষ্ট করুন, যেমন J01NME । জয়নার ক্রেডেনশিয়াল হলো একটি ডিভাইস-নির্দিষ্ট স্ট্রিং, যা পাঠযোগ্যতার জন্য I, O, Q এবং Z বাদে (0-9 এবং AY) সব বড় হাতের অ্যালফানিউমেরিক অক্ষর দিয়ে গঠিত এবং এর দৈর্ঘ্য ৬ থেকে ৩২ অক্ষরের মধ্যে হয়।
## FTD Commissioner ## ---------------------- > commissioner start Done > commissioner joiner add 2f57d222545271f1 J01NME Done
FTD যোগদানকারী (Joiner) পদে পরিবর্তন করুন। FTD কমিশনার-এ আপনি এইমাত্র যে যোগদানকারী পরিচয়পত্রটি (Joiner Credential) সেট আপ করেছেন, তা ব্যবহার করে যোগদানকারীর ভূমিকাটি (joiner role) শুরু করুন:
## FTD Joiner ## ---------------- > ifconfig up Done > joiner start J01NME Done
মিনিটখানেকের মধ্যেই আপনি সফল প্রমাণীকরণের একটি নিশ্চিতকরণ বার্তা পাবেন:
## FTD Joiner ## ---------------- > Join success
থ্রেডটি চালু করুন যাতে FTD Joiner "codelab" নেটওয়ার্কে যোগদান করে, এবং অবিলম্বে স্টেট ও RLOC16 চেক করুন:
## FTD Joiner ## ---------------- > thread start Done > state child Done > rloc16 0c02 Done
ডিভাইসটির IPv6 অ্যাড্রেসগুলো পরীক্ষা করুন। লক্ষ্য করুন যে এখানে কোনো ALOC নেই। এর কারণ হলো, এই ডিভাইসটি লিডার নয়, এবং এটি এমন কোনো অ্যানিকাস্ট-নির্দিষ্ট ভূমিকাও পালন করে না যার জন্য ALOC প্রয়োজন।
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:c02 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA)
অবিলম্বে FTD কমিশনারে সুইচ করুন এবং "কোডল্যাব" নেটওয়ার্কে তিনটি ডিভাইস বিদ্যমান আছে কিনা তা নিশ্চিত করতে রাউটার এবং চাইল্ড টেবিলগুলো পরীক্ষা করুন:
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | | 2 | 0x0c02 | 240 | 15 | 3 | 44 |1|1|1|1| e6cdd2d93249a243 | Done
RLOC16 অনুসারে, FTD Joiner-টি একটি End Device (চাইল্ড) হিসেবে নেটওয়ার্কে সংযুক্ত হয়েছে। নিচে আমাদের হালনাগাদ করা টপোলজিটি দেওয়া হলো:

১০. সুতার ব্যবহার
এই কোডল্যাবের থ্রেড ডিভাইসগুলো হলো এক বিশেষ ধরনের ফুল থ্রেড ডিভাইস (FTD), যাকে এক্সটেন্ডার-ক্যাপেবল ডিভাইস (ECD) বলা হয়। এর মানে হলো, এগুলো মেশ এক্সটেন্ডার অথবা স্ট্যান্ডবাই ECD হিসেবে কাজ করতে পারে এবং স্ট্যান্ডবাই ECD থেকে নিজেদেরকে মেশ এক্সটেন্ডারে উন্নীত করতে পারে।
একটি থ্রেড সর্বোচ্চ ৩২টি মেশ এক্সটেন্ডার সমর্থন করতে পারে, তবে এর সংখ্যা ১৬ থেকে ২৩-এর মধ্যে রাখার চেষ্টা করে। যদি একটি ECD এন্ড ডিভাইস (চাইল্ড) হিসেবে সংযুক্ত হয় এবং মেশ এক্সটেন্ডারের সংখ্যা ১৬-এর কম থাকে, তবে দুই মিনিটের মধ্যে একটি এলোমেলো সময় পরে এটি স্বয়ংক্রিয়ভাবে নিজেকে একটি মেশ এক্সটেন্ডারে উন্নীত করে।
FTD Joiner যোগ করার পর যদি আপনার থ্রেড নেটওয়ার্কে দুটি চাইল্ড থাকে, তাহলে কমপক্ষে দুই মিনিট অপেক্ষা করুন, এবং তারপর FTD Commissioner- এ রাউটার ও চাইল্ড টেবিলগুলো পুনরায় পরীক্ষা করুন।
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | Done
FTD Joiner (এক্সটেন্ডেড MAC = e6cdd2d93249a243 ) নিজেকে একটি Mesh Extender-এ উন্নীত করেছে। লক্ষ্য করুন যে RLOC16 ভিন্ন ( 0c02 এর পরিবর্তে b800 )। এর কারণ হলো, RLOC16 একটি ডিভাইসের Router ID এবং Child ID-এর উপর ভিত্তি করে নির্ধারিত হয়। যখন এটি একটি End Device থেকে Mesh Extender-এ রূপান্তরিত হয়, তখন এর Router ID এবং Child ID-এর মান পরিবর্তিত হয়, এবং সেই সাথে RLOC16-ও পরিবর্তিত হয়।

FTD Joiner- এ নতুন অবস্থা এবং RLOC16 নিশ্চিত করুন:
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Done
FTD জয়নারকে ডাউনগ্রেড করুন
আপনি FTD Joiner-কে ম্যানুয়ালি Mesh Extender থেকে End Device-এ ডাউনগ্রেড করে এই আচরণটি পরীক্ষা করতে পারেন। স্টেটটি child-এ পরিবর্তন করুন এবং RLOC16 চেক করুন:
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done

FTD কমিশনার- এ ফিরে গেলে, FTD Joiner-টি এখন চাইল্ড টেবিলে (ID = 3) দেখা যাবে। স্থানান্তরের সময় এটি উভয় টেবিলেই থাকতে পারে:
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | | 3 | 0x0c03 | 240 | 16 | 3 | 94 |1|1|1|1| e6cdd2d93249a243 | Done
কিছুক্ষণ পর, এটি b800 RLOC সহ একটি মেশ এক্সটেন্ডারে পুনরায় রূপান্তরিত হবে।

নেতাকে অপসারণ করুন
সকল ইসিডি-দের মধ্য থেকে লিডার স্ব-নির্বাচিত হন। এর অর্থ হলো, যদি বর্তমান লিডারকে থ্রেড নেটওয়ার্ক থেকে সরিয়ে দেওয়া হয়, তাহলে অন্য ইসিডি-দের মধ্যে থেকে একজন নতুন লিডার হবেন।
FTD কমিশনার- এ, থ্রেড নেটওয়ার্ক থেকে এটি সরানোর জন্য থ্রেডটি বন্ধ করে দিন:
## FTD Commissioner ## ---------------------- > thread stop Done > ifconfig down Done
দুই মিনিটের মধ্যে, FTD Joiner নতুন থ্রেড লিডার হয়ে যায়। যাচাই করার জন্য FTD Joiner-এর অবস্থা এবং IPv6 অ্যাড্রেসগুলো পরীক্ষা করুন:
## FTD Joiner ## ---------------- > state leader Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Now it has the Leader ALOC! fdc0:de7a:b5c0:0:0:ff:fe00:b800 fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd fe80:0:0:0:e4cd:d2d9:3249:a243 Done

চাইল্ড টেবিলটি পরীক্ষা করুন। লক্ষ্য করুন যে সেখানে একটি নতুন RLOC16 রয়েছে। এর আইডি এবং এক্সটেন্ডেড ম্যাক (Extended MAC) দ্বারা বোঝা যাচ্ছে যে এটিই হলো আরসিপি জয়নার (RCP Joiner)। থ্রেড নেটওয়ার্কটিকে একত্রিত রাখার জন্য, এটির প্যারেন্ট এফটিডি কমিশনার (FTD Commissioner) থেকে এফটিডি জয়নারে পরিবর্তিত হয়েছে। এর ফলে আরসিপি জয়নারের জন্য একটি নতুন RLOC16 তৈরি হয়েছে (কারণ এর রাউটার আইডি ৩ থেকে ৪৬-এ পরিবর্তিত হয়েছে)।
## FTD Joiner ## ---------------- > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 27 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done
RCP Joiner-টি FTD Joiner-এর সাথে চাইল্ড হিসেবে সংযুক্ত হওয়ার জন্য আপনাকে কয়েক মিনিট অপেক্ষা করতে হতে পারে। অবস্থা এবং RLOC16 পরীক্ষা করে নিশ্চিত করুন যে:
## RCP Joiner ## -------------- > state child > rloc16 b801
এফটিডি কমিশনারকে পুনরায় সংযুক্ত করুন
দুটি নোড সহ একটি থ্রেড নেটওয়ার্ক তেমন মজার নয়। চলুন FTD কমিশনারকে আবার অনলাইনে ফিরিয়ে আনি।
এফটিডি কমিশনার প্রসঙ্গে, থ্রেডটি পুনরায় শুরু করুন:
## FTD Commissioner ## ---------------------- > ifconfig up Done > thread start Done
দুই মিনিটের মধ্যে, এটি স্বয়ংক্রিয়ভাবে একটি এন্ড ডিভাইস হিসেবে 'কোডল্যাব' নেটওয়ার্কে পুনরায় সংযুক্ত হয় এবং তারপর নিজেকে একটি মেশ এক্সটেন্ডারে উন্নীত করে।
## FTD Commissioner ## ---------------------- > state router Done
যাচাই করার জন্য FTD Joiner- এর রাউটার এবং চাইল্ড টেবিলগুলো পরীক্ষা করুন:
## FTD Joiner ## ---------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 63 | 0 | 3 | 3 | 0 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 46 | 0 | 0 | 0 | 15 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 184 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done

আমাদের থ্রেড নেটওয়ার্কটি আবারও তিনটি নোড নিয়ে গঠিত।
১১. সমস্যা সমাধান
বিভিন্ন টার্মিনাল বা স্ক্রিন উইন্ডোতে একাধিক ডিভাইস ব্যবহার করে একটি থ্রেড নেটওয়ার্ক পরিচালনা করা জটিল হতে পারে। কোনো সমস্যার সম্মুখীন হলে নেটওয়ার্ক বা আপনার ওয়ার্কস্পেসের অবস্থা "রিসেট" করতে এই টিপসগুলো ব্যবহার করুন।
স্ক্রিন
আপনার কনফিগারেশনে যদি কখনো সমস্যা হয় (যেমন অনেক বেশি Screen উইন্ডো, বা Screen-এর ভেতরে আরও Screen), তাহলে Ctrl+a → k চেপে Screen উইন্ডোগুলো বন্ধ করতে থাকুন যতক্ষণ না কোনোটি অবশিষ্ট থাকে এবং কমান্ড লাইনে screen -ls কমান্ড চালালে No Sockets found আউটপুট আসে। এরপর প্রতিটি ডিভাইসের জন্য Screen উইন্ডোগুলো পুনরায় তৈরি করুন। Screen বন্ধ করে দিলেও ডিভাইসের অবস্থা সংরক্ষিত থাকে।
থ্রেড নোড
যদি থ্রেড নেটওয়ার্ক টপোলজি এই কোডল্যাবে বর্ণিত অনুযায়ী না হয়, অথবা কোনো কারণে নোডগুলো সংযোগ বিচ্ছিন্ন হয়ে যায় (যেমন, যে লিনাক্স মেশিনটি সেগুলোকে চালাচ্ছে সেটি স্লিপ মোডে চলে যাওয়ার কারণে), তাহলে থ্রেড বন্ধ করে, নেটওয়ার্ক ক্রেডেনশিয়ালগুলো মুছে ফেলে, এবং 'থ্রেড নেটওয়ার্ক তৈরি করুন' ধাপ থেকে আবার শুরু করাই শ্রেয়।
FTD-গুলো রিসেট করতে:
## FTD Commissioner or FTD Joiner ## ------------------------------------ > thread stop Done > ifconfig down Done > factoryreset Done
একইভাবে ot-ctl এর মাধ্যমে RCP রিসেট করা যায়:
## RCP Joiner ## ---------------- > thread stop Done > ifconfig down Done > factoryreset Done
১২. মাল্টিকাস্ট ব্যবহার করা
একই সাথে একাধিক ডিভাইসে তথ্য আদান-প্রদানের জন্য মাল্টিকাস্ট ব্যবহার করা হয়। একটি থ্রেড নেটওয়ার্কে, পরিধির উপর নির্ভর করে বিভিন্ন ডিভাইস গ্রুপের সাথে মাল্টিকাস্ট ব্যবহারের জন্য নির্দিষ্ট অ্যাড্রেস সংরক্ষিত থাকে।
IPv6 ঠিকানা | পরিধি | বিতরণ করা হয়েছে |
| লিঙ্ক-লোকাল | সমস্ত FTD এবং MED |
| লিঙ্ক-লোকাল | সমস্ত এফটিডি এবং বর্ডার রাউটার |
| জাল-স্থানীয় | সমস্ত FTD এবং MED |
| জাল-স্থানীয় | সমস্ত এফটিডি এবং বর্ডার রাউটার |
যেহেতু আমরা এই কোডল্যাবে কোনো বর্ডার রাউটার ব্যবহার করছি না, তাই চলুন FTD এবং MED এই দুটি মাল্টিকাস্ট অ্যাড্রেসের উপর মনোযোগ দিই।
লিঙ্ক-লোকাল
লিঙ্ক-লোকাল স্কোপের মধ্যে সেই সমস্ত থ্রেড ইন্টারফেস অন্তর্ভুক্ত, যেগুলিতে একটিমাত্র রেডিও ট্রান্সমিশন বা একটিমাত্র "হপ"-এর মাধ্যমে পৌঁছানো যায়। নেটওয়ার্ক টপোলজি নির্ধারণ করে যে ff02::1 মাল্টিকাস্ট অ্যাড্রেসে পাঠানো পিং-এর জবাবে কোন ডিভাইসগুলি সাড়া দেবে।
FTD কমিশনারের পক্ষ থেকে ff02::1 পিং করা হলো:
## FTD Commissioner ## ---------------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms
নেটওয়ার্কে আরও দুটি ডিভাইস রয়েছে (FTD Joiner এবং RCP Joiner), কিন্তু FTD Commissioner শুধুমাত্র FTD Joiner-এর লিঙ্ক-লোকাল অ্যাড্রেস (LLA) থেকে একটিমাত্র প্রতিক্রিয়া পেয়েছে। এর মানে হলো, FTD Joiner-ই একমাত্র ডিভাইস যেখানে FTD Commissioner একটিমাত্র হপের মাধ্যমে পৌঁছাতে পারে।

এখন FTD Joiner থেকে ff02::1 পিং করুন :
## FTD Joiner ## ---------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms 8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms
দুটি প্রতিক্রিয়া! অন্য ডিভাইসগুলোর IPv6 অ্যাড্রেসগুলো পরীক্ষা করে আমরা দেখতে পাচ্ছি যে, প্রথমটি (যার শেষে 4b1d আছে) হলো FTD কমিশনারের LLA, এবং দ্বিতীয়টি (যার শেষে 943b আছে) হলো RCP যোগদানকারীর LLA।

এর মানে হলো, FTD Joiner সরাসরি FTD Commissioner এবং RCP Joiner উভয়ের সাথেই সংযুক্ত, যা আমাদের টপোলজিকে নিশ্চিত করে।
জাল-স্থানীয়
মেশ-লোকাল স্কোপের মধ্যে একই থ্রেড নেটওয়ার্কের আওতাভুক্ত সমস্ত থ্রেড ইন্টারফেস অন্তর্ভুক্ত। চলুন ff03::1 মাল্টিকাস্ট অ্যাড্রেসে একটি পিং-এর প্রতিক্রিয়াগুলো দেখি।
FTD কমিশনারের পক্ষ থেকে ff03::1 পিং করা হলো:
## FTD Commissioner ## ---------------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms
এবার FTD কমিশনার দুটি প্রতিক্রিয়া পেয়েছেন, একটি FTD জয়নারের রাউটিং লোকেটর (RLOC, যার শেষে b800 ) থেকে এবং অন্যটি RCP জয়নারের মেশ-লোকাল EID (ML-EID, যার শেষে d55f ) থেকে। এর কারণ হলো, মেশ-লোকাল স্কোপ পুরো থ্রেড নেটওয়ার্ককে অন্তর্ভুক্ত করে। নেটওয়ার্কের যেখানেই কোনো ডিভাইস থাকুক না কেন, এটি ff03::1 অ্যাড্রেসটিতে সাবস্ক্রাইব করা থাকবে।

একই আচরণ নিশ্চিত করতে FTD Joiner থেকে ff03::1 পিং করুন:
## FTD Joiner ## ---------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms

উভয় পিং আউটপুটে RCP Joiner-এর প্রতিক্রিয়া সময়টি লক্ষ্য করুন। FTD Joiner-এ পৌঁছানোর (২৩ms) তুলনায় RCP Joiner-এর FTD Commissioner-এ পৌঁছাতে (৬৮ms) অনেক বেশি সময় লেগেছে। এর কারণ হলো, FTD Joiner-এর একটি হপের তুলনায় এটিকে FTD Commissioner-এ পৌঁছাতে দুটি হপ অতিক্রম করতে হয়।
আপনি হয়তো আরও লক্ষ্য করেছেন যে, মেশ-লোকাল মাল্টিকাস্ট পিং শুধুমাত্র দুটি FTD-এর জন্য RLOC দিয়ে সাড়া দিয়েছে—RCP Joiner-এর জন্য নয়। এর কারণ হলো, FTD-গুলো নেটওয়ার্কের মধ্যে ECD, যেখানে RCP হলো একটি End Device।
নিশ্চিত করার জন্য আরসিপি জয়নারের অবস্থা পরীক্ষা করুন:
## RCP Joiner ## ---------------- > state child
১৩. UDP দিয়ে বার্তা পাঠান
ওপেনথ্রেডের প্রদান করা অ্যাপ্লিকেশন পরিষেবাগুলোর মধ্যে একটি হলো ইউজার ডেটাগ্রাম প্রোটোকল (ইউডিপি), যা একটি ট্রান্সপোর্ট লেয়ার প্রোটোকল। ওপেনথ্রেডের উপর নির্মিত একটি অ্যাপ্লিকেশন একটি থ্রেড নেটওয়ার্কের নোডগুলোর মধ্যে, অথবা কোনো বাহ্যিক নেটওয়ার্কের (যেমন ইন্টারনেট, যদি থ্রেড নেটওয়ার্কটিতে একটি বর্ডার রাউটার থাকে) অন্যান্য ডিভাইসে বার্তা আদান-প্রদানের জন্য ইউডিপি এপিআই ব্যবহার করতে পারে।
OpenThread CLI-এর মাধ্যমে UDP সকেটগুলো উন্মুক্ত করা হয়। চলুন, দুটি FTD-এর মধ্যে বার্তা আদান-প্রদানের জন্য এটি ব্যবহার করি।
FTD Joiner-এর জন্য Mesh-Local EID অ্যাড্রেসটি সংগ্রহ করুন। আমরা এই অ্যাড্রেসটি ব্যবহার করছি কারণ এটি থ্রেড নেটওয়ার্কের যেকোনো জায়গা থেকে অ্যাক্সেসযোগ্য।
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:b800 # Routing Locator (RLOC) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) Done
UDP চালু করুন এবং যেকোনো IPv6 ঠিকানার জন্য এটিকে সকেটের সাথে সংযুক্ত করুন:
## FTD Joiner ## ---------------- > udp open Done > udp bind :: 1212
FTD কমিশনার- এ যান, UDP চালু করুন, এবং FTD জয়নার-এ আপনার সেট আপ করা সকেটটির ML-EID ব্যবহার করে সেটিতে সংযোগ করুন:
## FTD Commissioner ## ---------------------- > udp open Done > udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212 Done
দুটি নোডের মধ্যে UDP সংযোগটি সক্রিয় থাকা উচিত। FTD কমিশনারের পক্ষ থেকে একটি বার্তা পাঠান:
## FTD Commissioner ## ---------------------- > udp send hellothere Done
FTD Joiner- এ UDP বার্তাটি গৃহীত হয়েছে!
## FTD Joiner ## ---------------- > 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere
১৪. অভিনন্দন!
আপনি একটি বাস্তব থ্রেড নেটওয়ার্ক তৈরি করেছেন!

আপনি এখন জানেন:
- থ্রেড ডিভাইস টাইপ, রোল এবং স্কোপের মধ্যে পার্থক্য
- নেটওয়ার্কের মধ্যে থ্রেড ডিভাইসগুলো কীভাবে তাদের অবস্থা পরিচালনা করে
- UDP ব্যবহার করে নোডগুলির মধ্যে কীভাবে সাধারণ বার্তা পাঠানো যায়
পরবর্তী পদক্ষেপ
এই কোডল্যাবের উপর ভিত্তি করে, নিম্নলিখিত অনুশীলনগুলি চেষ্টা করুন:
-
ot-cli-mtdবাইনারি ব্যবহার করে FTD Joiner বোর্ডটিকে MTD হিসেবে রিফ্ল্যাশ করুন এবং লক্ষ্য করুন যে এটি কখনই নিজেকে Mesh Extender-এ আপগ্রেড করে না বা Leader হওয়ার চেষ্টা করে না। - নেটওয়ার্কে আরও ডিভাইস যোগ করুন (অন্য কোনো প্ল্যাটফর্ম ব্যবহার করে দেখুন!) এবং রাউটার ও চাইল্ড টেবিল ব্যবহারের পাশাপাশি মাল্টিকাস্ট অ্যাড্রেসগুলোতে পিং করে টপোলজিটির একটি রূপরেখা তৈরি করুন।
- NCP নিয়ন্ত্রণ করতে pyspinel ব্যবহার করুন
- OpenThread Border Router ব্যবহার করে NCP-কে একটি বর্ডার রাউটারে রূপান্তর করুন এবং আপনার থ্রেড নেটওয়ার্ককে ইন্টারনেটের সাথে সংযুক্ত করুন।
আরও পড়ুন
বিভিন্ন ধরনের ওপেনথ্রেড রিসোর্সের জন্য openthread.io এবং GitHub দেখুন, যার মধ্যে রয়েছে:
- সমর্থিত প্ল্যাটফর্ম — ওপেনথ্রেড সমর্থন করে এমন সমস্ত প্ল্যাটফর্ম সম্পর্কে জানুন
- OpenThread তৈরি করুন — OpenThread তৈরি ও কনফিগার করার বিষয়ে আরও বিস্তারিত তথ্য
- থ্রেড প্রাইমার — এই কোডল্যাবে আলোচিত থ্রেডের সমস্ত ধারণা এখানে আলোচনা করা হয়েছে।
তথ্যসূত্র: