محاكاة شبكة Thread باستخدام OpenThread

1. مقدمة

26b7f4f6b3ea0700.png

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

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

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

ما ستتعرَّف عليه

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

المتطلبات

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

2. إعداد نظام التصميم

Git

يجب توفُّر Git لإكمال هذا الدرس التطبيقي حول الترميز. عليك تنزيله وتثبيته قبل المتابعة.

بعد التثبيت، اتّبِع التعليمات الخاصة بنظام التشغيل المحدّد لتنزيل OpenThread وإنشاءه.

XCode لنظام التشغيل Mac OS X

يجب استخدام XCode لتثبيت OpenThread وإنشاءه على نظام التشغيل Mac OS X.

بعد تثبيت أداة XCode، يمكنك تثبيت أدوات سطر أوامر XCode:

$ xcode-select --install

الإصدار على Linux / Mac OS X

تم اختبار تعليمات التثبيت هذه على الإصدارين Ubuntu Server 14.04 LTS وMac OS X Sierra 10.12.6.

تثبيت OpenThread. يتأكّد أوامر bootstrap من تثبيت سلسلة الأدوات وضبط البيئة بشكل صحيح:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

استخدام Windows

إذا كنت تفضّل استخدام نظام التشغيل Windows، ننصحك بتجربة إصدار Docker من هذا الدرس التطبيقي حول الترميز.

3- إنشاء تطبيقات OpenThread

بعد اكتمال التثبيت، أنشئ تطبيق المثال OpenThread. نستخدم مثال المحاكاة هذا في هذا الدرس التطبيقي حول الترميز.

$ cd ~/src/openthread
$ ./script/cmake-build simulation

الآن أنشئ OpenThread Daemon:

$ ./script/cmake-build posix -DOT_DAEMON=ON

4. محاكاة شبكة Thread

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

يرشدك هذا التمرين إلى الحدّ الأدنى من الخطوات المطلوبة لاختبار اتصال أحد أجهزة Thread التي تمت محاكاتها من جهاز Thread آخر تمت محاكاته.

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

6e3aa07675f902dc.png

اختبار الاتصال بعقدة

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

انتقِل إلى دليل openthread وابدأ عملية CLI على جهاز Thread تم محاكاته باستخدام البرنامج الثنائي ot-cli-ftd.

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/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 تمت محاكاته في هذا الدرس التطبيقي حول الترميز ستستخدم واصف ملفات مختلفًا.

ملاحظة: يجب استخدام واصفات الملفات بقيمة 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 المخصصة لواجهة 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 = شبكة محلية
  • يبدأ بـ fe80 = link-local

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

  • يحتوي على ff:fe00 = محدِّد مواقع جهاز التوجيه (RLOC)
  • لا تحتوي على ff:fe00 = معرّف نقطة النهاية (EID).

حدِّد معرّف EID في وحدة التحكّم ودوِّنه لاستخدامه لاحقًا. في النموذج الناتج أعلاه، يكون معرّف شريحة SIM المضمّنة (EID) هو:

fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6

2. بدء العقدة 2

افتح وحدة طرفية جديدة وانتقِل إلى دليل openthread وابدأ في إنشاء عملية واجهة سطر الأوامر. هذا هو جهاز Thread الثاني الذي تمت محاكاته:

$ cd ~/src/openthread
$ ./build/simulation/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:

> thread start
Done

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

> state
child
Done

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

> state
router
Done

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

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

1. التحقّق من إمكانية الاتصال

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

> rloc16
5800
Done

في العقدة 1، تحقق من جدول جهاز التوجيه RLOC16 للعقدة 2. تأكَّد من تبديل العقدة 2 إلى حالة جهاز التوجيه أولاً.

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQI In | LQI Out | Age | Extended MAC  |
+----+--------+----------+----------+-------+---------+-----+------------------+
| 20 | 0x5000 |       63 |         0 |     0 |      0 |   0 | 96da92ea13534f3b |
| 22 | 0x5800 |       63 |         0 |     3 |      3 |  23 | 5a4eb647eb6bc66c |

تم العثور على الجزء RLOC الخاص بالعقدة 1 في 0xa800 في الجدول، ما يؤكد أنّه متصل بالشبكة المتداخلة.

2. عقدة Ping 1 من العقدة 2

تحقَّق من الاتصال بين جهازَي Thread اللذين تمّت محاكاته. في العقدة 2، ping، تم تخصيص معرّف شريحة SIM المضمّنة (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 للرجوع إلى طلب واجهة سطر الأوامر >.

اختبار الشبكة

والآن بعد أن أصبح بإمكانك إجراء اختبار الاتصال بنجاح بين جهازين من أجهزة Thread، عليك اختبار الشبكة المتداخلة (mesh) من خلال نقل عقدة إلى جهاز واحد بلا اتصال بالإنترنت.

الرجوع إلى العقدة 1 وإيقاف Thread:

> thread stop
Done

انتقِل إلى العقدة 2 وتحقَّق من الحالة. في غضون دقيقتين، تكتشف العقدة 2 أن القائد (العقدة 1) غير متصل، ومن المفترض أن ترى انتقال العقدة 2 ليكون leader للشبكة:

> state
router
Done
...
> state
leader
Done

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

> thread stop
Done
> factoryreset
>
> exit

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

> factoryreset
>
> exit

يمكنك الاطّلاع على مرجع واجهة سطر الأوامر OpenThread لاستكشاف جميع أوامر واجهة سطر الأوامر المتاحة.

5- مصادقة العُقد باستخدام "التفويض"

في التمرين السابق، قمت بإعداد شبكة Thread مع جهازين محاكى واتصال تم التحقق منه. ومع ذلك، يسمح هذا فقط بالمرور بين الأجهزة للزيارات المحلية لرابط IPv6 الذي لم تتم مصادقته. لتوجيه حركة بيانات IPv6 العالمية بينها (والإنترنت عبر موجِّه حدود Thread)، يجب مصادقة العُقد.

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

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

d6a67e8a0d0b5dcb.png

1. إنشاء شبكة

في حالة المتابعة من التمرين السابق، يُفترض أن يكون لديك بالفعل نافذتين طرفيتين مفتوحتين. وإذا لم يكن الأمر كذلك، فتأكد من أن اثنين مفتوحين وجاهزين للاستخدام. سيتم استخدام إحداهما باعتبارها العقدة 1، والأخرى تمثل العقدة 2.

في العقدة 1، عليك بدء عملية CLI:

$ cd ~/src/openthread
$ ./build/simulation/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 Network معتمَدة.

> commissioner joiner add * J01NME
Done

3- بدء دور "الانضمام"

في نافذة طرفية ثانية، ظهور عملية CLI جديدة. هذه هي العقدة 2.

$ cd ~/src/openthread
$ ./build/simulation/examples/apps/cli/ot-cli-ftd 2

في العقدة 2، فعِّل دور "الانضمام" باستخدام "بيانات اعتماد الانضمام" في J01NME.

> ifconfig up
Done
> joiner start J01NME
Done

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

Join success

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

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

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

5- إعادة ضبط الإعدادات

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

> thread stop
Done
> factoryreset
>
> exit

قد تحتاج إلى الضغط على enter عدة مرات لإعادة عرض الطلب > بعد إدخال أمر factoryreset.

6- إدارة الشبكة باستخدام OpenThread Daemon

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

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

ot-ctl هو واجهة سطر الأوامر التي يوفّرها ot-daemon لإدارة RCP وإعداده. باستخدام هذا، سنربط RCP بالشبكة التي أنشأها جهاز Thread.

استخدام البرنامج الخفي

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

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

في حالة المتابعة من التمرين السابق، يجب أن يكون لديك نافذتان طرفيتان مفتوحتان بالفعل. افتح نافذة ثالثة للتأكد من أن لديك ثلاث نوافذ طرفية متاحة لهذا التمرين.

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

في النافذة الطرفية الأولى، ابدأ عملية واجهة سطر الأوامر (CLI) لجهاز Thread الذي تمت محاكاته:

$ cd ~/src/openthread
$ ./build/simulation/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 المخصصة لواجهة 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). معرّف شريحة SIM المضمّنة (EID) هو عنوان الشبكة المحلية المتداخلة الذي لا يحتوي على ff:fe00 في العنوان. في هذا النموذج الناتج، يكون معرّف شريحة SIM المضمّنة (EID) هو fd55:cf34:dea5:7994:460:872c:e807:c4ab.

حدِّد معرّف شريحة SIM المضمّنة (EID) المحدَّد من ناتج ipaddr، والذي سيتم استخدامه للاتصال بالعقدة.

2. بدء البرنامج الخفي

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

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+forkpty://build/simulation/examples/apps/ncp/ot-rcp?forkpty-arg=2'

عند النجاح، يتم إنشاء مخرجات مشابهة لما يلي في وضع التسجيل المطوَّل (ot-daemon):

ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05
ot-daemon[12463]: Thread version: 4
ot-daemon[12463]: Thread interface: wpan0
ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10

اترك هذه الوحدة الطرفية مفتوحة وتعمل في الخلفية. ولن تُدخل أي أوامر أخرى إليه.

3- استخدام ot-ctl للانضمام إلى الشبكة

لم نفوّض العقدة 2 (RCP ot-daemon) لأي شبكة Thread حتى الآن. وهنا يأتي دور ot-ctl. يستخدم ot-ctl واجهة سطر الأوامر نفسها التي يستخدمها تطبيق OpenThread CLI. وبالتالي، يمكنك التحكّم في عُقد ot-daemon بالطريقة نفسها التي تتحكّم بها أجهزة Thread الأخرى التي تمت محاكاتها.

في نافذة طرفية ثالثة، ابدأ ot-ctl:

$ sudo ./build/posix/src/posix/ot-ctl
>

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

ستستخدم 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 Network.

اربط الآن العقدة 2 بشبكة Thread:

> thread start
Done

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

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

> state
child
Done
...
> state
router
Done

5- التحقّق من إمكانية الاتصال

عليك إنهاء ot-ctl باستخدام الأمر Ctrl+D أو exit، وعلى سطر الأوامر في الجهاز المضيف، ping عقدة 1، باستخدام معرّف شريحة SIM المضمّنة (EID) الخاص به مع الأمر ping6. في حال انضمام مثيل RCP ot-daemon إلى شبكة Thread واتصاله بنجاح، سيتم اختبار الاتصال بنجاح:

$ 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

7. تهانينا!

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

في هذا الدرس التطبيقي حول الترميز، تعلّمت كيفية:

  • إعداد سلسلة أدوات إنشاء OpenThread
  • محاكاة شبكة Thread
  • مصادقة عُقد سلسلة المحادثات
  • إدارة شبكة Thread باستخدام OpenThread Daemon

لمزيد من المعلومات، يمكنك الاطّلاع على المراجع التالية: