1- المقدمة
OpenThread التي أصدرتها Google هي بروتوكول مفتوح المصدر لبروتوكول شبكات سلسلة المحادثات. أصدرت Google Nest ميزة OpenThread لإتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع لتسريع وتيرة تطوير المنتجات إلى المنازل المتصلة.
تحدِّد مواصفات سلاسل المحادثات بروتوكول الاتصال اللاسلكي الآمن والمستنِد إلى الطاقة والذي يعتمد على بروتوكول IPv6 والمعتمَد من جهاز إلى آخر للتطبيقات المنزلية. ينفّذ OpenThread جميع طبقات شبكات Thread بما في ذلك IPv6 و6LoWPAN وIEEE 802.15.4 مع أمان MAC وإنشاء Mesh Link وتوجيه الشبكة المتداخلة.
سيرشدك هذا الدرس التطبيقي حول الترميز في خطوات محاكاة شبكة Thread على أجهزة المحاكاة التي تستخدم Docker.
ما ستتعرَّف عليه
- كيفية إعداد سلسلة أدوات إصدار OpenThread
- كيفية محاكاة شبكة Thread
- كيفية مصادقة عُقد سلاسل المحادثات
- كيفية إدارة شبكة Thread باستخدام منصّة OpenThread Daemon
المتطلبات
- قاعدة إرساء
- المعرفة الأساسية بنظام التشغيل Linux، توجيه الشبكة
2. إعداد الإرساء
تم تصميم Codelab هذا لاستخدام Docker على جهاز يعمل بنظام التشغيل Linux أو Mac OS X أو Windows. نظام التشغيل Linux هو البيئة الموصى بها.
تثبيت Docker
ثبِّت Docker على نظام التشغيل الذي تختاره.
سحب صورة الإرساء
بعد تثبيت Docker، افتح نافذة طرفية واسحب صورة الإرساء openthread/environment
. تعرض هذه الصورة Openسلسلة وOpenThread Daemon مصمّمة مسبقًا وجاهزة للاستخدام في هذا الدرس التطبيقي حول الترميز.
$ docker pull openthread/environment:latest
يُرجى ملاحظة أنّ عملية التنزيل قد تستغرق بضع دقائق.
في نافذة طرفية، ابدأ تشغيل حاوية Docker من الصورة وصِل وحدة التحكّم 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
هي رقم تعريف الحاوية. يختلف رقم تعريف الحاوية لمثيل حاوية Docker عن الرقم المعروض في رسائل التعليمات المتعلقة بهذا الدرس التطبيقي حول الترميز.
استخدام Docker
يفترض الدرس التطبيقي حول الترميز هذا أنّك تعرف أساسيات استخدام Docker. يجب البقاء في حاوية Docker طيلة الدرس التطبيقي حول الترميز.
3. محاكاة شبكة سلسلة محادثات
يوضح نموذج التطبيق الذي ستستخدمه لدرس الترميز هذا تطبيق OpenString بسيطًا الذي يعرِض ضبط OpenThread وواجهاته لإدارة الواجهة من خلال واجهة سطر الأوامر الأساسية (CLI).
ينقلك هذا التمرين إلى الحد الأدنى من الخطوات المطلوبة ليتم فحص اتصال جهاز Thread محاكٍ لسلسلة محادثات أخرى من خلال محاكاة له.
يوضح الشكل أدناه طوبوبي أساسي في شبكة Thread. بالنسبة إلى هذا التمرين، نحاكي العُقدَين داخل الدائرة الخضراء: قائد سلسلة محادثات ومُوجِّه سلسلة المحادثات مع وصلة واحدة بينها.
إنشاء الشبكة
1- بدء العقدة 1
في حال عدم تنفيذ ذلك من قبل، افتَح حاوية Docker في نافذة طرفية ووصِّل وحدة التحكّم 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-EI-64 "المُخصص من قِبل المصنع" للجهاز الذي يحاكي الجهاز. وتُستخدم هذه القيمة أيضًا عند الربط بمنفذ UDP لمحاكاة IEEE 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 start Done
انتظِر بضع ثوانٍ وتحقّق من أنّ الجهاز أصبح قائد سلسلة المحادثات. القائد هو الجهاز المسؤول عن إدارة تخصيص رقم تعريف جهاز التوجيه.
> state leader Done
الاطّلاع على عناوين IPv6 المخصّصة لواجهة Thread في العقدة 1 (ستختلف النتائج):
> 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)
عليك تحديد معرّف بطاقة SIM المضمنة (EID) في مخرجات وحدة التحكم، مع تدوين هذا ملاحظات للاستخدام في وقت لاحق. في نموذج الناتج أعلاه، معرّف بطاقة SIM المضمنة (EID) هو:
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
2. بدء العقدة 2
افتح محطة طرفية جديدة ونفِّذ واجهة bash
في حاوية Docker قيد التشغيل حاليًا لاستخدامها للعقدة 2.
$ docker exec -it codelab_otsim_ctnr bash
في رسالة المطالبة bash
الجديدة هذه، يمكنك بدء عملية واجهة سطر الأوامر (CLI) باستخدام الوسيطة 2
. هذا هو الجهاز الثاني الذي يحاكي محاكاة سلسلة المحادثات:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
ملاحظة: إذا لم يظهر لك إشعار >
بعد تنفيذ هذا الأمر، اضغط على enter
.
اضبط مفتاح شبكة Thread ورقم تعريف PAN باستخدام القيم نفسها المتوفرة في مجموعة بيانات التشغيلية للعقدة 1:
> dataset networkkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
الالتزام بمجموعة البيانات هذه كمجموعة نشطة:
> dataset commit active Done
عرض واجهة IPv6:
> ifconfig up Done
بدء عملية بروتوكول سلسلة المحادثات:
> thread start Done
سيتم إعداد الجهاز لنفسه باعتباره طفلاً. يعادل Child Thread جهازًا طرفيًا، وهو جهاز سلسلة محادثات ينقل حركة يونيكود ويستلمها فقط باستخدام جهاز رئيسي.
> state child Done
خلال دقيقتين، من المفترض أن تظهر لك حالة التبديل من child
إلى router
. يمكن لجهاز التوجيه في سلسلة المحادثات توجيه حركة البيانات بين أجهزة سلسلة المحادثات. ويُشار إليه أيضًا باسم "أحد الوالدين".
> state router Done
التحقق من الشبكة
طريقة سهلة للتحقق من الشبكة المتداخلة هي الاطّلاع على جدول جهاز التوجيه.
1- التحقق من الاتصال
في العقدة 2، احصل على RLOC16. RLOC16 هو آخر 16 بت من عنوان RLOC IPv6 للجهاز.
> rloc16 5800 Done
في العقدة 1، تحقق من جدول جهاز التوجيه RLOC16 للعقدة 2. تأكد من تبديل العقدة 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 |
تم العثور على 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 (>
).
اختبار الشبكة
الآن بعد أن تمكّنت من إجراء فحص بنجاح بين جهازَي Thread محاكاة، يمكنك اختبار الشبكة المتداخلة عن طريق أخذ عقدة واحدة بلا اتصال بالإنترنت.
الرجوع إلى العقدة 1 وإيقاف سلسلة المحادثات:
> thread stop Done
انتقِل إلى العقدة 2 وتحقّق من الحالة. خلال دقيقتين، تكتشف العقدة 2 أن المشغِّل (العقدة 1) غير متصل بالإنترنت، ومن المفترض أن ترى انتقال العُقدة 2 لتكون leader
من الشبكة:
> state router Done ... > state leader Done
بعد التأكيد، أوقِف سلسلة المحادثات 2 وعقدة إعادة الضبط على الإعدادات الأصلية قبل الخروج من رسالة المطالبة bash
Docker. تتم إعادة الضبط على الإعدادات الأصلية لضمان عدم نقل بيانات اعتماد شبكة Thread التي استخدمناها في هذا التمرين إلى التمرين التالي.
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
قد تضطر إلى الضغط على enter
عدة مرات لعرض الإشعار >
بعد أمر factoryreset
. لا تخرج من حاوية Docker.
عليك أيضًا إعادة ضبط الجهاز على الإعدادات الأصلية والخروج من العُقدة 1:
> factoryreset > > exit root@c0f3912a74ff:/#
يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات OpenThread للتعرّف على جميع أوامر واجهة سطر الأوامر (CLI) المتاحة.
4- مصادقة العُقد باستخدام ميزة "التفويض"
في التمرين السابق، يمكنك إعداد شبكة Thread باستخدام جهازين افتراضيين واتصال تم التحقّق منه. ومع ذلك، لا يسمح هذا إلا بالزيارات المحلية التي تمت مصادقتها عبر بروتوكول IPv6 بين الأجهزة. لتوجيه زيارات IPv6 العالمية بينها (والإنترنت من خلال جهاز توجيه حدود Thread)، يجب مصادقة العُقد.
للمصادقة، يجب أن يعمل جهاز واحد كمفوض. المفوَّض هو خادم المصادقة المُنتخَب حاليًا لأجهزة Thread الجديدة، والمُفوَّض لتقديم بيانات اعتماد الشبكة المطلوبة للأجهزة للانضمام إلى الشبكة.
في هذا التمرين، سنستخدم مخطط الطوبتين نفسهما كما في السابق. بالنسبة إلى المصادقة، سيعمل قائد سلسلة المحادثات بصفته مفوّضًا، وجهاز التوجيه في سلسلة المحادثات بصفته أحد الأعضاء.
قاعدة إرساء
بالنسبة إلى كل عُقدة (نافذة طرفية) في التمارين المتبقية، تأكَّد من تشغيل حاوية إرساء باستخدام إصدار OpenThread. في حال المتابعة من التمرين السابق، سيظل لديك bash
إشعارًا ضمن حاوية الإرساء نفسها. وإذا لم يكن الأمر كذلك، يُرجى الاطّلاع على خطوة تحديد مشاكل التطبيق وحلّها أو إعادة تنفيذ عملية محاكاة شبكة 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 start Done
انتظِر بضع ثوانٍ وتحقّق من أنّ الجهاز أصبح قائد سلسلة محادثات:
> state leader Done
2. بدء دور المفوَّض
أثناء البقاء في العُقدة 1، ابدأ دور المفوَّض:
> commissioner start Done
السماح لأي طرف الانضمام (باستخدام حرف البدل *
) باستخدام بيانات اعتماد J01NME
للعمولة للعمولة على الشبكة إنّ أحد أعضاء الفريق هو جهاز يضيفه أحد المشرفين إلى شبكة سلاسل محادثات بتكليف.
> commissioner joiner add * J01NME Done
3. بدء دور المشترك
في نافذة طرفية ثانية، انتقِل إلى حاوية Docker لبدء عملية جديدة سطر الأوامر (CLI). هذه هي العقدة 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. إدارة الشبكة باستخدام Open يقبل البرنامج الخفي
بالنسبة إلى هذا التمرين، سنحاكي مثيل CLI واحدًا (جهاز واحد من سلسلة SoC مضمَّن) ومثيل راديو مشترك (RCP) واحد.
ot-daemon
هو وضع في تطبيق OpenThread Posix الذي يستخدم مقبس UNIX كإدخال وإخراج، بحيث يمكن تشغيل نواة OpenThread كخدمة. يمكن للعميل التواصل مع هذه الخدمة من خلال الاتصال بالمقبس باستخدام واجهة سطر الأوامر (CLI) في بروتوكول OpenThread.
ot-ctl
هو عبارة عن واجهة سطر الأوامر (CLI) توفّرها شركة ot-daemon
لإدارة RCP وضبطها. وباستخدام هذه السياسة، سنوصّل RCP بالشبكة التي أنشأها جهاز Thread.
قاعدة إرساء
بالنسبة إلى كل عُقدة (نافذة طرفية) في هذا التمرين، تأكَّد من تشغيل حاوية إرساء باستخدام إصدار OpenThread. في حال المتابعة من التمرين السابق، ستظهر لك bash
رسائل مطالبة ضمن حاوية الإرساء نفسها. وإذا لم يكن الأمر كذلك، يُرجى الاطّلاع على خطوة تحديد مشاكل المخترق وحلّها.
استخدام البرنامج الخفي
سيستخدم هذا التمرين ثلاث نوافذ طرفية، مقابلة لما يلي:
- مثيل واجهة سطر الأوامر (CLI) لجهاز محاكاة سلاسل المحادثات (عقدة 1)
- عملية واحدة (
ot-daemon
) - مثيل CLI
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 start Done
عرض عناوين IPv6 المخصّصة لواجهة Thread في العقدة 1:
> 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، يكون أحد العناوين هو الرابط المحلي (fe80
) والرمز الثالث هو شبكة متشابكة محليًا (fd
). معرّف EID هو العنوان المحلي المتداخلة الذي لا يحتوي على ff:fe00
في العنوان. في هذا الناتج، تكون معرّف بطاقة SIM المضمنة (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 (RCP ot-daemon
) لأي شبكة سلسلة محادثات حتى الآن. هنا يأتي دور ot-ctl
. يستخدم ot-ctl
واجهة سطر الأوامر نفسها التي يستخدمها تطبيق OpenLI CLI. وبالتالي، يمكنك التحكّم في ot-daemon
عُقد بالطريقة نفسها التي تستخدم بها أجهزة Thread الأخرى التي تمت محاكاتها.
افتح نافذة طرفية ثالثة وتنفيذ الحاوية الحالية:
$ 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
في نافذة الوحدة الطرفية الثالثة، اعرض واجهة الشبكة للعقدة الثانية وانضم إلى الشبكة:
> ifconfig up Done > joiner start J01NME Done
... انتظر بضع ثوانٍ للتأكيد ...
Join success
بصفتك انضمامًا، تمت مصادقة RCP (العقدة الثانية) بنجاح باستخدام المفوَّض (العقدة 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
. إذا تم دمج مثيل RCP ot-daemon
بنجاح والاتصال بشبكة Thread، سينجح إشعار الاتصال:
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- تحديد مشاكل الإرساء وحلّها
إذا خرجت من حاوية Docker
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 (قيد التشغيل والإيقاف):
$ 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
استخدِم الخيار --rm
فقط إذا كنت تريد حذف الحاوية عند الخروج من الحاوية.
إذا تم إيقاف الحاوية (مُدرَجة في docker ps -a
وليس docker ps
)، أعِد تشغيلها:
$ docker start -i codelab_otsim_ctnr
إذا كانت حاوية Docker قيد التشغيل (مُدرَجة في docker ps
)، يُرجى إعادة الاتصال بالحاوية في كل محطة دفع:
$ docker exec -it codelab_otsim_ctnr bash
أخطاء "عملية غير مسموح بها"
إذا واجهت أخطاء Operation not permitted
عند إنشاء عُقد OpenThread جديدة (باستخدام الأمر mknod
)، تأكَّد من تشغيل PowerShell بصفتك المستخدم الجذر وفقًا للأوامر المقدَّمة في هذا الدرس التطبيقي حول الترميز. لا يتوافق الدرس التطبيقي حول الترميز هذا مع وضع Docker في وضع الجذر.
7- تهانينا.
لقد حاكيت أول شبكة Thread باستخدام OpenThread. رائع!
في هذا الدرس التطبيقي حول الترميز، تعلّمت كيفية:
- بدء حاوية حاوية OpenThread Simulator وإدارتها
- محاكاة شبكة سلسلة محادثات
- مصادقة عُقد سلاسل المحادثات
- إدارة شبكة Thread
لمزيد من المعلومات عن سلسلة المحادثات وسلسلة محادثات، يُرجى الاطّلاع على المراجع التالية:
- Primer على Openthread.io
- مواصفات سلاسل المحادثات
- مستودع GitHub في Thread
- مرجع واجهة برمجة التطبيقات OpenThread
- دعم إضافي لمنصة OpenThread
أو جرّب استخدام جهاز توجيه الحدود في سلسلة محادثات في حاوية إرساء.