محاكاة شبكة خيط باستخدام OpenThread في Docker

1 المقدمة

26b7f4f6b3ea0700.png

OpenThread التي أطلقتها جوجل هو تنفيذ المصدر المفتوح من الموضوع التواصل البروتوكول. أصدر Google Nest OpenThread لإتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع للمطورين لتسريع تطوير المنتجات للمنزل المتصل.

و مواصفات الموضوع يحدد بروتوكول يستند الإصدار IPv6، موثوقة وآمنة ومنخفضة الطاقة لاسلكية جهاز إلى جهاز اتصال لتطبيقات المنزل. ينفذ OpenThread جميع طبقات شبكة الخيط بما في ذلك IPv6 و 6LoWPAN و IEEE 802.15.4 مع أمان MAC وإنشاء ارتباط الشبكة وتوجيه الشبكة.

سيرشدك Codelab هذا خلال محاكاة شبكة Thread على أجهزة تمت محاكاتها باستخدام Docker.

ماذا ستتعلم

  • كيفية إعداد سلسلة أدوات إنشاء OpenThread
  • كيفية محاكاة شبكة الخيط
  • كيفية مصادقة عقد الموضوع
  • كيفية إدارة شبكة موضوع باستخدام OpenThread Daemon

ماذا ستحتاج

  • عامل ميناء
  • المعرفة الأساسية لينكس ، توجيه الشبكة

2. قم بإعداد Docker

تم تصميم Codelab هذا لاستخدام Docker على جهاز Linux أو Mac OS X أو Windows. Linux هو البيئة الموصى بها.

تثبيت Docker

قم بتثبيت Docker على نظام التشغيل الذي تختاره.

تنزيل Docker

اسحب صورة Docker

مرة واحدة يتم تثبيت عامل الميناء، فتح نافذة الصالة وسحب openthread/codelab_otsim عامل الميناء الصورة. تحتوي هذه الصورة على OpenThread و OpenThread Daemon مسبقة الصنع وجاهزة للاستخدام في Codelab هذا.

$ docker pull openthread/codelab_otsim:latest

لاحظ أن التنزيل بالكامل قد يستغرق بضع دقائق.

في إطار المحطة الطرفية، وبدء الحاوية عامل الميناء من الصورة والاتصال بها bash قذيفة:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

لاحظ العلامات المطلوبة لهذا Codelab:

  • --sysctl net.ipv6.conf.all.disable_ipv6=0 - وهذا يتيح الإصدار IPv6 داخل حاوية
  • --cap-add=net_admin - تمكن القدرة NET_ADMIN، والذي يسمح لك لتنفيذ عمليات ذات الصلة الشبكة، مثل إضافة توجيهات IP

بمجرد وصولك إلى الحاوية ، يجب أن يكون لديك موجه مشابه لما يلي:

root@c0f3912a74ff:/#

في المثال أعلاه، c0f3912a74ff هو معرف الحاويات. سيختلف معرف الحاوية لمثيل حاوية Docker عن ذلك الموضح في المطالبات الخاصة بـ Codelab هذا.

باستخدام Docker

يفترض هذا Codelab أنك تعرف أساسيات استخدام Docker. يجب أن تظل في حاوية Docker لكامل Codelab.

3. محاكاة شبكة الموضوع

يوضح التطبيق المثال الذي ستستخدمه لـ Codelab هذا الحد الأدنى من تطبيق OpenThread الذي يعرض تكوين OpenThread وواجهات الإدارة عبر واجهة سطر أوامر أساسية (CLI).

يأخذك هذا التمرين عبر الحد الأدنى من الخطوات المطلوبة لإجراء اختبار ping لجهاز مؤشر ترابط تمت محاكاته من جهاز خيط آخر تمت محاكاته.

يوضح الشكل أدناه الهيكل الأساسي لشبكة سلسلة الرسائل. في هذا التمرين ، سنحاكي العقدتين الموجودتين داخل الدائرة الخضراء: Thread Leader و Thread Router مع اتصال واحد بينهما.

6e3aa07675f902dc.png

أنشئ الشبكة

1. ابدأ العقدة 1

إذا لم تكن قد فعلت ذلك بالفعل، في إطار المحطة الطرفية، بدء الحاوية عامل الميناء والاتصال بها bash قذيفة:

$ docker run --name codelab_otsim_ctnr -it --rm \
   --sysctl net.ipv6.conf.all.disable_ipv6=0 \
   --cap-add=net_admin openthread/codelab_otsim bash

في الحاوية عامل الميناء، انتقل إلى openthread الدليل وتفرخ عملية CLI لجهاز الموضوع يحتذى باستخدام ot-cli-ftd ثنائي.

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1

ملاحظة: إذا كنت لا ترى > موجه بعد تشغيل هذا الأمر، اضغط enter .

يقوم هذا الثنائي بتنفيذ جهاز OpenThread تمت محاكاته أعلى POSIX. يتم تنفيذ برنامج تشغيل الراديو IEEE 802.15.4 أعلى UDP (يتم تمرير إطارات IEEE 802.15.4 داخل حمولات UDP).

حجة 1 هو اصف الملف الذي يمثل بت الأقل كبيرة من "مصنع المعين" IEEE EUI-64 للجهاز يحتذى. تُستخدم هذه القيمة أيضًا عند الربط بمنفذ UDP لمحاكاة الراديو IEEE 802.15.4 (المنفذ = 9000 + واصف الملف). سيستخدم كل مثيل لجهاز Thread تمت محاكاته في Codelab هذا واصف ملف مختلف.

ملاحظة: واصف ملف استخدام فقط من 1 أو أكبر كما هو موضح في هذا Codelab عندما وضع البيض عملية لجهاز محاكاة. واصف ملف 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 المخصصة لواجهة Node 1's Thread (ستكون مخرجاتك مختلفة):

> 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 = شبكة-المحلية
  • يبدأ fe80 = الارتباط المحلي

يتم تصنيف أنواع العناوين المحلية المعشقة بشكل أكبر:

  • يحتوي 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 الفوري، انتقل إلى openthread الدليل وتفرخ عملية CLI. هذا هو جهاز الخيط الثاني الذي تمت محاكاته:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

ملاحظة: إذا كنت لا ترى > موجه بعد تشغيل هذا الأمر، اضغط enter .

قم بتكوين مفتاح شبكة الخيط ومعرف PAN ، باستخدام نفس القيم مثل مجموعة البيانات التشغيلية للعقدة 1:

> dataset networkkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

قم بتنفيذ مجموعة البيانات هذه باعتبارها المجموعة النشطة:

> dataset commit active
Done

أظهر واجهة IPv6:

> ifconfig up
Done

بدء تشغيل بروتوكول الموضوع:

> thread start
Done

سيقوم الجهاز بتهيئة نفسه كطفل. يعتبر Thread Child مكافئًا للجهاز النهائي ، وهو جهاز سلسلة الرسائل الذي ينقل ويستقبل حركة مرور البث الأحادي فقط باستخدام جهاز أصلي.

> state
child
Done

في غضون 2 دقيقة سترى مفتاح الدولة من child إلى router . جهاز التوجيه الخيطي قادر على توجيه حركة المرور بين أجهزة الخيط. يشار إليه أيضًا باسم أحد الوالدين.

> state
router
Done

تحقق من الشبكة

طريقة سهلة للتحقق من الشبكة المتداخلة هي إلقاء نظرة على جدول جهاز التوجيه.

1. تحقق من الاتصال

في العقدة 2 ، احصل على RLOC16. RLOC16 هو آخر 16 بت من عنوان RLOC IPv6 للجهاز.

> rloc16
5800
Done

في Node 1 ، تحقق من جدول جهاز التوجيه الخاص بـ Node 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 |

RLOC عقدة 2 من 0x5800 وجدت في الجدول، مؤكدا أنها متصلة شبكة.

2. عقدة بينغ 1 من العقدة 2

تحقق من الاتصال بين جهازي مؤشر الترابط المحاكين. في عقدة 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 موجه.

اختبر الشبكة

الآن بعد أن تمكنت من تنفيذ الأمر ping بنجاح بين جهازي مؤشر ترابط تمت محاكاتهما ، اختبر الشبكة المعشقة عن طريق أخذ عقدة واحدة في وضع عدم الاتصال.

العودة إلى العقدة 1 وإيقاف الموضوع:

> thread stop
Done

قم بالتبديل إلى Node 2 وتحقق من الحالة. في غضون دقيقتين، عقدة 2 يكتشف أن زعيم (عقدة 1) غير متواجد حاليا، ويجب أن نرى عقدة 2 انتقالية ليكون leader الشبكة:

> state
router
Done
...
> state
leader
Done

أكد مرة واحدة، والتوقف عن الموضوع وإعادة تعيين مصنع عقدة 2 قبل أن تغادر إلى عامل الميناء bash موجه. تتم إعادة تعيين إعدادات المصنع للتأكد من عدم نقل بيانات اعتماد شبكة مؤشر الترابط التي استخدمناها في هذا التمرين إلى التمرين التالي.

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

قد تضطر إلى الصحافة enter عدة مرات لجلب > العودة السريعة بعد factoryreset الأوامر. لا تخرج من حاوية Docker.

أيضًا إعادة ضبط المصنع والخروج من العقدة 1:

> factoryreset
>
> exit
root@c0f3912a74ff:/#

رؤية OpenThread CLI المرجعي لاستكشاف جميع الأوامر CLI المتاحة.

4. مصادقة العقد مع التكليف

في التمرين السابق ، قمت بإعداد شبكة سلاسل رسائل بجهازين تمت محاكاتهما واتصال تم التحقق منه. ومع ذلك ، فإن هذا يسمح فقط لحركة مرور بيانات الارتباط المحلية IPv6 غير المصادق عليها بالمرور بين الأجهزة. لتوجيه حركة مرور IPv6 العالمية بينها (والإنترنت عبر موجه حدود مؤشر الترابط) ، يجب مصادقة العقد.

من أجل المصادقة ، يجب أن يعمل جهاز واحد كمفوض. المفوض هو خادم المصادقة المختار حاليًا لأجهزة الخيط الجديدة ، والمفوض لتوفير بيانات اعتماد الشبكة المطلوبة للأجهزة للانضمام إلى الشبكة.

في هذا التمرين ، سوف نستخدم نفس الهيكل ثنائي العقد كما في السابق. للمصادقة ، سيعمل قائد سلسلة الرسائل كمفوض ، وجهاز التوجيه الخيطي بصفته نجارًا.

d6a67e8a0d0b5dcb.png

عامل ميناء

لكل عقدة (نافذة طرفية) في التدريبات المتبقية ، تأكد من تشغيل حاوية Docker باستخدام OpenThread. إذا المستمرة من التمرين السابق، يجب أن لا يزال لديك اثنين bash المطالبات ضمن نفس الحاوية عامل الميناء مفتوحة بالفعل. إن لم يكن، انظر الخطوة عامل الميناء استكشاف الأخطاء وإصلاحها، أو ببساطة إعادة لمحاكاة ممارسة شبكة الموضوع.

1. إنشاء شبكة

في العقدة 1 ، ولّد عملية CLI:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 2

على عقدة 2، تمكين دور النجار باستخدام J01NME النجار الاعتماد.

> ifconfig up
Done
> joiner start J01NME
Done

... انتظر بضع ثوان للتأكيد ...

Join success

بصفتك نجارًا ، نجح الجهاز (العقدة 2) في مصادقة نفسه مع المفوض (العقدة 1) وتلقى بيانات اعتماد شبكة مؤشر الترابط.

الآن بعد أن تمت مصادقة Node 2 ، ابدأ الموضوع:

> thread start
Done

4. التحقق من مصادقة الشبكة

تحقق من state على عقدة 2، للتحقق من صحة أنه انضم الآن الشبكة. في غضون دقيقتين، عقدة 2 الانتقال من child إلى router :

> state
child
Done
...
> state
router
Done

5. إعادة التكوين

للتحضير للتمرين التالي ، قم بإعادة تعيين التكوين. في كل عقدة ، أوقف Thread ، وقم بإعادة ضبط المصنع ، واخرج من جهاز Thread الذي تمت محاكاته:

> thread stop
Done
> factoryreset
>
> exit
root@c0f3912a74ff:/#

قد تضطر إلى الصحافة enter عدة مرات لجلب > العودة السريعة بعد factoryreset الأوامر.

5. إدارة الشبكة مع OpenThread Daemon

في هذا التمرين ، سنقوم بمحاكاة مثيل CLI واحد (جهاز SoC Thread مضمّن واحد) ومثيل واحد للمعالج اللاسلكي (RCP).

ot-daemon هو وضع التطبيق OpenThread POSIX يستخدم مقبس UNIX كما المدخلات والمخرجات، بحيث OpenThread الأساسية كما يمكن تشغيل الخدمة. يمكن للعميل الاتصال بهذه الخدمة عن طريق الاتصال بالمقبس باستخدام OpenThread CLI كبروتوكول.

ot-ctl هو CLI التي تقدمها ot-daemon لإدارة وتكوين الحزب الشيوعي الثوري. باستخدام هذا ، سنقوم بتوصيل RCP بالشبكة التي تم إنشاؤها بواسطة جهاز Thread.

عامل ميناء

لكل عقدة (نافذة طرفية) في هذا التمرين ، تأكد من تشغيل حاوية Docker باستخدام بنية OpenThread. إذا المستمرة من التمرين السابق، يجب أن يكون اثنين bash المطالبات ضمن نفس الحاوية عامل الميناء مفتوحة بالفعل. إن لم يكن، انظر الخطوة عامل الميناء استكشاف الأخطاء وإصلاحها.

استخدم ot-daemon

سيستخدم هذا التمرين ثلاث نوافذ طرفية ، تتوافق مع ما يلي:

  1. مثيل CLI لجهاز الخيط الذي تمت محاكاته (العقدة 1)
  2. ot-daemon عملية
  3. ot-ctl المثال CLI

1. ابدأ العقدة 1

في النافذة الطرفية الأولى ، قم بإنشاء عملية CLI لجهاز Thread الذي تمت محاكاته:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/simulation/bin/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 المعينة لواجهة Node 1's Thread:

> 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 .

تحديد EID محددة من هاتفك ipaddr الإخراج، والتي سيتم استخدامها للتواصل مع العقدة.

2. ابدأ ot-daemon

في إطار المحطة الطرفية الثاني، إنشاء tun عقدة الجهاز وتعيين أذونات القراءة / الكتابة:

root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200
root@c0f3912a74ff:/# chmod 600 /dev/net/tun

يستخدم هذا الجهاز لإرسال واستلام الحزم في الأجهزة الافتراضية. قد تحصل على خطأ إذا تم إنشاء الجهاز بالفعل - وهذا أمر طبيعي ويمكن تجاهله.

انتقل إلى openthread الدليل، والبدء ot-daemon لعقدة الحزب الشيوعي الثوري، الذي سوف ندعو عقدة 2. استخدام -v مطول العلم حتى تستطيع أن ترى إخراج سجل وتأكيد أنه يشغل:

root@c0f3912a74ff:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-daemon -v \
    'spinel+hdlc+forkpty://output/simulation/bin/ot-rcp?forkpty-arg=2'

عندما ناجحة، ot-daemon في مطول الوضع يولد إخراج مشابه لما يلي:

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08

اترك هذا الجهاز مفتوحًا ويعمل في الخلفية. لن تدخل أي أوامر أخرى فيه.

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:/# cd ~/src/openthread
root@c0f3912a74ff:/# ./output/posix/bin/ot-ctl
>

عليك استخدام ot-ctl في هذا الإطار المحطة الثالثة لإدارة عقدة 2 (عقدة الحزب الشيوعي الثوري) التي بدأت في إطار المحطة الطرفية الثاني مع ot-daemon . تحقق من state من عقدة 2:

> 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) وتلقى بيانات اعتماد شبكة مؤشر الترابط.

انضم الآن إلى Node 2 إلى شبكة Thread:

> thread start
Done

4. التحقق من مصادقة الشبكة

تحقق من state على عقدة 2، للتحقق من صحة أنه انضم الآن الشبكة. في غضون دقيقتين، عقدة 2 الانتقال من child إلى router :

> state
child
Done
...
> state
router
Done

5. التحقق من صحة الاتصال

إنهاء ot-ctl باستخدام مفتاح Ctrl + D وعلى سطر الأوامر الجهاز المضيف الخاص بك، بينغ عقدة 1، وذلك باستخدام EID لها مع ping6 الأوامر. إذا كان 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. Docker استكشاف الأخطاء وإصلاحها

إذا خرجت من حاوية Docker

bash المطالبات، قد تحتاج للتحقق مما إذا كان للادارة وإعادة تشغيل / إعادة إدخال حسب الحاجة.

لإظهار أي حاويات Docker قيد التشغيل:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        codelab_otsim       "bash"              10 minutes ago      Up 10 minutes                           codelab_otsim_ctnr

لإظهار جميع حاويات Docker (سواء كانت قيد التشغيل أو متوقفة):

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
505fc57ffc72        codelab_otsim       "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/codelab_otsim 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 الأوامر)، تأكد من أنك تقوم بتشغيل عامل الميناء باسم المستخدم الجذر وفقا للأوامر الواردة في هذا Codelab. هذا Codelab لا يدعم تشغيل عامل الميناء في وضع لا جذور له .

7. مبروك!

لقد نجحت في محاكاة أول شبكة سلاسل رسائل باستخدام OpenThread. مذهل!

تعلمت في Codelab هذا كيفية:

  • بدء وإدارة حاوية OpenThread Simulation Docker
  • محاكاة شبكة الموضوع
  • مصادقة عقد الموضوع
  • إدارة شبكة الموضوع مع OpenThread Daemon

لمعرفة المزيد حول Thread و OpenThread ، استكشف هذه المراجع:

أو حاول استخدام راوتر الحدود OpenThread في حاوية عامل الميناء !