1. ভূমিকা
Google দ্বারা প্রকাশিত OpenThread হল থ্রেড নেটওয়ার্কিং প্রোটোকলের একটি ওপেন-সোর্স বাস্তবায়ন। গুগল নেস্ট ওপেন থ্রেড প্রকাশ করেছে যাতে নেস্ট পণ্যগুলিতে ব্যবহৃত প্রযুক্তিটি বিকাশকারীদের কাছে বিস্তৃতভাবে উপলব্ধ করা যায় যাতে সংযুক্ত বাড়ির পণ্যগুলির বিকাশকে ত্বরান্বিত করা যায়।
থ্রেড স্পেসিফিকেশন হোম অ্যাপ্লিকেশনের জন্য একটি IPv6-ভিত্তিক নির্ভরযোগ্য, নিরাপদ এবং কম-পাওয়ার ওয়্যারলেস ডিভাইস-টু-ডিভাইস যোগাযোগ প্রোটোকল সংজ্ঞায়িত করে। OpenThread সমস্ত থ্রেড নেটওয়ার্কিং স্তর প্রয়োগ করে যার মধ্যে IPv6, 6LoWPAN, IEEE 802.15.4 MAC নিরাপত্তা, Mesh Link Establishment, এবং Mesh Routing সহ।
এই কোডল্যাব ডকার ব্যবহার করে ইমুলেটেড ডিভাইসে একটি থ্রেড নেটওয়ার্ক সিমুলেট করার মাধ্যমে আপনাকে নিয়ে যাবে।
আপনি কি শিখবেন
- কিভাবে OpenThread বিল্ড টুলচেন সেট আপ করবেন
- কিভাবে একটি থ্রেড নেটওয়ার্ক অনুকরণ
- কিভাবে থ্রেড নোড প্রমাণীকরণ
- কিভাবে OpenThread ডেমনের সাথে একটি থ্রেড নেটওয়ার্ক পরিচালনা করবেন
আপনি কি প্রয়োজন হবে
- ডকার
- লিনাক্সের প্রাথমিক জ্ঞান, নেটওয়ার্ক রাউটিং
2. ডকার সেট আপ করুন
এই কোডল্যাবটি লিনাক্স, ম্যাক ওএস এক্স বা উইন্ডোজ মেশিনে ডকার ব্যবহার করার জন্য ডিজাইন করা হয়েছে। লিনাক্স হল প্রস্তাবিত পরিবেশ।
ডকার ইনস্টল করুন
আপনার পছন্দের ওএসে ডকার ইনস্টল করুন।
ডকার ইমেজ টানুন
একবার ডকার ইনস্টল হয়ে গেলে, একটি টার্মিনাল উইন্ডো খুলুন এবং openthread/environment
ডকার ইমেজ টানুন। এই ছবিতে OpenThread এবং OpenThread ডেমন পূর্ব-নির্মিত এবং এই কোডল্যাবের জন্য ব্যবহারের জন্য প্রস্তুত বৈশিষ্ট্যগুলি রয়েছে৷
$ docker pull openthread/environment:latest
মনে রাখবেন সম্পূর্ণ ডাউনলোড হতে কয়েক মিনিট সময় লাগতে পারে।
একটি টার্মিনাল উইন্ডোতে, চিত্র থেকে একটি ডকার কন্টেইনার শুরু করুন এবং এর bash
শেলের সাথে সংযোগ করুন:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
আপনি কন্টেইনার থেকে প্রস্থান করার সময় --rm
বিকল্পটি ধারকটিকে মুছে দেয়। আপনি যদি ধারকটি মুছে ফেলতে না চান তবে এই বিকল্পটি ব্যবহার করবেন না।
এই কোডল্যাবের জন্য প্রয়োজনীয় পতাকাগুলি নোট করুন:
-
--sysctl net.ipv6.conf.all.disable_ipv6=0
— এটি কন্টেইনারের মধ্যে IPv6 সক্রিয় করে -
--cap-add=net_admin
— NET_ADMIN ক্ষমতা সক্রিয় করে, যা আপনাকে নেটওয়ার্ক-সম্পর্কিত ক্রিয়াকলাপগুলি চালানোর অনুমতি দেয়, যেমন IP রুট যোগ করা
একবার ধারকটিতে, আপনার এটির মতো একটি প্রম্পট থাকা উচিত:
root@c0f3912a74ff:/#
উপরের উদাহরণে, c0f3912a74ff
হল কন্টেইনার আইডি। আপনার ডকার কন্টেইনারের কন্টেইনার আইডি এই কোডল্যাবের প্রম্পটে দেখানো একটি থেকে আলাদা হবে।
ডকার ব্যবহার করে
এই কোডল্যাব ধরে নেয় আপনি ডকার ব্যবহার করার মূল বিষয়গুলি জানেন। কোডল্যাবের সম্পূর্ণতার জন্য আপনার ডকার পাত্রে থাকা উচিত।
3. একটি থ্রেড নেটওয়ার্ক অনুকরণ করুন
এই কোডল্যাবের জন্য আপনি যে উদাহরণ অ্যাপ্লিকেশনটি ব্যবহার করবেন তা একটি ন্যূনতম OpenThread অ্যাপ্লিকেশন প্রদর্শন করে যা একটি মৌলিক কমান্ড-লাইন ইন্টারফেসের (CLI) মাধ্যমে OpenThread কনফিগারেশন এবং ব্যবস্থাপনা ইন্টারফেসগুলিকে প্রকাশ করে।
এই অনুশীলনটি আপনাকে অন্য এমুলেটেড থ্রেড ডিভাইস থেকে একটি ইমুলেটেড থ্রেড ডিভাইসকে পিং করার জন্য প্রয়োজনীয় ন্যূনতম পদক্ষেপগুলির মধ্য দিয়ে নিয়ে যায়।
নীচের চিত্রটি একটি মৌলিক থ্রেড নেটওয়ার্ক টপোলজি বর্ণনা করে। এই অনুশীলনের জন্য, আমরা সবুজ বৃত্তের মধ্যে দুটি নোডকে অনুকরণ করব: একটি থ্রেড লিডার এবং থ্রেড রাউটার তাদের মধ্যে একটি একক সংযোগ সহ।
নেটওয়ার্ক তৈরি করুন
1. স্টার্ট নোড 1
যদি আপনি ইতিমধ্যে এটি না করে থাকেন, একটি টার্মিনাল উইন্ডোতে, ডকার কন্টেইনারটি শুরু করুন এবং এর bash
শেলের সাথে সংযোগ করুন:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
ডকার কন্টেইনারে, ot-cli-ftd
বাইনারি ব্যবহার করে একটি এমুলেটেড থ্রেড ডিভাইসের জন্য CLI প্রক্রিয়া তৈরি করুন।
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1
দ্রষ্টব্য: আপনি যদি এই কমান্ডটি চালানোর পরে >
প্রম্পটটি দেখতে না পান তবে enter
টিপুন।
এই বাইনারি একটি OpenThread ডিভাইস প্রয়োগ করে। IEEE 802.15.4 রেডিও ড্রাইভার UDP এর উপরে প্রয়োগ করা হয় (IEEE 802.15.4 ফ্রেম UDP পেলোডের মধ্যে পাস করা হয়)।
1
-এর আর্গুমেন্ট হল একটি ফাইল বর্ণনাকারী যা অনুকরণ করা ডিভাইসের জন্য "ফ্যাক্টরি-অ্যাসাইন করা" IEEE EUI-64-এর ন্যূনতম-গুরুত্বপূর্ণ বিটগুলিকে উপস্থাপন করে। IEEE 802.15.4 রেডিও এমুলেশন (পোর্ট = 9000 + ফাইল বর্ণনাকারী) এর জন্য একটি 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
নোড 1 এর থ্রেড ইন্টারফেসে নির্ধারিত 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
2. নোড 2 শুরু করুন
একটি নতুন টার্মিনাল খুলুন এবং নোড 2 এর জন্য ব্যবহার করার জন্য বর্তমানে চলমান ডকার কন্টেইনারে একটি bash
শেল চালান।
$ docker exec -it codelab_otsim_ctnr bash
এই নতুন bash
প্রম্পটে, আর্গুমেন্ট 2
দিয়ে CLI প্রক্রিয়াটি শুরু করুন। এটি আপনার দ্বিতীয় অনুকরণ করা থ্রেড ডিভাইস:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
দ্রষ্টব্য: আপনি যদি এই কমান্ডটি চালানোর পরে >
প্রম্পটটি দেখতে না পান তবে enter
টিপুন।
থ্রেড নেটওয়ার্ক কী এবং প্যান আইডি কনফিগার করুন, নোড 1 এর অপারেশনাল ডেটাসেটের মতো একই মান ব্যবহার করে:
> dataset networkkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
এই ডেটাসেটটিকে সক্রিয় হিসাবে কমিট করুন:
> dataset commit active Done
IPv6 ইন্টারফেস আনুন:
> ifconfig up Done
থ্রেড প্রোটোকল অপারেশন শুরু করুন:
> thread start Done
ডিভাইসটি একটি শিশু হিসাবে নিজেকে শুরু করবে। একটি থ্রেড চাইল্ড একটি এন্ড ডিভাইসের সমতুল্য, এটি একটি থ্রেড ডিভাইস যা শুধুমাত্র একটি অভিভাবক ডিভাইসের সাথে ইউনিকাস্ট ট্র্যাফিক প্রেরণ এবং গ্রহণ করে।
> state child Done
2 মিনিটের মধ্যে আপনি child
থেকে router
স্টেট স্যুইচ দেখতে পাবেন। একটি থ্রেড রাউটার থ্রেড ডিভাইসের মধ্যে ট্রাফিক রাউটিং করতে সক্ষম। এটি একটি অভিভাবক হিসাবেও উল্লেখ করা হয়।
> state router Done
নেটওয়ার্ক যাচাই করুন
জাল নেটওয়ার্ক যাচাই করার একটি সহজ উপায় হল রাউটার টেবিলের দিকে তাকান।
1. সংযোগ পরীক্ষা করুন
নোড 2-এ, RLOC16 পান। RLOC16 হল ডিভাইসের RLOC IPv6 ঠিকানার শেষ 16 বিট।
> rloc16 5800 Done
নোড 1 এ, নোড 2 এর RLOC16 এর জন্য রাউটার টেবিলটি পরীক্ষা করুন। নিশ্চিত করুন যে নোড 2 প্রথমে রাউটার অবস্থায় স্যুইচ করেছে।
> router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+--------+-------+---+--------------------+ | 20 | 0x5000 | 63 | 0 | 0 | 0 | 0 | 96da92ea13534f3b | | 22 | 0x5800 | 63 | 0 | 3 | 3 | 23 | 5a4eb647eb6bc66c |
নোড 2 এর 0x5800
এর RLOC টেবিলে পাওয়া যায়, এটি নিশ্চিত করে যে এটি জালের সাথে সংযুক্ত।
2. নোড 2 থেকে পিং নোড 1
দুটি অনুকরণ করা থ্রেড ডিভাইসের মধ্যে সংযোগ যাচাই করুন। নোড 2-এ, নোড 1-এ বরাদ্দ করা 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
>
CLI প্রম্পটে ফিরে যেতে enter
টিপুন।
নেটওয়ার্ক পরীক্ষা করুন
এখন আপনি সফলভাবে দুটি অনুকরণ করা থ্রেড ডিভাইসের মধ্যে পিং করতে পারেন, একটি নোড অফলাইনে নিয়ে জাল নেটওয়ার্ক পরীক্ষা করুন।
নোড 1 এ ফিরে যান এবং থ্রেড বন্ধ করুন:
> thread stop Done
নোড 2 এ স্যুইচ করুন এবং রাজ্যটি পরীক্ষা করুন। দুই মিনিটের মধ্যে, নোড 2 শনাক্ত করে যে নেতা (নোড 1) অফলাইন, এবং নেটওয়ার্কের leader
হতে আপনার নোড 2 রূপান্তর দেখতে হবে:
> state router Done ... > state leader Done
একবার নিশ্চিত হয়ে গেলে, ডকার bash
প্রম্পটে ফিরে আসার আগে থ্রেড এবং ফ্যাক্টরি রিসেট নোড 2 বন্ধ করুন। এই অনুশীলনে আমরা যে থ্রেড নেটওয়ার্ক শংসাপত্রগুলি ব্যবহার করেছি তা নিশ্চিত করার জন্য একটি ফ্যাক্টরি রিসেট করা হয় পরবর্তী অনুশীলনে নিয়ে যাওয়া হয় না।
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
factoryreset
কমান্ডের পরে >
প্রম্পট ফিরিয়ে আনতে আপনাকে কয়েকবার enter
টিপুতে হতে পারে। ডকার কন্টেইনার থেকে প্রস্থান করবেন না।
এছাড়াও ফ্যাক্টরি রিসেট এবং নোড 1 থেকে প্রস্থান করুন:
> factoryreset > > exit root@c0f3912a74ff:/#
সমস্ত উপলব্ধ CLI কমান্ড অন্বেষণ করতে OpenThread CLI রেফারেন্স দেখুন।
4. কমিশনিং সঙ্গে নোড প্রমাণীকরণ
পূর্ববর্তী অনুশীলনে, আপনি দুটি সিমুলেটেড ডিভাইস এবং যাচাইকৃত সংযোগ সহ একটি থ্রেড নেটওয়ার্ক সেট আপ করেছেন। যাইহোক, এটি শুধুমাত্র অপ্রমাণিত IPv6 লিঙ্ক-স্থানীয় ট্র্যাফিককে ডিভাইসগুলির মধ্যে পাস করার অনুমতি দেয়। তাদের মধ্যে বিশ্বব্যাপী IPv6 ট্র্যাফিক রুট করতে (এবং একটি থ্রেড বর্ডার রাউটারের মাধ্যমে ইন্টারনেট), নোডগুলিকে অবশ্যই প্রমাণীকরণ করতে হবে।
প্রমাণীকরণের জন্য, একটি ডিভাইসকে অবশ্যই কমিশনার হিসাবে কাজ করতে হবে। কমিশনার হল নতুন থ্রেড ডিভাইসের জন্য বর্তমানে নির্বাচিত প্রমাণীকরণ সার্ভার, এবং ডিভাইসগুলির নেটওয়ার্কে যোগদানের জন্য প্রয়োজনীয় নেটওয়ার্ক শংসাপত্র প্রদানের জন্য অনুমোদনকারী৷
এই অনুশীলনে, আমরা আগের মতো একই দুই-নোড টপোলজি ব্যবহার করব। প্রমাণীকরণের জন্য, থ্রেড লিডার কমিশনার হিসাবে কাজ করবে, থ্রেড রাউটার যোগদানকারী হিসাবে কাজ করবে।
ডকার
অবশিষ্ট অনুশীলনে প্রতিটি নোডের (টার্মিনাল উইন্ডো) জন্য, নিশ্চিত করুন যে আপনি OpenThread বিল্ডের সাথে ডকার কন্টেইনার চালাচ্ছেন। পূর্ববর্তী অনুশীলন থেকে অব্যাহত থাকলে, একই ডকার পাত্রে ইতিমধ্যেই খোলা দুটি bash
প্রম্পট আপনার কাছে থাকা উচিত। যদি তা না হয়, ডকার ট্রাবলশুটিং ধাপটি দেখুন, অথবা কেবল সিমুলেট একটি থ্রেড নেটওয়ার্ক অনুশীলন পুনরায় করুন।
1. একটি নেটওয়ার্ক তৈরি করুন
নোড 1-এ, CLI প্রক্রিয়া তৈরি করুন:
root@c0f3912a74ff:/# /openthread/build/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
2. কমিশনারের ভূমিকা শুরু করুন
নোড 1 এ থাকাকালীন, কমিশনারের ভূমিকা শুরু করুন:
> commissioner start Done
J01NME
যোগদানকারী শংসাপত্রের সাথে যেকোনো যোগদানকারীকে ( *
ওয়াইল্ডকার্ড ব্যবহার করে) নেটওয়ার্কে কমিশন করার অনুমতি দিন। একটি যোগদানকারী এমন একটি ডিভাইস যা একজন মানব প্রশাসক দ্বারা একটি কমিশনড থ্রেড নেটওয়ার্কে যোগ করা হয়।
> commissioner joiner add * J01NME Done
3. যোগদানকারী ভূমিকা শুরু করুন
একটি দ্বিতীয় টার্মিনাল উইন্ডোতে, ডকার কন্টেইনারে, একটি নতুন CLI প্রক্রিয়া তৈরি করুন। এটি নোড 2।
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
নোড 2-এ, J01NME
জয়নার শংসাপত্র ব্যবহার করে যোগদানকারীর ভূমিকা সক্ষম করুন।
> ifconfig up Done > joiner start J01NME Done
... নিশ্চিতকরণের জন্য কয়েক সেকেন্ড অপেক্ষা করুন ...
Join success
একজন যোগদানকারী হিসেবে, ডিভাইস (নোড 2) সফলভাবে কমিশনারের (নোড 1) সাথে নিজেকে প্রমাণীকরণ করেছে এবং থ্রেড নেটওয়ার্ক শংসাপত্র পেয়েছে।
এখন যে নোড 2 প্রমাণিত হয়েছে, থ্রেড শুরু করুন:
> thread start Done
4. নেটওয়ার্ক প্রমাণীকরণ যাচাই করুন
এটি এখন নেটওয়ার্কে যোগদান করেছে তা যাচাই করতে নোড 2-এ state
পরীক্ষা করুন৷ দুই মিনিটের মধ্যে, child
থেকে router
নোড 2 রূপান্তর:
> state child Done ... > state router Done
5. কনফিগারেশন রিসেট করুন
পরবর্তী অনুশীলনের জন্য প্রস্তুত করতে, কনফিগারেশনটি পুনরায় সেট করুন। প্রতিটি নোডে, থ্রেড বন্ধ করুন, একটি ফ্যাক্টরি রিসেট করুন এবং অনুকরণ করা থ্রেড ডিভাইস থেকে প্রস্থান করুন:
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
factoryreset
কমান্ডের পরে >
প্রম্পট ফিরিয়ে আনতে আপনাকে কয়েকবার enter
টিপুতে হতে পারে।
5. OpenThread ডেমন দিয়ে নেটওয়ার্ক পরিচালনা করুন
এই অনুশীলনের জন্য, আমরা একটি CLI উদাহরণ (একটি একক এমবেডেড SoC থ্রেড ডিভাইস) এবং একটি রেডিও কো-প্রসেসর (RCP) উদাহরণ অনুকরণ করতে যাচ্ছি।
ot-daemon
হল OpenThread Posix অ্যাপের একটি মোড যা ইনপুট এবং আউটপুট হিসাবে একটি UNIX সকেট ব্যবহার করে, যাতে OpenThread কোর একটি পরিষেবা হিসাবে চলতে পারে। একটি ক্লায়েন্ট প্রোটোকল হিসাবে OpenThread CLI ব্যবহার করে সকেটের সাথে সংযোগ করে এই পরিষেবাটির সাথে যোগাযোগ করতে পারে।
ot-ctl
হল একটি CLI যা RCP পরিচালনা ও কনফিগার করার জন্য ot-daemon
দ্বারা সরবরাহ করা হয়। এটি ব্যবহার করে, আমরা থ্রেড ডিভাইস দ্বারা তৈরি নেটওয়ার্কের সাথে RCP সংযোগ করব।
ডকার
এই অনুশীলনে প্রতিটি নোডের (টার্মিনাল উইন্ডো) জন্য, নিশ্চিত করুন যে আপনি OpenThread বিল্ডের সাথে ডকার কন্টেইনার চালাচ্ছেন। পূর্ববর্তী অনুশীলন থেকে অব্যাহত থাকলে, আপনার একই ডকার পাত্রে ইতিমধ্যেই খোলা দুটি bash
প্রম্পট থাকা উচিত। যদি না হয়, ডকার সমস্যা সমাধানের পদক্ষেপটি দেখুন।
ওটি-ডেমন ব্যবহার করুন
এই অনুশীলনটি নিম্নলিখিতগুলির সাথে সম্পর্কিত তিনটি টার্মিনাল উইন্ডো ব্যবহার করবে:
- সিমুলেটেড থ্রেড ডিভাইসের CLI উদাহরণ (নোড 1)
-
ot-daemon
প্রক্রিয়া -
ot-ctl
CLI উদাহরণ
1. স্টার্ট নোড 1
প্রথম টার্মিনাল উইন্ডোতে, আপনার অনুকরণ করা থ্রেড ডিভাইসের জন্য CLI প্রক্রিয়াটি তৈরি করুন:
root@c0f3912a74ff:/# /openthread/build/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
নোড 1 এর থ্রেড ইন্টারফেসে নির্ধারিত 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 সনাক্ত করুন, যা নোডের সাথে যোগাযোগ করতে ব্যবহার করা হবে।
2. ওটি-ডেমন শুরু করুন
দ্বিতীয় টার্মিনাল উইন্ডোতে, একটি tun
ডিভাইস নোড তৈরি করুন এবং পঠন/লেখার অনুমতি সেট করুন:
root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200 root@c0f3912a74ff:/# chmod 600 /dev/net/tun
এই ডিভাইসটি ভার্চুয়াল ডিভাইসে প্যাকেট ট্রান্সমিশন এবং প্রাপ্তির জন্য ব্যবহৃত হয়। ডিভাইসটি ইতিমধ্যে তৈরি হয়ে থাকলে আপনি একটি ত্রুটি পেতে পারেন—এটি স্বাভাবিক এবং উপেক্ষা করা যেতে পারে৷
একটি RCP নোডের জন্য ot-daemon
শুরু করুন, যাকে আমরা নোড 2 বলব। -v
ভার্বোজ ফ্ল্যাগ ব্যবহার করুন যাতে আপনি লগ আউটপুট দেখতে পারেন এবং নিশ্চিত করতে পারেন যে এটি চলছে:
root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+forkpty:///openthread/build/examples/apps/ncp/ot-rcp?forkpty-arg=2'
সফল হলে, ভার্বোজ মোডে ot-daemon
নিম্নলিখিতগুলির মতো আউটপুট তৈরি করে:
ot-daemon[31]: Running OPENTHREAD/297a880; POSIX; Feb 1 2022 04:43:39 ot-daemon[31]: Thread version: 3 ot-daemon[31]: Thread interface: wpan0 ot-daemon[31]: RCP version: OPENTHREAD/297a880; SIMULATION; Feb 1 2022 04:42:50
এই টার্মিনালটি খোলা রাখুন এবং পটভূমিতে চলমান রাখুন। আপনি এতে আর কোন কমান্ড লিখবেন না।
3. নেটওয়ার্কে যোগ দিতে ot-ctl ব্যবহার করুন
আমরা এখনও কোনো থ্রেড নেটওয়ার্কে নোড 2 ( ot-daemon
আরসিপি) কমিশন করিনি। এখানেই ot-ctl
আসে৷ ot-ctl
একই CLI ব্যবহার করে OpenThread CLI অ্যাপের মতো৷ অতএব, আপনি অন্যান্য সিমুলেটেড থ্রেড ডিভাইসগুলির মতো একই পদ্ধতিতে ot-daemon
নোডগুলি নিয়ন্ত্রণ করতে পারেন।
একটি তৃতীয় টার্মিনাল উইন্ডো খুলুন এবং বিদ্যমান ধারকটি চালান:
$ docker exec -it codelab_otsim_ctnr bash
একবার পাত্রে, ot-ctl
শুরু করুন:
root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-ctl >
আপনি নোড 2 (আরসিপি নোড) পরিচালনা করতে এই তৃতীয় টার্মিনাল উইন্ডোতে ot-ctl
ব্যবহার করবেন যা আপনি ot-daemon
দিয়ে দ্বিতীয় টার্মিনাল উইন্ডোতে শুরু করেছিলেন। নোড 2 এর state
পরীক্ষা করুন:
> state disabled Done
নোড 2 এর eui64
পান, নির্দিষ্ট যোগদানকারীর সাথে যোগদান সীমাবদ্ধ করতে:
> eui64 18b4300000000001 Done
নোড 1 (প্রথম টার্মিনাল উইন্ডো) এ, কমিশনার শুরু করুন এবং শুধুমাত্র সেই eui64-এ যোগদান সীমাবদ্ধ করুন:
> commissioner start Done > commissioner joiner add 18b4300000000001 J01NME Done
তৃতীয় টার্মিনাল উইন্ডোতে, নোড 2 এর জন্য নেটওয়ার্ক ইন্টারফেস আনুন এবং নেটওয়ার্কে যোগ দিন:
> ifconfig up Done > joiner start J01NME Done
... নিশ্চিতকরণের জন্য কয়েক সেকেন্ড অপেক্ষা করুন ...
Join success
একজন যোগদানকারী হিসেবে, RCP (নোড 2) সফলভাবে কমিশনারের (নোড 1) সাথে নিজেকে প্রমাণীকরণ করেছে এবং থ্রেড নেটওয়ার্ক শংসাপত্র পেয়েছে।
এখন থ্রেড নেটওয়ার্কে নোড 2-এ যোগ দিন (আবার, তৃতীয় টার্মিনাল উইন্ডোতে):
> thread start Done
4. নেটওয়ার্ক প্রমাণীকরণ যাচাই করুন
তৃতীয় টার্মিনালে, নোড 2-এ state
পরীক্ষা করুন, এটি এখন নেটওয়ার্কে যোগদান করেছে তা যাচাই করতে। দুই মিনিটের মধ্যে, child
থেকে router
নোড 2 রূপান্তর:
> state child Done ... > state router Done
5. সংযোগ যাচাই করুন
তৃতীয় টার্মিনাল উইন্ডোতে, Ctrl+D অথবা exit
কমান্ড ব্যবহার করে ot-ctl
প্রস্থান করুন এবং কন্টেইনারের bash
কনসোলে ফিরে যান। এই কনসোল থেকে, পিং নোড 1, ping6
কমান্ডের সাথে এর EID ব্যবহার করে। যদি ot-daemon
RCP দৃষ্টান্ত সফলভাবে থ্রেড নেটওয়ার্কে যোগদান করা হয় এবং যোগাযোগ করা হয়, পিং সফল হয়:
root@c0f3912a74ff:/# 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
6. ডকার সমস্যা সমাধান
আপনি যদি ডকার কন্টেইনার থেকে প্রস্থান করে থাকেন
bash
প্রম্পট , আপনাকে এটি চলছে কিনা তা পরীক্ষা করতে হবে এবং প্রয়োজন অনুসারে পুনরায় চালু/পুনরায় প্রবেশ করতে হবে। আপনি --rm
বিকল্পটি ব্যবহার করেন নি যেখানে আপনি তৈরি করেছেন এমন কোনও ডকার কন্টেইনার এখনও বিদ্যমান থাকা উচিত।
কোন ডকার পাত্রে চলছে তা দেখানোর জন্য:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 505fc57ffc72 environment "bash" 10 minutes ago Up 10 minutes codelab_otsim_ctnr
সমস্ত ডকার পাত্রে দেখানোর জন্য (চলমান এবং থামানো উভয়ই):
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 505fc57ffc72 environment "bash" 10 minutes ago Up 10 minutes codelab_otsim_ctnr
আপনি যদি docker ps
কমান্ডের আউটপুটে ধারক codelab_otsim_ctnr
দেখতে না পান তবে এটি আবার চালান:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
শুধুমাত্র --rm
বিকল্পটি ব্যবহার করুন যদি আপনি কন্টেইনার থেকে প্রস্থান করার সময় ধারকটি মুছে ফেলতে চান।
যদি ধারকটি বন্ধ করা হয় ( docker ps -a
-এ তালিকাভুক্ত কিন্তু docker ps
নয়), এটি পুনরায় চালু করুন:
$ docker start -i codelab_otsim_ctnr
যদি ডকার কন্টেইনার ইতিমধ্যেই চলছে ( docker ps
এ তালিকাভুক্ত), প্রতিটি টার্মিনালে কন্টেইনারের সাথে পুনরায় সংযোগ করুন:
$ docker exec -it codelab_otsim_ctnr bash
"অপারেশন অনুমোদিত নয়" ত্রুটি৷
আপনি যদি নতুন OpenThread নোড তৈরি করার সময় ( mknod
কমান্ড ব্যবহার করে) Operation not permitted
ত্রুটিগুলি চালান, তবে নিশ্চিত করুন যে আপনি এই কোডল্যাবে প্রদত্ত কমান্ড অনুসারে রুট ব্যবহারকারী হিসাবে ডকার চালাচ্ছেন। এই কোডল্যাব রুটলেস মোডে ডকার চালানো সমর্থন করে না।
7. অভিনন্দন!
আপনি OpenThread ব্যবহার করে আপনার প্রথম থ্রেড নেটওয়ার্ক সফলভাবে সিমুলেট করেছেন। অসাধারন!
এই কোডল্যাবে আপনি শিখেছেন কিভাবে:
- OpenThread সিমুলেশন ডকার কন্টেইনার শুরু এবং পরিচালনা করুন
- একটি থ্রেড নেটওয়ার্ক অনুকরণ করুন
- থ্রেড নোড প্রমাণীকরণ
- OpenThread ডেমনের সাথে একটি থ্রেড নেটওয়ার্ক পরিচালনা করুন
থ্রেড এবং ওপেন থ্রেড সম্পর্কে আরও জানতে, এই রেফারেন্সগুলি অন্বেষণ করুন:
- openthread.io-তে থ্রেড প্রাইমার
- থ্রেড স্পেসিফিকেশন
- OpenThread GitHub সংগ্রহস্থল
- OpenThread CLI রেফারেন্স
- অতিরিক্ত OpenThread ডকার সমর্থন
অথবা, একটি ডকার কন্টেইনারে OpenThread বর্ডার রাউটার ব্যবহার করার চেষ্টা করুন!