OpenThread الذي أصدرته Google هو تطبيق مفتوح المصدر لبروتوكول شبكة Thread . أصدر Google Nest OpenThread لإتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع للمطورين لتسريع تطوير المنتجات للمنزل المتصل.
تحدد مواصفات الخيط بروتوكول اتصال لاسلكي من جهاز إلى جهاز يعتمد على IPv6 موثوق وآمن ومنخفض الطاقة للتطبيقات المنزلية. ينفذ OpenThread جميع طبقات شبكات الخيط بما في ذلك IPv6 و 6LoWPAN و IEEE 802.15.4 مع أمان MAC وإنشاء ارتباط الشبكة وتوجيه الشبكة.
سيرشدك Codelab هذا خلال محاكاة شبكة Thread على أجهزة تمت محاكاتها باستخدام Docker.
ماذا ستتعلم
- كيفية إعداد سلسلة أدوات إنشاء OpenThread
- كيفية محاكاة شبكة الخيط
- كيفية مصادقة عقد الموضوع
- كيفية إدارة شبكة موضوع باستخدام OpenThread Daemon
ماذا ستحتاج
- عامل ميناء
- المعرفة الأساسية لينكس ، توجيه الشبكة
تم تصميم Codelab هذا لاستخدام Docker على جهاز Linux أو Mac OS X أو Windows. Linux هو البيئة الموصى بها.
تثبيت Docker
قم بتثبيت Docker على نظام التشغيل الذي تختاره.
اسحب صورة Docker
بمجرد تثبيت Docker ، افتح نافذة طرفية واسحب openthread/codelab_otsim
Docker. تحتوي هذه الصورة على OpenThread و OpenThread Daemon مسبقة الصنع وجاهزة للاستخدام في Codelab هذا.
$ docker pull openthread/codelab_otsim:latest
لاحظ أنه قد يستغرق التنزيل بالكامل بضع دقائق.
في نافذة طرفية ، ابدأ حاوية Docker من الصورة bash
بقشرة 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.
يوضح التطبيق المثال الذي ستستخدمه لـ Codelab هذا الحد الأدنى من تطبيق OpenThread الذي يعرض تكوين OpenThread وواجهات الإدارة عبر واجهة سطر الأوامر الأساسية (CLI).
يأخذك هذا التمرين عبر الحد الأدنى من الخطوات المطلوبة لإجراء اختبار ping لجهاز مؤشر ترابط تمت محاكاته من جهاز خيط آخر تمت محاكاته.
يوضح الشكل أدناه الهيكل الأساسي لشبكة سلسلة الرسائل. في هذا التمرين ، سنقوم بمحاكاة العقدتين داخل الدائرة الخضراء: زعيم الخيط وجهاز التوجيه الخيطي مع اتصال واحد بينهما.
أنشئ الشبكة
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/codelab_otsim bash
في حاوية Docker ، انتقل إلى الدليل openthread
عملية CLI openthread
باستخدام الملف الثنائي ot-cli-ftd
.
root@c0f3912a74ff:/# cd ~/src/openthread root@c0f3912a74ff:/# ./output/simulation/bin/ot-cli-ftd 1
يقوم هذا الثنائي بتنفيذ جهاز 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
محجوز لاستخدامات أخرى.
إذا كنت لا ترى >
الموجه بعد تشغيل هذا الأمر ، فاضغط على enter
.
قم بإنشاء مجموعة بيانات تشغيلية جديدة والتزم بها كمجموعة نشطة. مجموعة البيانات التشغيلية هي التكوين لشبكة الموضوع التي تقوم بإنشائها.
> 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 Master 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
= mesh-local - يبدأ بـ
fe80
= link-local
يتم تصنيف أنواع عناوين الشبكات المحلية بشكل أكبر:
- يحتوي على
ff:fe00
= Router Locator (RLOC) - لا يحتوي على
ff:fe00
= معرّف نقطة النهاية (EID)
حدد EID في إخراج وحدة التحكم الخاصة بك ، وقم بتدوينه لاستخدامه لاحقًا. في نموذج الإخراج أعلاه ، يكون EID هو:
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
2. ابدأ العقدة 2
افتح محطة طرفية جديدة ونفذ bash
shell في حاوية Docker قيد التشغيل حاليًا لاستخدامها في Node 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 masterkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
قم بتنفيذ مجموعة البيانات هذه باعتبارها المجموعة النشطة:
> dataset commit active Done
أظهر واجهة IPv6:
> ifconfig up Done
بدء تشغيل بروتوكول الموضوع:
> thread start Done
سيقوم الجهاز بتهيئة نفسه كطفل. يعتبر Thread Child مكافئًا للجهاز النهائي ، وهو جهاز سلسلة الرسائل الذي ينقل ويستقبل حركة مرور البث الأحادي فقط باستخدام جهاز رئيسي.
> state child Done
في غضون دقيقتين سترى تبديل الحالة من 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 |
تم العثور على 0x5800
الخاص 0x5800
2 من 0x5800
في الجدول ، مما يؤكد أنه متصل بالشبكة.
2. عقدة بينغ 1 من العقدة 2
تحقق من الاتصال بين جهازي مؤشر الترابط المحاكين. في Node 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
بمجرد التأكيد ، أوقف Thread وأعد ضبط المصنع Node 2 قبل الخروج مرة أخرى إلى Docker bash
موجه. تتم إعادة تعيين إعدادات المصنع للتأكد من أن بيانات اعتماد شبكة مؤشر الترابط التي استخدمناها في هذا التمرين لا يتم نقلها إلى التمرين التالي.
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
قد تضطر إلى الضغط على enter
عدة مرات لإعادة الأمر >
بعد أمر إعادة factoryreset
. لا تخرج من حاوية Docker.
أيضًا إعادة ضبط المصنع والخروج من العقدة 1:
> factoryreset > > exit root@c0f3912a74ff:/#
راجع مرجع OpenThread CLI لاستكشاف جميع أوامر CLI المتاحة.
في التمرين السابق ، قمت بإعداد شبكة سلاسل رسائل بجهازين تمت محاكاتهما واتصال تم التحقق منه. ومع ذلك ، فإن هذا يسمح فقط لحركة مرور بيانات الارتباط المحلية IPv6 غير المصادق عليها بالمرور بين الأجهزة. لتوجيه حركة مرور IPv6 العالمية بينها (والإنترنت عبر موجه حدود مؤشر الترابط) ، يجب مصادقة العقد.
من أجل المصادقة ، يجب أن يعمل جهاز واحد كمفوض. المفوض هو خادم المصادقة المختار حاليًا لأجهزة الخيط الجديدة ، والمفوض لتوفير بيانات اعتماد الشبكة المطلوبة للأجهزة للانضمام إلى الشبكة.
في هذا التمرين ، سوف نستخدم نفس الهيكل ثنائي العقد كما في السابق. للمصادقة ، سيعمل قائد سلسلة المحادثات كمفوض ، وجهاز التوجيه الخيطي باعتباره نجارًا.
عامل ميناء
لكل عقدة (نافذة طرفية) في التدريبات المتبقية ، تأكد من تشغيل حاوية Docker باستخدام OpenThread. في حالة المتابعة من التمرين السابق ، يجب أن يكون لديك bash
داخل حاوية Docker نفسها مفتوحة بالفعل. إذا لم يكن كذلك ، فراجع خطوة استكشاف أخطاء Docker وإصلاحها ، أو أعد ببساطة تمرين محاكاة شبكة Thread .
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 Master 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
(باستخدام *
حرف البدل) مع بيانات اعتماد J01NME
Joiner بالتكليف على الشبكة. النجار هو جهاز تمت إضافته بواسطة مسؤول بشري إلى شبكة سلاسل رسائل مفوضة.
> 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
باستخدام بيانات اعتماد J01NME
Joiner.
> ifconfig up Done > joiner start J01NME Done
... انتظر بضع ثوان للتأكيد ...
Join success
بصفتك نجارًا ، نجح الجهاز (العقدة 2) في مصادقة نفسه مع المفوض (العقدة 1) وتلقى بيانات اعتماد شبكة مؤشر الترابط.
الآن بعد أن تمت مصادقة Node 2 ، ابدأ الموضوع:
> thread start Done
4. التحقق من مصادقة الشبكة
تحقق من state
على العقدة 2 للتحقق من أنها انضمت الآن إلى الشبكة. في غضون دقيقتين ، تنتقل Node 2 من child
إلى router
:
> state child Done ... > state router Done
5. إعادة التكوين
للتحضير للتمرين التالي ، قم بإعادة تعيين التكوين. في كل عقدة ، أوقف Thread ، وقم بإعادة ضبط المصنع ، واخرج من جهاز Thread الذي تمت محاكاته:
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
قد تضطر إلى الضغط على enter
عدة مرات لإعادة المطالبة >
بعد أمر إعادة factoryreset
.
في هذا التمرين ، سنقوم بمحاكاة مثيل CLI واحد (جهاز SoC Thread مضمّن واحد) ومثيل واحد للمعالج اللاسلكي (RCP).
ot-daemon
هو أحد أوضاع تطبيق OpenThread Posix الذي يستخدم مقبس UNIX كمدخلات وإخراج ، بحيث يمكن تشغيل OpenThread core كخدمة. يمكن للعميل التواصل مع هذه الخدمة عن طريق الاتصال بالمقبس باستخدام OpenThread CLI كبروتوكول.
ot-ctl
هو CLI يتم توفيره بواسطة ot-daemon
لإدارة وتهيئة RCP. باستخدام هذا ، سنقوم بتوصيل RCP بالشبكة التي تم إنشاؤها بواسطة جهاز Thread.
عامل ميناء
لكل عقدة (نافذة طرفية) في هذا التمرين ، تأكد من تشغيل حاوية Docker باستخدام بنية OpenThread. في حالة المتابعة من التمرين السابق ، يجب أن يكون لديك bash
داخل حاوية Docker نفسها مفتوحة بالفعل. إذا لم يكن كذلك ، فراجع خطوة استكشاف أخطاء Docker وإصلاحها .
استخدم ot-daemon
سيستخدم هذا التمرين ثلاث نوافذ طرفية ، تتوافق مع ما يلي:
- مثيل CLI لجهاز الخيط المحاكي (العقدة 1)
- عملية
ot-daemon
- مثيل
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 Master 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
) وثلاثة 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
لعقدة RCP ، والتي openthread
Node 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 للانضمام إلى الشبكة
لم نقم بتكليف Node 2 ( ot-daemon
RCP) لأي شبكة خيط حتى الآن. هذا هو المكان ot-ctl
يأتي فيه ot-ctl
. يستخدم ot-ctl
نفس CLI مثل تطبيق OpenThread CLI. لذلك ، يمكنك التحكم ot-daemon
عُقد ot-daemon
بنفس طريقة أجهزة Thread المحاكاة الأخرى.
افتح نافذة طرفية ثالثة وقم بتنفيذ الحاوية الحالية:
$ docker exec -it codelab_otsim_ctnr bash
بمجرد دخول الحاوية ، ابدأ ot-ctl
:
root@c0f3912a74ff:/# cd ~/src/openthread root@c0f3912a74ff:/# ./output/posix/bin/ot-ctl >
تحقق من state
العقدة 2 (عقدة RCP) التي بدأتها مع ot-daemon
:
> state disabled Done
احصل على eui64
Node 2 ، لتقييد الانضمام إلى eui64
المحدد:
> eui64 18b4300000000001 Done
في العقدة 1 ، ابدأ المفوض وقصر الانضمام إلى eui64 فقط:
> commissioner start Done > commissioner joiner add 18b4300000000001 J01NME Done
في Node 2 ، اعرض واجهة الشبكة وانضم إلى الشبكة:
> ifconfig up Done > joiner start J01NME Done
... انتظر بضع ثوان للتأكيد ...
Join success
بصفته نجارًا ، قام RCP (العقدة 2) بمصادقة نفسه بنجاح مع المفوض (العقدة 1) وتلقى بيانات اعتماد شبكة مؤشر الترابط.
انضم الآن إلى Node 2 إلى شبكة Thread:
> thread start Done
4. التحقق من مصادقة الشبكة
تحقق من state
على العقدة 2 للتحقق من أنها انضمت الآن إلى الشبكة. في غضون دقيقتين ، تنتقل Node 2 من child
إلى router
:
> state child Done ... > state router Done
5. التحقق من صحة الاتصال
قم بإنهاء ot-ctl
باستخدام Ctrl + D وعلى سطر أوامر الجهاز المضيف ، ping Node 1 ، باستخدام EID الخاص به مع الأمر ping6
. إذا تم ضم مثيل ot-daemon
RCP بنجاح إلى شبكة مؤشر الترابط والاتصال بها ، ينجح الأمر 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
إذا كنت قد خرجت من مطالبات bash
حاوية Docker ، فقد تحتاج إلى التحقق مما إذا كان قيد التشغيل وإعادة التشغيل / إعادة الدخول حسب الحاجة.
لإظهار أي حاويات 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
في إخراج أي من أوامر 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/codelab_otsim bash
إذا تم إيقاف الحاوية (مدرجة في docker ps -a
ولكن ليس docker ps
) ، فأعد تشغيلها:
$ docker start -i codelab_otsim_ctnr
إذا كانت حاوية Docker قيد التشغيل بالفعل (مدرجة في docker ps
) ، فأعد الاتصال بالحاوية في كل طرف:
$ docker exec -it codelab_otsim_ctnr bash
لقد نجحت في محاكاة أول شبكة سلاسل رسائل باستخدام OpenThread. رائع!
تعلمت في Codelab هذا كيفية:
- بدء وإدارة حاوية OpenThread Simulation Docker
- محاكاة شبكة الخيط
- مصادقة عقد الموضوع
- إدارة شبكة الموضوع مع OpenThread Daemon
لمعرفة المزيد حول Thread و OpenThread ، استكشف هذه المراجع:
- التمهيدي الموضوع على openthread.io
- مواصفات الخيط
- مستودع OpenThread GitHub
- مرجع OpenThread CLI
- دعم إضافي لـ OpenThread Docker
أو جرب استخدام OpenThread Border Router في حاوية Docker !