1- المقدمة
تُعدّ OpenThread التي أطلقتها Google طريقة تنفيذ مفتوحة المصدر لبروتوكول شبكات سلسلة المحادثات. أصدرت Google Nest سلسلة محادثات مفتوحة من أجل إتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع للمطورين لتسريع تطوير المنتجات إلى المنزل المتصل.
تحدّد مواصفات سلاسل المحادثات بروتوكول الاتصال اللاسلكي الموثوق به والآمن والمنخفضة الطاقة المستند إلى بروتوكول IPv6 للتطبيقات المنزلية. ينفِّذ OpenThread جميع طبقات شبكات Thread، بما في ذلك IPv6 و6LoWPAN وIEEE 802.15.4 مع أمان MAC ومؤسسة Mesh Link وRouting Mesh.
سيرشدك هذا الدرس التطبيقي حول الترميز إلى كيفية محاكاة شبكة Thread على الأجهزة التي تمت محاكاتها باستخدام الإرساء.
ما ستتعرَّف عليه
- كيفية إعداد سلسلة أدوات إصدار OpenThread
- كيفية محاكاة شبكة Thread
- كيفية مصادقة عُقد سلاسل المحادثات
- كيفية إدارة شبكة Thread باستخدام بروتوكول OpenThread الخفي
المتطلبات
- قاعدة الإرساء
- المعرفة الأساسية بنظام التشغيل Linux وتوجيه الشبكة
2. إعداد الإرساء
تم تصميم هذا الدرس التطبيقي حول الترميز لاستخدام الإرساء على جهاز يعمل بنظام التشغيل Linux أو Mac OS X أو Windows. نظام التشغيل Linux هو البيئة المُوصى بها.
تثبيت الإرساء
ثبِّت الإرساء على نظام التشغيل الذي تختاره.
سحب صورة الإرساء
بعد تثبيت الإرساء، افتح نافذة طرفية واسحب صورة شريط الإرساء openthread/environment
. تعرض هذه الصورة OpenThread وOpenThread Daemon معادَين مسبقًا وجاهزة للاستخدام في هذا الدرس التطبيقي حول الترميز.
$ 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
يُرجى ملاحظة العلامات المطلوبة في هذا الدرس التطبيقي حول الترميز:
--sysctl net.ipv6.conf.all.disable_ipv6=0
: يؤدي هذا إلى تفعيل IPv6 ضمن الحاوية--cap-add=net_admin
— يتيح تفعيل NET_ADMIN، الذي يسمح لك بتنفيذ العمليات المتعلقة بالشبكة، مثل إضافة مسارات IP.
بعد الوصول إلى الحاوية، من المفترض أن تظهر لك رسالة مطالبة مشابهة لما يلي:
root@c0f3912a74ff:/#
في المثال أعلاه، c0f3912a74ff
هو رقم تعريف الحاوية. يختلف رقم تعريف الحاوية لمثيل حاوية الإرساء عن الرقم التعريفي المعروض في رسائل المطالبة لهذا الدرس التطبيقي حول الترميز.
استخدام الإرساء
يفترض الدرس التطبيقي حول الترميز هذا أنك على عِلم بأساسيات استخدام الإرساء. يجب أن تظل في حاوية الإرساء لإجراء الدرس التطبيقي بأكمله.
3- محاكاة شبكة Thread
يوضّح مثال التطبيق الذي ستستخدمه لهذا الدرس التطبيقي المُطبَّق الدرس التطبيقي على الأقل لـ OpenThread الذي يعرِض إعدادات OpenThread وواجهات الإدارة من خلال واجهة سطر الأوامر الأساسية (CLI).
ينقلك هذا التمارين إلى الحد الأدنى من الخطوات المطلوبة ليتم فحص جهاز Thread ذي محاكاة واحدة من جهاز Thread آخر في محاكاة.
يوضح الشكل أدناه مخطط طوبولوجيا شبكة Thread الأساسي. في هذا التمرين، سنحاكي العُقد داخل الدائرة الخضراء: قائد سلسلة المحادثات وجهاز توجيه سلسلة المحادثات مع وصلة واحدة بينهما.
إنشاء الشبكة
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
في حاوية الإرساء، عليك بدء عملية سطر الأوامر (CLI) لجهاز سلاسل محادثات الذي تمت محاكاهته باستخدام البرنامج الثنائي ot-cli-ftd
.
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 الاتحاد الأوروبي-64 للجهاز محاكاة. وتُستخدم هذه القيمة أيضًا عند الربط بمنفذ UDP لمحاكاة الراديو 802.15.4 (المنفذ = 9000 + وصف الملف). سيستخدِم كل مثيل من سلسلة محادثات ضمن محاكاة في هذا الدرس التطبيقي وصفًا مختلفًا للملف.
ملاحظة: استخدِم فقط كلمات وصفية لملف 1
أو أكثر كما هو موضّح في هذا الدرس التطبيقي حول الترميز عند بدء تشغيل الجهاز في محاكاة محاكاة. هناك وصف لملف 0
محجوز للاستخدام الآخر.
أنشِئ مجموعة بيانات تشغيلية جديدة والتزم بها كمجموعة نشطة. مجموعة بيانات التشغيل هي إعدادات شبكة Thread التي تنشئها.
> 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:
> thread start Done
انتظِر بضع ثوانٍ وتحقّق من أن الجهاز أصبح قائد سلسلة المحادثات. القائد هو الجهاز المسؤول عن إدارة تخصيص معرّف جهاز التوجيه.
> state leader Done
الاطّلاع على عناوين IPv6 المخصّصة لواجهة سلسلة محادثات العقدة 1&39; (ستختلف المخرجات):
> 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
= link-local
يتم تصنيف أنواع العناوين المحلية المتداخلة:
- تحتوي على
ff:fe00
= جهاز توجيه جهاز التوجيه (RLOC) - لا يحتوي على
ff:fe00
= معرّف نقطة النهاية (EID)
حدِّد المعرّف EID في الإخراج في وحدة التحكّم وسجِّله في قائمة لاستخدامه لاحقًا. في نموذج الناتج أعلاه، EID هو:
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
2. بدء العقدة 2
افتح نافذة طرفية جديدة ونفِّذ واجهة أوامر bash
في حاوية الإرساء الحالية لاستخدامها في العقدة 2.
$ docker exec -it codelab_otsim_ctnr bash
في رسالة المطالبة الجديدة bash
هذه، عليك بدء عملية سطر الأوامر (CLI) باستخدام الوسيطة 2
. هذا هو الجهاز الثاني الذي يحاكي سلسلة المحادثات:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
ملاحظة: إذا لم تظهر لك رسالة المطالبة >
بعد تشغيل هذا الأمر، اضغط على enter
.
اضبط مفتاح شبكة سلسلة المحادثات ورقم تعريف رقم PAN، باستخدام القيم نفسها كمجموعة البيانات التشغيلية للعقدة 1':
> dataset networkkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
التزم بمجموعة البيانات هذه كمجموعة نشطة:
> dataset commit active Done
اعرض واجهة IPv6:
> ifconfig up Done
بدء عملية بروتوكول Thread:
> thread start Done
سيتم إعداد الجهاز نفسه على أنّه وحدة فرعية. يعادل جهاز Child Thread جهازًا نهائيًا، وهو جهاز سلسلة محادثات يُرسِل زيارات واردة من خلال unicast ويستلمها فقط باستخدام جهاز رئيسي.
> state child Done
في غضون دقيقتين، من المفترض أن يظهر لك تبديل الحالة من child
إلى router
. يمكن لجهاز توجيه سلاسل المحادثات توجيه الزيارات بين أجهزة Thread. ويُشار إليها أيضًا باسم "الوالد".
> state router Done
التحقق من الشبكة
هناك طريقة سهلة للتحقق من الشبكة المتداخلة وهي من خلال الاطّلاع على جدول أجهزة التوجيه.
1- التحقّق من الاتصال بالإنترنت
في العقدة 2، احصل على RLOC16. RLOC16 هو آخر 16 بت من عنوان RLOC IPv6 على الجهاز.
> rloc16 5800 Done
في العقدة 1، تحقق من جدول جهاز التوجيه بحثًا عن العقدة 2's 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's RLOC من 0x5800
في الجدول، مع تأكيد أنها متصلة بالشبكة المتداخلة.
2. أداة فحص الاتصال بالعقدة 1 من العقدة 2
تحقَّق من إمكانية الربط بين جهازَي Thread المحاكيين. في العقدة 2، ping
تم تحديد EID للعقدة 1:
> 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
للعودة إلى إشعار واجهة سطر الأوامر (CLI) في >
.
اختبار الشبكة
بعد أن تمكّنت الآن من اختبار الاتصال بين جهازين من سلاسل المحادثات بنجاح، عليك اختبار الشبكة المتداخلة عن طريق أخذ عقدة واحدة بلا اتصال بالإنترنت.
الرجوع إلى العقدة 1 وإيقاف سلسلة المحادثات:
> thread stop Done
بدِّل إلى العقدة 2 وتحقّق من الحالة. خلال دقيقتين، تكتشف العقدة 2 أن القائد (العقدة 1) بلا اتصال بالإنترنت، ومن المفترض أن ترى انتقال العقدة 2 لتكون leader
من الشبكة:
> state router Done ... > state leader Done
بعد التأكيد، أوقِف سلسلة المحادثات والعقدة الثانية لإعادة الضبط على الإعدادات الأصلية قبل الخروج مرة أخرى إلى رسالة الإرساء bash
. تتم إعادة الضبط على الإعدادات الأصلية لضمان عدم نقل بيانات اعتماد شبكة Thread التي استخدمتها في هذه العملية إلى التمارين التالية.
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
قد تضطر إلى الضغط على enter
عدة مرات لإعادة رسالة المطالبة >
بعد أمر factoryreset
. لا تخرج من حاوية الإرساء.
إعادة الضبط على الإعدادات الأصلية والخروج من العقدة 1 أيضًا:
> factoryreset > > exit root@c0f3912a74ff:/#
يمكنك الاطّلاع على مرجع واجهة سطر الأوامر في OpenThread لاستكشاف جميع أوامر سطر الأوامر (CLI) المتاحة.
4. مصادقة العُقد باستخدام التفويض
في التمرين السابق، يمكنك إعداد شبكة Thread تتضمّن جهازين محاكيين واتصال تم التحقق منه. ومع ذلك، لا يسمح هذا إلا بحركة الزيارات المحلية التي تمت مصادقتها عبر بروتوكول IPv6 بين الأجهزة. لتوجيه زيارات IPv6 العامة بينها (والإنترنت عبر جهاز توجيه حدود سلسلة المحادثات)، يجب مصادقة العُقد.
للمصادقة، يجب أن يكون جهاز واحد مفوَّضًا. المفوّض هو خادم المصادقة المنتخَب حاليًا لأجهزة Thread الجديدة، والمُفوِّض لتقديم بيانات اعتماد الشبكة المطلوبة للأجهزة للانضمام إلى الشبكة.
في هذا التمرين، سنستخدم الهيكل نفسه الذي يمتدّ إلى عقدتَين. للمصادقة، سيعمل "قائد سلسلة المحادثات" كمُفوض، أي "جهاز توجيه سلسلة المحادثات" كرابط.
قاعدة الإرساء
بالنسبة إلى كل عُقدة (نافذة طرفية) في التمارين المتبقية، احرِص على تشغيل حاوية الإرساء باستخدام إصدار OpenThread. في حال المتابعة من التمرين السابق، من المفترض أن تظل لديك مطالبة واحدة (bash
) داخل حاوية الإرساء نفسها مفتوحة. وإذا لم يكن الأمر كذلك، راجِع خطوة تحديد مشاكل Doker وحلّها، أو أعِد تنفيذ عملية محاكاة شبكة Thread.
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:
> thread start Done
انتظِر بضع ثوانٍ وتحقّق من أن الجهاز أصبح قائد سلسلة المحادثات:
> state leader Done
2. بدء دور المفوَّض
أثناء استخدام العقدة 1، ابدأ دور المفوّض:
> commissioner start Done
السماح لأي انضمام (باستخدام حرف البدل *
) باستخدام بيانات اعتماد المشترك J01NME
بالعمولة على الشبكة. الانضمام هو جهاز تمت إضافته بواسطة مشرف بُني إلى شبكة Thread تم تفويضها.
> commissioner joiner add * J01NME Done
3- بدء دور "المُنجِر"
في نافذة الوحدة الطرفية الثانية، أدرِج عملية سطر سطر جديد في حاوية حاوية الإرساء. هذه هي العقدة 2.
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
في العقدة 2، يُرجى تفعيل دور"الانضمام"باستخدام بيانات اعتماد المشترك J01NME
.
> ifconfig up Done > joiner start J01NME Done
... انتظر بضع ثوانٍ للتأكيد ...
Join success
بصفته انضمامًا، تمت بنجاح مصادقة الجهاز (العقدة الثانية) مع المفوّض (العقدة 1) وتلقّى بيانات اعتماد شبكة Thread.
الآن وبعد أن تمت مصادقة العقدة 2، يمكنك بدء سلسلة محادثات:
> thread start Done
4. التحقّق من مصادقة الشبكة
تحقّق من state
على العقدة 2 للتأكد من أنّه تم الانضمام إلى الشبكة الآن. في غضون دقيقتين، يتم نقل العقدة 2 من child
إلى router
:
> state child Done ... > state router Done
5. إعادة ضبط الإعدادات
للتحضير للتمارين التالية، يمكنك إعادة ضبط الإعدادات. في كل عُقدة، أوقِف سلسلة المحادثات وأعِد ضبط الجهاز على الإعدادات الأصلية واخرج من جهاز سلاسل المحادثات الذي تمت محاكيته:
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
قد تضطر إلى الضغط على enter
عدة مرات لإعادة رسالة المطالبة >
بعد أمر factoryreset
.
5. إدارة الشبكة باستخدام OpenThread الخفي
بالنسبة إلى هذه العملية، سنحاكي مثيل واجهة سطر الأوامر (CLI) واحدًا (جهاز SoC واحد مضمّن في جهاز واحد) ومثيل واحد لمعالج الراديو اللاسلكي (RCP).
ot-daemon
هو وضع في التطبيق OpenThread Posix يستخدم مقبس UNIX كإدخال وإخراج، حتى يمكن تشغيل OpenThread بشكل أساسي كخدمة. يمكن للعميل التواصل مع هذه الخدمة عن طريق الاتصال بالمقبس باستخدام واجهة سطر الأوامر (OpenCLI) كبروتوكول.
ot-ctl
هو واجهة سطر الأوامر (CLI) مقدَّمة من ot-daemon
لإدارة RCP وإعدادها. وباستخدام هذه الطريقة، سنربط RCP بالشبكة التي أنشأها جهاز Thread.
قاعدة الإرساء
بالنسبة إلى كل عُقدة (نافذة طرفية) في هذا التمرين، تأكّد من تشغيل حاوية الإرساء باستخدام إصدار OpenThread. في حال المتابعة من التمرين السابق، من المفترض أن يكون لديك إشعاران (bash
) داخل حاوية الإرساء نفسها. وإذا لم يكن الأمر كذلك، يُرجى الاطِّلاع على خطوة تحديد مشاكل Doker وحلّها.
استخدام البرنامج الخفي
ستستخدم هذه التمارين ثلاث نوافذ طرفية وفقًا لما يلي:
- مثيل CLI لجهاز محاكاة سلسلة المحادثات (العقدة 1)
- عملية
ot-daemon
- مثيل واجهة سطر أوامر
ot-ctl
1- بدء العقدة 1
في النافذة الطرفية الأولى، ابدأ عملية واجهة سطر الأوامر (CLI) لجهاز Thread المحاكي:
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:
> thread start Done
عرض عناوين IPv6 التي تم تعيينها لواجهة سلسلة محادثات العقدة 1&39; :
> 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 >
كما هو موضّح في خطوة محاكاة شبكة Thread، يكون العنوان الأول هو link-local (fe80
) والثلاثة عناوين هي Mesh-local (fd
). معرّف EID هو عنوان الشبكة المتداخلة الذي لا يحتوي على ff:fe00
في العنوان. في هذا الإخراج النموذجي، EID هو fd55:cf34:dea5:7994:460:872c:e807:c4ab
.
حدِّد رقم تعريف EID المحدّد من مُخرج ipaddr
، الذي سيتم استخدامه للاتصال بالعقدة.
2. بدء البرنامج الخفي
في نافذة الوحدة الطرفية الثانية، يمكنك إنشاء عقدة جهاز tun
وضبط أذونات القراءة/الكتابة:
root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200 root@c0f3912a74ff:/# chmod 600 /dev/net/tun
يُستخدم هذا الجهاز لنقل الحزمة واستلامها في الأجهزة الافتراضية. قد تظهر لك رسالة خطأ إذا سبق إنشاء الجهاز، وهذا أمر طبيعي ويمكن تجاهله.
ابدأ ot-daemon
لعقدة RCP، والتي سنطلقها على العُقدة 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 (2 RCP) ot-daemon
إلى أي شبكة Thread حتى الآن. هنا يأتي دور ot-ctl
. يستخدم ot-ctl
واجهة سطر الأوامر نفسها الموجودة في تطبيق OpenThread CLI. ولذلك، يمكنك التحكّم في عُقَد ot-daemon
بالطريقة نفسها التي تتحكّم بها أجهزة سلاسل المحادثات الأخرى.
افتح نافذة طرفية ثالثة ونفِّذ الحاوية الحالية:
$ docker exec -it codelab_otsim_ctnr bash
بعد الوصول إلى الحاوية، ابدأ ot-ctl
:
root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-ctl >
يمكنك استخدام ot-ctl
في نافذة الوحدة الطرفية الثالثة لإدارة العقدة 2 (عقدة RCP) التي بدأتها في نافذة الوحدة الطرفية الثانية باستخدام ot-daemon
. يُرجى التحقّق من state
الخاصة بالعقدة 2:
> state disabled Done
يمكنك الحصول على eui64
العُقدة 2'؛ لحظر الانضمام إلى انضمام محدد:
> 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) وتلقّى بيانات اعتماد شبكة Thread.
انضم الآن إلى العقدة 2 إلى شبكة Thread (مرة أخرى، في نافذة الوحدة الطرفية الثالثة):
> thread start Done
4. التحقّق من مصادقة الشبكة
في الوحدة الطرفية الثالثة، يُرجى التحقّق من state
على العقدة 2 للتأكد من أنّ الجهاز انضمّ إلى الشبكة. في غضون دقيقتين، يتم نقل العقدة 2 من child
إلى router
:
> state child Done ... > state router Done
5. التحقق من الاتصال
في نافذة المحطة الثالثة، يمكنك إيقاف ot-ctl
باستخدام الأمرَين Ctrl+D أو exit
، والعودة إلى وحدة تحكّم bash
الحاوية. من وحدة التحكّم هذه، يمكن فحص اتصال العقدة 1 باستخدام EID مع الأمر ping6
. في حال انضمام مثيل ot-daemon
RCP إلى شبكة Thread والاتصال بها بنجاح، يُنجح برنامج ping:
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
، قد تحتاج إلى التحقّق مما إذا كانت الميزة قيد التشغيل وإعادة التشغيل أو إعادة إدخالها حسب الحاجة.
لعرض حاويات الإرساء التي تعمل:
$ 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
إذا لم تظهر لك الحاوية codelab_otsim_ctnr
في إخراج الأمر docker ps
، يمكنك تشغيلها مرة أخرى:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
في حال إيقاف الحاوية (مُدرَجة في docker ps -a
وليس docker ps
)، يجب إعادة تشغيلها:
$ docker start -i codelab_otsim_ctnr
إذا كانت حاوية الإرساء تعمل حاليًا (مُدرَجة في docker ps
)، يُرجى إعادة الاتصال بالحاوية في كل محطة دفع:
$ docker exec -it codelab_otsim_ctnr bash
"غير مسموح بالتشغيل"الأخطاء
إذا حدثت أخطاء في Operation not permitted
عند إنشاء عُقد OpenThread جديدة (باستخدام الأمر mknod
)، تأكَّد من تشغيل الإرساء بصفتك المستخدم الجذر وفقًا للأوامر المقدَّمة في هذا الدرس التطبيقي حول الترميز. لا يسمح هذا الدرس التطبيقي حول الترميز عند تشغيل الإرساء في وضع الجذر.
7. تهانينا
لقد نجحت في محاكاة شبكة Thread الأولى بنجاح باستخدام OpenThread. رائع!
لقد تعلّمت في هذا الدرس التطبيقي كيفية:
- بدء حاوية حاوية OpenThread Simulator وإدارتها
- محاكاة شبكة Thread
- مصادقة عُقد سلاسل المحادثات
- إدارة شبكة Thread باستخدام البرنامج الخفي لـ OpenThread
لمزيد من المعلومات حول Thread وOpenThread، اطّلِع على هذه المراجع:
- Primer Prime على Openthread.io
- مواصفات سلسلة المحادثات
- مستودع GitHub ضمن سلسلة محادثات
- مرجع واجهة سطر الأوامر في OpenThread
- دعم إضافي لـ OpenThread الإرساء
ويمكنك أيضًا محاولة استخدام جهاز توجيه حدود OpenThread في حاوية إرساء.