১. ভূমিকা

গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড হলো থ্রেড নেটওয়ার্কিং প্রোটোকলের একটি ওপেন-সোর্স বাস্তবায়ন। গুগল নেস্ট, কানেক্টেড হোমের জন্য পণ্যের উন্নয়নকে ত্বরান্বিত করতে এবং নেস্ট পণ্যগুলিতে ব্যবহৃত প্রযুক্তিটি ডেভেলপারদের কাছে ব্যাপকভাবে সহজলভ্য করার জন্য ওপেনথ্রেড প্রকাশ করেছে।
থ্রেড স্পেসিফিকেশনটি হোম অ্যাপ্লিকেশনের জন্য একটি IPv6-ভিত্তিক নির্ভরযোগ্য, সুরক্ষিত এবং স্বল্প-শক্তিসম্পন্ন ওয়্যারলেস ডিভাইস-টু-ডিভাইস কমিউনিকেশন প্রোটোকল সংজ্ঞায়িত করে। ওপেনথ্রেড IPv6, 6LoWPAN, MAC সিকিউরিটিসহ IEEE 802.15.4, মেশ লিঙ্ক এস্টাবলিশমেন্ট এবং মেশ রাউটিং সহ সমস্ত থ্রেড নেটওয়ার্কিং লেয়ার বাস্তবায়ন করে।
এই কোডল্যাবটি আপনাকে সিমুলেটেড ডিভাইসে একটি থ্রেড নেটওয়ার্ক সিমুলেট করার পদ্ধতি ধাপে ধাপে দেখাবে।
আপনি যা শিখবেন
- ওপেনথ্রেড বিল্ড টুলচেইন কীভাবে সেট আপ করবেন
- থ্রেড নেটওয়ার্ক কীভাবে সিমুলেট করবেন
- থ্রেড নোডগুলিকে কীভাবে প্রমাণীকরণ করবেন
- OpenThread Daemon দিয়ে কীভাবে একটি থ্রেড নেটওয়ার্ক পরিচালনা করবেন
আপনার যা যা লাগবে
- গিট
- লিনাক্স ও নেটওয়ার্ক রাউটিং সম্পর্কে প্রাথমিক জ্ঞান
২. বিল্ড সিস্টেম সেট আপ করুন
গিট
এই কোডল্যাবটি সম্পন্ন করার জন্য গিট (Git) প্রয়োজন। চালিয়ে যাওয়ার আগে এটি ডাউনলোড ও ইনস্টল করুন।
ইনস্টল হয়ে গেলে, OpenThread ডাউনলোড ও বিল্ড করার জন্য আপনার নির্দিষ্ট অপারেটিং সিস্টেমের নির্দেশাবলী অনুসরণ করুন।
ম্যাক ওএস এক্স-এর জন্য এক্সকোড
Mac OS X- এ OpenThread ইনস্টল ও বিল্ড করার জন্য XCode প্রয়োজন।
XCode ইনস্টল করার পরে, XCode কমান্ড লাইন টুলস ইনস্টল করুন:
$ xcode-select --install
লিনাক্স / ম্যাক ওএস এক্স-এ বিল্ড করুন
এই ইনস্টলেশন নির্দেশাবলী Ubuntu Server 14.04 LTS এবং Mac OS X Sierra 10.12.6-এ পরীক্ষা করা হয়েছে।
OpenThread ইনস্টল করুন। bootstrap কমান্ডগুলো নিশ্চিত করে যে টুলচেইনটি ইনস্টল করা হয়েছে এবং পরিবেশটি সঠিকভাবে কনফিগার করা হয়েছে:
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
উইন্ডোজ ব্যবহার করে
আপনি যদি উইন্ডোজ পছন্দ করেন, তবে আমরা এই কোডল্যাবটির ডকার সংস্করণটি ব্যবহার করার পরামর্শ দিই।
৩. ওপেনথ্রেড অ্যাপ্লিকেশনগুলো তৈরি করুন
আপনার ইনস্টলেশন সম্পূর্ণ হলে, উদাহরণ OpenThread অ্যাপ্লিকেশনটি বিল্ড করুন। এই কোডল্যাবের জন্য আমরা সিমুলেশন উদাহরণটি ব্যবহার করছি।
$ cd ~/src/openthread $ ./script/cmake-build simulation
এখন ওপেনথ্রেড ডেমন তৈরি করুন:
$ ./script/cmake-build posix -DOT_DAEMON=ON
৪. একটি থ্রেড নেটওয়ার্ক অনুকরণ করুন
এই কোডল্যাবের জন্য আপনি যে উদাহরণ অ্যাপ্লিকেশনটি ব্যবহার করবেন, তা একটি ন্যূনতম ওপেনথ্রেড অ্যাপ্লিকেশন প্রদর্শন করে, যা একটি সাধারণ কমান্ড-লাইন ইন্টারফেস (CLI)-এর মাধ্যমে ওপেনথ্রেড কনফিগারেশন এবং ম্যানেজমেন্ট ইন্টারফেসগুলো উন্মুক্ত করে।
এই অনুশীলনীতে একটি সিমুলেটেড থ্রেড ডিভাইস থেকে অন্য একটি সিমুলেটেড থ্রেড ডিভাইসকে পিং করার জন্য প্রয়োজনীয় ন্যূনতম ধাপগুলো দেখানো হয়েছে।
নিচের চিত্রে একটি মৌলিক থ্রেড নেটওয়ার্ক টপোলজি বর্ণনা করা হয়েছে। এই অনুশীলনের জন্য, আমরা সবুজ বৃত্তের ভেতরের দুটি নোড—একটি থ্রেড লিডার এবং একটি মেশ এক্সটেন্ডার—এর মধ্যে একটিমাত্র সংযোগ রেখে সিমুলেট করব।

একটি নোড পিং করুন
১. নোড ১ শুরু করুন
openthread ডিরেক্টরিতে যান এবং ot-cli-ftd বাইনারিটি ব্যবহার করে একটি সিমুলেটেড থ্রেড ডিভাইসের জন্য CLI প্রসেসটি চালু করুন।
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 1
দ্রষ্টব্য: এই কমান্ডটি চালানোর পর যদি আপনি > প্রম্পটটি দেখতে না পান, তাহলে enter চাপুন।
এই বাইনারিটি POSIX-এর উপর ভিত্তি করে সিমুলেটেড একটি OpenThread ডিভাইস বাস্তবায়ন করে। IEEE 802.15.4 রেডিও ড্রাইভারটি UDP-এর উপর ভিত্তি করে বাস্তবায়িত হয়েছে (IEEE 802.15.4 ফ্রেমগুলো UDP পেলোডের মধ্যে প্রেরণ করা হয়)।
আর্গুমেন্ট 1 হলো একটি ফাইল ডেসক্রিপ্টর, যা সিমুলেটেড ডিভাইসটির জন্য "ফ্যাক্টরি-অ্যাসাইনড" IEEE EUI-64-এর সর্বনিম্ন-গুরুত্বপূর্ণ বিটগুলোকে প্রতিনিধিত্ব করে। IEEE 802.15.4 রেডিও এমুলেশনের জন্য একটি UDP পোর্টে বাইন্ডিং করার সময়ও এই মানটি ব্যবহৃত হয় (পোর্ট = ৯০০০ + ফাইল ডেসক্রিপ্টর)। এই কোডল্যাবে একটি সিমুলেটেড থ্রেড ডিভাইসের প্রতিটি ইনস্ট্যান্স একটি ভিন্ন ফাইল ডেসক্রিপ্টর ব্যবহার করবে।
দ্রষ্টব্য: একটি সিমুলেটেড ডিভাইসের জন্য প্রসেস স্পন করার সময়, এই কোডল্যাবে উল্লিখিত নিয়ম অনুযায়ী শুধুমাত্র 1 বা তার বেশি মানের ফাইল ডেসক্রিপ্টর ব্যবহার করুন। 0 মানের ফাইল ডেসক্রিপ্টর অন্যান্য ব্যবহারের জন্য সংরক্ষিত।
একটি নতুন অপারেশনাল ডেটাসেট তৈরি করুন এবং এটিকে সক্রিয় হিসেবে কমিট করুন। এই অপারেশনাল ডেটাসেটটি হলো আপনার তৈরি করা থ্রেড নেটওয়ার্কের কনফিগারেশন।
> dataset init new Done > dataset Active Timestamp: 1 Channel: 20 Channel Mask: 07fff800 Ext PAN ID: d6263b6d857647da Mesh Local Prefix: fd61:2344:9a52:ede0/64 Network Key: e4344ca17d1dca2a33f064992f31f786 Network Name: OpenThread-c169 PAN ID: 0xc169 PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
এই ডেটাসেটটিকে সক্রিয় হিসেবে কমিট করুন:
> dataset commit active Done
IPv6 ইন্টারফেসটি চালু করুন:
> ifconfig up Done
থ্রেড প্রোটোকল অপারেশন শুরু করুন:
> thread start Done
কয়েক সেকেন্ড অপেক্ষা করুন এবং যাচাই করুন যে ডিভাইসটি থ্রেড লিডার হয়েছে। লিডার হলো সেই ডিভাইস যা রাউটার আইডি বরাদ্দ ব্যবস্থাপনার জন্য দায়ী।
> state leader Done
নোড ১-এর থ্রেড ইন্টারফেসে বরাদ্দ করা IPv6 অ্যাড্রেসগুলো দেখুন (আপনার আউটপুট ভিন্ন হবে):
> ipaddr fd61:2344:9a52:ede0:0:ff:fe00:fc00 fd61:2344:9a52:ede0:0:ff:fe00:5000 fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6 fe80:0:0:0:94da:92ea:1353:4f3b Done
নির্দিষ্ট IPv6 অ্যাড্রেসের প্রকারগুলি লক্ষ্য করুন:
-
fd= mesh-local দিয়ে শুরু হয় -
fe80= লিঙ্ক-লোকাল দিয়ে শুরু হয়
মেশ-লোকাল অ্যাড্রেসের প্রকারভেদগুলোকে আরও শ্রেণীবদ্ধ করা হয়:
- এতে
ff:fe00= রাউটার লোকেটর (RLOC) রয়েছে। -
ff:fe00= এন্ডপয়েন্ট আইডেন্টিফায়ার (EID) ধারণ করে না
আপনার কনসোল আউটপুট থেকে EID-টি শনাক্ত করুন এবং পরবর্তী ব্যবহারের জন্য এটি লিখে রাখুন। উপরের নমুনা আউটপুটে, EID-টি হলো:
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
২. নোড ২ চালু করুন
একটি নতুন টার্মিনাল খুলুন এবং openthread ডিরেক্টরিতে গিয়ে CLI প্রসেসটি চালু করুন। এটি আপনার দ্বিতীয় সিমুলেটেড থ্রেড ডিভাইস:
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 2
দ্রষ্টব্য: এই কমান্ডটি চালানোর পর যদি আপনি > প্রম্পটটি দেখতে না পান, তাহলে enter চাপুন।
নোড ১-এর অপারেশনাল ডেটাসেটের মানগুলোই ব্যবহার করে থ্রেড নেটওয়ার্ক কী এবং প্যান আইডি কনফিগার করুন:
> dataset networkkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
এই ডেটাসেটটিকে সক্রিয় হিসেবে কমিট করুন:
> dataset commit active Done
IPv6 ইন্টারফেসটি চালু করুন:
> ifconfig up Done
থ্রেড প্রোটোকল অপারেশন শুরু করুন:
> thread start Done
ডিভাইসটি একটি চাইল্ড হিসেবে নিজেকে ইনিশিয়ালাইজ করবে। একটি থ্রেড চাইল্ড একটি এন্ড ডিভাইসের সমতুল্য, যা এমন একটি থ্রেড ডিভাইস যা শুধুমাত্র একটি প্যারেন্ট ডিভাইসের সাথে ইউনিকাস্ট ট্র্যাফিক প্রেরণ ও গ্রহণ করে।
> state child Done
২ মিনিটের মধ্যে আপনি স্টেটটি child থেকে router পরিবর্তিত হতে দেখবেন। একটি মেশ এক্সটেন্ডার থ্রেড ডিভাইসগুলোর মধ্যে ট্র্যাফিক রাউটিং করতে সক্ষম। এটিকে প্যারেন্ট হিসেবেও উল্লেখ করা হয়।
> state router Done
নেটওয়ার্ক যাচাই করুন
মেশ নেটওয়ার্কটি যাচাই করার একটি সহজ উপায় হলো রাউটার টেবিলটি দেখা।
১. সংযোগ পরীক্ষা করুন
নোড ২ থেকে RLOC16 সংগ্রহ করুন। RLOC16 হলো ডিভাইসটির RLOC IPv6 অ্যাড্রেসের শেষ ১৬ বিট।
> rloc16 5800 Done
নোড ১-এর রাউটার টেবিলে নোড ২-এর RLOC16 চেক করুন। প্রথমে নিশ্চিত হয়ে নিন যে নোড ২ রাউটার স্টেটে সুইচ করেছে।
> router table | ID | RLOC16 | Next Hop | Path Cost | LQI In | LQI Out | Age | Extended MAC | +----+--------+----------+----------+-------+---------+-----+------------------+ | 20 | 0x5000 | 63 | 0 | 0 | 0 | 0 | 96da92ea13534f3b | | 22 | 0x5800 | 63 | 0 | 3 | 3 | 23 | 5a4eb647eb6bc66c |
টেবিলে নোড ১-এর RLOC 0xa800 পাওয়া গেছে, যা নিশ্চিত করে যে এটি মেশের সাথে সংযুক্ত।
২. নোড ২ থেকে নোড ১-কে পিং করুন
দুটি সিমুলেটেড থ্রেড ডিভাইসের মধ্যে সংযোগ যাচাই করুন। নোড ২ থেকে, নোড ১-কে বরাদ্দ করা EID-টি ping :
> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6 > 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1 hlim=64 time=12ms
> প্রম্পটে ফিরে যেতে enter চাপুন।
নেটওয়ার্ক পরীক্ষা করুন
এখন যেহেতু আপনি দুটি সিমুলেটেড থ্রেড ডিভাইসের মধ্যে সফলভাবে পিং করতে পারছেন, একটি নোডকে অফলাইনে নিয়ে মেশ নেটওয়ার্কটি পরীক্ষা করুন।
নোড ১-এ ফিরে যান এবং থ্রেডটি বন্ধ করুন:
> thread stop Done
নোড ২-এ সুইচ করুন এবং অবস্থা পরীক্ষা করুন। দুই মিনিটের মধ্যে, নোড ২ শনাক্ত করবে যে লিডার (নোড ১) অফলাইন, এবং আপনি দেখবেন নোড ২ নেটওয়ার্কের leader হয়ে যাচ্ছে:
> state router Done ... > state leader Done
নিশ্চিত হয়ে গেলে, প্রস্থান করার আগে থ্রেডটি বন্ধ করুন এবং নোড ২ ফ্যাক্টরি রিসেট করুন। এই অনুশীলনে ব্যবহৃত থ্রেড নেটওয়ার্ক ক্রেডেনশিয়ালগুলো যেন পরবর্তী অনুশীলনে স্থানান্তরিত না হয়, তা নিশ্চিত করার জন্যই ফ্যাক্টরি রিসেট করা হয়।
> thread stop Done > factoryreset > > exit
এছাড়াও ফ্যাক্টরি রিসেট করুন এবং নোড ১ থেকে প্রস্থান করুন:
> factoryreset > > exit
উপলব্ধ সকল CLI কমান্ড সম্পর্কে জানতে OpenThread CLI Reference দেখুন।
৫. কমিশনিং-এর মাধ্যমে নোডগুলিকে প্রমাণীকরণ করুন
পূর্ববর্তী অনুশীলনে, আপনি দুটি সিমুলেটেড ডিভাইস দিয়ে একটি থ্রেড নেটওয়ার্ক স্থাপন করেছিলেন এবং সংযোগ যাচাই করেছিলেন। তবে, এটি শুধুমাত্র ডিভাইসগুলোর মধ্যে প্রমাণীকরণবিহীন IPv6 লিঙ্ক-লোকাল ট্র্যাফিককে চলাচল করতে দেয়। তাদের মধ্যে (এবং একটি থ্রেড বর্ডার রাউটারের মাধ্যমে ইন্টারনেটে) গ্লোবাল IPv6 ট্র্যাফিক রাউট করার জন্য, নোডগুলোকে অবশ্যই প্রমাণীকৃত হতে হবে।
প্রমাণীকরণের জন্য, একটি ডিভাইসকে কমিশনার হিসেবে কাজ করতে হবে। কমিশনার হলো নতুন থ্রেড ডিভাইসগুলোর জন্য বর্তমানে নির্বাচিত প্রমাণীকরণ সার্ভার এবং নেটওয়ার্কে যোগদানের জন্য প্রয়োজনীয় নেটওয়ার্ক ক্রেডেনশিয়াল সরবরাহকারী অনুমোদনকারী।
এই অনুশীলনে, আমরা আগের মতোই দুই-নোড টপোলজি ব্যবহার করব। অথেনটিকেশনের জন্য, থ্রেড লিডার কমিশনার হিসেবে এবং মেশ এক্সটেন্ডার জয়নার হিসেবে কাজ করবে।

১. একটি নেটওয়ার্ক তৈরি করুন
যদি আগের অনুশীলন থেকে চালিয়ে যান, তাহলে আপনার দুটি টার্মিনাল উইন্ডো আগে থেকেই খোলা থাকা উচিত। যদি তা না হয়, তবে নিশ্চিত করুন যে দুটি খোলা এবং ব্যবহারের জন্য প্রস্তুত আছে। একটি নোড ১ হিসেবে এবং অন্যটি নোড ২ হিসেবে কাজ করবে।
নোড ১-এ, CLI প্রসেসটি চালু করুন:
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 1
দ্রষ্টব্য: এই কমান্ডটি চালানোর পর যদি আপনি > প্রম্পটটি দেখতে না পান, তাহলে enter চাপুন।
একটি নতুন অপারেশনাল ডেটাসেট তৈরি করুন, সেটিকে সক্রিয় হিসেবে কমিট করুন এবং থ্রেড শুরু করুন:
> dataset init new Done > dataset Active Timestamp: 1 Channel: 12 Channel Mask: 07fff800 Ext PAN ID: e68d05794bf13052 Mesh Local Prefix: fd7d:ddf7:877b:8756/64 Network Key: a77fe1d03b0e8028a4e13213de38080e Network Name: OpenThread-8f37 PAN ID: 0x8f37 PSKc: f9debbc1532487984b17f92cd55b21fc Security Policy: 0, onrcb Done
এই ডেটাসেটটিকে সক্রিয় হিসেবে কমিট করুন:
> dataset commit active Done
IPv6 ইন্টারফেসটি চালু করুন:
> ifconfig up Done
থ্রেড প্রোটোকল অপারেশন শুরু করুন:
> thread start Done
কয়েক সেকেন্ড অপেক্ষা করুন এবং যাচাই করুন যে ডিভাইসটি থ্রেড লিডার হয়েছে:
> state leader Done
২. কমিশনারের ভূমিকা শুরু করুন
নোড ১-এ থাকা অবস্থায়, কমিশনার ভূমিকাটি শুরু করুন:
> commissioner start Done
J01NME জয়নার ক্রেডেনশিয়াল ব্যবহার করে যেকোনো জয়নারকে ( * ওয়াইল্ডকার্ড ব্যবহার করে) নেটওয়ার্কে কমিশন করার অনুমতি দিন। জয়নার হলো এমন একটি ডিভাইস যা একজন মানব প্রশাসক একটি কমিশনকৃত থ্রেড নেটওয়ার্কে যুক্ত করেন।
> commissioner joiner add * J01NME Done
৩. যোগদানকারীর ভূমিকা শুরু করুন
দ্বিতীয় একটি টার্মিনাল উইন্ডোতে, একটি নতুন CLI প্রসেস চালু করুন। এটি হলো নোড ২।
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 2
নোড ২-এ, J01NME জয়নার ক্রেডেনশিয়াল ব্যবহার করে জয়নার রোলটি সক্রিয় করুন।
> ifconfig up Done > joiner start J01NME Done
নিশ্চিতকরণের জন্য কয়েক সেকেন্ড অপেক্ষা করুন ...
Join success
যোগদানকারী হিসেবে, ডিভাইসটি (নোড ২) কমিশনারের (নোড ১) কাছে সফলভাবে নিজেকে প্রমাণীকরণ করেছে এবং থ্রেড নেটওয়ার্কের পরিচয়পত্র গ্রহণ করেছে।
এখন যেহেতু নোড ২ প্রমাণীকৃত হয়েছে, থ্রেডটি শুরু করুন:
> thread start Done
৪. নেটওয়ার্ক প্রমাণীকরণ যাচাই করুন
নোড ২ নেটওয়ার্কে যুক্ত হয়েছে কিনা তা যাচাই করতে এর state পরীক্ষা করুন। দুই মিনিটের মধ্যে, নোড ২ child থেকে router রূপান্তরিত হয়।
> state child Done ... > state router Done
৫. কনফিগারেশন রিসেট করুন
পরবর্তী অনুশীলনের জন্য প্রস্তুত হতে, কনফিগারেশন রিসেট করুন। প্রতিটি নোডে, থ্রেড বন্ধ করুন, ফ্যাক্টরি রিসেট করুন এবং সিমুলেটেড থ্রেড ডিভাইস থেকে বেরিয়ে যান:
> thread stop Done > factoryreset > > exit
factoryreset কমান্ডের পর > প্রম্পটটি ফিরিয়ে আনতে আপনাকে কয়েকবার enter চাপতে হতে পারে।
৬. OpenThread Daemon দিয়ে নেটওয়ার্ক পরিচালনা করুন
এই অনুশীলনের জন্য, আমরা একটি CLI ইনস্ট্যান্স (একটি একক এমবেডেড SoC থ্রেড ডিভাইস) এবং একটি রেডিও কো-প্রসেসর (RCP) ইনস্ট্যান্স সিমুলেট করব।
ot-daemon হলো OpenThread Posix অ্যাপের একটি মোড, যা ইনপুট ও আউটপুট হিসেবে একটি UNIX সকেট ব্যবহার করে, যাতে OpenThread কোর একটি সার্ভিস হিসেবে চলতে পারে। কোনো ক্লায়েন্ট OpenThread CLI-কে প্রোটোকল হিসেবে ব্যবহার করে সকেটের সাথে সংযোগ স্থাপনের মাধ্যমে এই সার্ভিসের সাথে যোগাযোগ করতে পারে।
ot-ctl হলো ot-daemon দ্বারা প্রদত্ত একটি CLI, যা RCP পরিচালনা ও কনফিগার করার জন্য ব্যবহৃত হয়। এটি ব্যবহার করে আমরা থ্রেড ডিভাইস দ্বারা তৈরি নেটওয়ার্কের সাথে RCP-কে সংযুক্ত করব।
ot-daemon ব্যবহার করুন
এই অনুশীলনীতে নিম্নলিখিত তিনটি টার্মিনাল উইন্ডো ব্যবহার করা হবে:
- সিমুলেটেড থ্রেড ডিভাইসের (নোড ১) CLI ইনস্ট্যান্স
-
ot-daemonপ্রক্রিয়া -
ot-ctlCLI ইনস্ট্যান্স
পূর্ববর্তী অনুশীলন থেকে চালিয়ে গেলে আপনার ইতিমধ্যেই দুটি টার্মিনাল উইন্ডো খোলা থাকার কথা। এই অনুশীলনের জন্য আপনার কাছে তিনটি টার্মিনাল উইন্ডো উপলব্ধ আছে তা নিশ্চিত করতে তৃতীয়টি খুলুন।
১. নোড ১ শুরু করুন
প্রথম টার্মিনাল উইন্ডোতে, আপনার সিমুলেটেড থ্রেড ডিভাইসের জন্য CLI প্রসেসটি চালু করুন:
$ cd ~/src/openthread $ ./build/simulation/examples/apps/cli/ot-cli-ftd 1
দ্রষ্টব্য: এই কমান্ডটি চালানোর পর যদি আপনি > প্রম্পটটি দেখতে না পান, তাহলে enter চাপুন।
একটি নতুন অপারেশনাল ডেটাসেট তৈরি করুন, সেটিকে সক্রিয় হিসেবে কমিট করুন এবং থ্রেড শুরু করুন:
> dataset init new Done > dataset Active Timestamp: 1 Channel: 13 Channel Mask: 07fff800 Ext PAN ID: 97d584bcd493b824 Mesh Local Prefix: fd55:cf34:dea5:7994/64 Network Key: ba6e886c7af50598df1115fa07658a83 Network Name: OpenThread-34e4 PAN ID: 0x34e4 PSKc: 38d6fd32c866927a4dfcc06d79ae1192 Security Policy: 0, onrcb Done
এই ডেটাসেটটিকে সক্রিয় হিসেবে কমিট করুন:
> dataset commit active Done
IPv6 ইন্টারফেসটি চালু করুন:
> ifconfig up Done
থ্রেড প্রোটোকল অপারেশন শুরু করুন:
> thread start Done
নোড ১-এর থ্রেড ইন্টারফেসে বরাদ্দকৃত IPv6 অ্যাড্রেসগুলো দেখুন:
> ipaddr fd55:cf34:dea5:7994:0:ff:fe00:fc00 fd55:cf34:dea5:7994:0:ff:fe00:d000 fd55:cf34:dea5:7994:460:872c:e807:c4ab fe80:0:0:0:9cd8:aab6:482f:4cdc Done >
"সিমুলেট এ থ্রেড নেটওয়ার্ক" ধাপে যেমন ব্যাখ্যা করা হয়েছে, একটি অ্যাড্রেস হলো লিঙ্ক-লোকাল ( fe80 ) এবং তিনটি হলো মেশ-লোকাল ( fd )। EID হলো সেই মেশ-লোকাল অ্যাড্রেস, যেটিতে ff:fe00 থাকে না। এই স্যাম্পল আউটপুটে, EID হলো fd55:cf34:dea5:7994:460:872c:e807:c4ab ।
আপনার ipaddr আউটপুট থেকে নির্দিষ্ট EID-টি শনাক্ত করুন, যেটি নোডটির সাথে যোগাযোগের জন্য ব্যবহৃত হবে।
২. ot-daemon চালু করুন।
দ্বিতীয় টার্মিনাল উইন্ডোতে, openthread ডিরেক্টরিতে যান এবং একটি RCP নোডের জন্য ot-daemon চালু করুন, যেটিকে আমরা নোড ২ বলব। -v verbose ফ্ল্যাগটি ব্যবহার করুন যাতে আপনি লগ আউটপুট দেখতে এবং এটি চলছে কিনা তা নিশ্চিত করতে পারেন, এবং অবশ্যই sudo ব্যবহার করবেন।
$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
'spinel+hdlc+forkpty://build/simulation/examples/apps/ncp/ot-rcp?forkpty-arg=2'
সফল হলে, ভার্বোস মোডে থাকা 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-ctl ব্যবহার করুন।
আমরা এখনও নোড ২ ( ot-daemon RCP)-কে কোনো থ্রেড নেটওয়ার্কে যুক্ত করিনি। এখানেই ot-ctl ভূমিকা। ot-ctl OpenThread CLI অ্যাপের মতোই একই CLI ব্যবহার করে। তাই, আপনি অন্যান্য সিমুলেটেড থ্রেড ডিভাইসগুলোর মতোই ot-daemon নোডগুলোকে নিয়ন্ত্রণ করতে পারবেন।
তৃতীয় একটি টার্মিনাল উইন্ডোতে, ot-ctl চালু করুন:
$ sudo ./build/posix/src/posix/ot-ctl >
দ্রষ্টব্য: এই কমান্ডটি চালানোর পর যদি আপনি > প্রম্পটটি দেখতে না পান, তাহলে enter চাপুন।
এই তৃতীয় টার্মিনাল উইন্ডোতে আপনি ot-ctl ব্যবহার করে নোড ২ (RCP নোড) পরিচালনা করবেন, যেটি আপনি দ্বিতীয় টার্মিনাল উইন্ডোতে ot-daemon দিয়ে চালু করেছিলেন। নোড ২-এর state পরীক্ষা করুন:
> state disabled Done
নির্দিষ্ট জয়নারের জন্য যোগদান সীমাবদ্ধ করতে নোড ২-এর eui64 নিন:
> eui64 18b4300000000001 Done
নোড ১-এ (প্রথম টার্মিনাল উইন্ডো), কমিশনার চালু করুন এবং শুধুমাত্র সেই eui64-এর জন্য যোগদান সীমাবদ্ধ করুন:
> commissioner start Done > commissioner joiner add 18b4300000000001 J01NME Done
নোড ২-এ (তৃতীয় টার্মিনাল উইন্ডো), নেটওয়ার্ক ইন্টারফেসটি চালু করুন এবং নেটওয়ার্কে যোগদান করুন:
> ifconfig up Done > joiner start J01NME Done
নিশ্চিতকরণের জন্য কয়েক সেকেন্ড অপেক্ষা করুন ...
Join success
যোগদানকারী হিসেবে, আরসিপি (নোড ২) কমিশনারের (নোড ১) কাছে সফলভাবে নিজেকে প্রমাণীকরণ করেছে এবং থ্রেড নেটওয়ার্কের পরিচয়পত্র গ্রহণ করেছে।
এখন নোড ২-কে থ্রেড নেটওয়ার্কে যুক্ত করুন:
> thread start Done
৪. নেটওয়ার্ক প্রমাণীকরণ যাচাই করুন
নোড ২ নেটওয়ার্কে যুক্ত হয়েছে কিনা তা যাচাই করতে এর state পরীক্ষা করুন। দুই মিনিটের মধ্যে, নোড ২ child থেকে router রূপান্তরিত হয়।
> state child Done ... > state router Done
৫. সংযোগ যাচাই করুন
Ctrl+D অথবা exit কমান্ড ব্যবহার করে ot-ctl বন্ধ করুন, এবং আপনার হোস্ট মেশিনের কমান্ড লাইনে, ping6 কমান্ড ব্যবহার করে নোড ১-এর EID দিয়ে সেটিকে পিং করুন। যদি ot-daemon RCP ইনস্ট্যান্সটি সফলভাবে থ্রেড নেটওয়ার্কে যুক্ত হয় এবং তার সাথে যোগাযোগ স্থাপন করে, তাহলে পিং সফল হবে।
$ ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms --- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms
৭. অভিনন্দন!
আপনি OpenThread ব্যবহার করে আপনার প্রথম থ্রেড নেটওয়ার্কটি সফলভাবে সিমুলেট করেছেন। চমৎকার!
এই কোডল্যাবে আপনি শিখেছেন কীভাবে:
- ওপেনথ্রেড বিল্ড টুলচেইন সেট আপ করুন
- একটি থ্রেড নেটওয়ার্ক অনুকরণ করুন
- থ্রেড নোডগুলি প্রমাণীকরণ করুন
- OpenThread Daemon ব্যবহার করে একটি থ্রেড নেটওয়ার্ক পরিচালনা করুন
আপনি যদি আরও জানতে চান, তাহলে এই তথ্যসূত্রগুলো দেখুন: