1. מבוא
השקת OpenThread של Google היא הטמעת קוד פתוח של פרוטוקול הרשת Thread. במסגרת Google Nest הושקה OpenThread כדי שהטכנולוגיה שמשמשת את מוצרי Nest תהיה זמינה באופן נרחב למפתחים, כדי לזרז את הפיתוח של מוצרים לבית המחובר.
מפרט פרוטוקול Thread מגדיר פרוטוקול תקשורת אלחוטי, אמין ומבוסס-IPv6, עבור אפליקציות ביתיות. OpenThread מיישמת את כל שכבות הרשת של פרוטוקול Thread, כולל IPv6, 6LoWPAN, IEEE 802.15.4 עם אבטחת MAC, הגדרות קישור רשת וניתוב רשת.
ה-Codelab הזה ידריך אותך איך לבצע סימולציה של רשת פרוטוקול Thread במכשירים אמולטיביים באמצעות Docker.
מה תלמדו
- איך מגדירים את שרשרת הכלים לפיתוח גרסת build של OpenThread
- איך לדמות רשת פרוטוקול Thread
- איך לאמת צמתים של פרוטוקול Thread
- איך מנהלים רשת בפרוטוקול Thread באמצעות OpenThread Daemon
למה תזדקק?
- Docker
- ידע בסיסי ב-Linux, ניתוב רשתות
2. הגדרת Docker
ה-Codelab הזה נועד להשתמש ב-Docker במחשב Linux , Mac OS X או Windows. הסביבה המומלצת היא Linux.
התקנת Docker
מתקינים את Docker במערכת ההפעלה הרצויה.
שליפת קובץ האימג' של Docker
לאחר התקנת Docker, פותחים חלון טרמינל ומושכים את תמונת ה-Docker openthread/environment
. התמונה הזו כוללת את OpenThread ו-OpenThread Daemon מוכנים מראש ומוכנים לשימוש ב-Codelab הזה.
$ 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
מוחקת את המאגר כשיוצאים ממאגר התגים. אל תשתמשו באפשרות הזו אם לא רוצים שמאגר התגים יימחק.
שימו לב בדגלים הנדרשים ל-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. הדמיה של רשת פרוטוקול Thread
האפליקציה לדוגמה שבה תשתמשו ב-Codelab הזו מדגימה אפליקציית OpenThread מינימלית שחושפת את ממשקי התצורה והניהול של OpenThread באמצעות ממשק שורת פקודה בסיסי (CLI).
התרגיל הזה מנחה אתכם בצעדים המינימליים שנדרשים כדי לבצע פינג למכשיר Thread אחד באמולציה של מכשיר Thread אחר.
האיור הבא מתאר טופולוגיה בסיסית של רשת פרוטוקול 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
בקונטיינר של Docker, מפעילים את תהליך ה-CLI אמולציה של מכשיר Thread באמצעות הקובץ הבינארי 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 מועברות בתוך מטענים ייעודיים (payloads) של UDP).
הארגומנט של 1
הוא מתאר קובץ שמייצג את הביטים הנמוכים ביותר המשמעותיים של הערך 'הוקצתה על ידי מפעל' IEEE EUI-64 עבור המכשיר האמולציה. הערך הזה משמש גם כשמקשרים ליציאת UDP עבור אמולציית רדיו של IEEE 802.15.4 (יציאה = 9000 + מתאר קובץ). כל מכונה של מכשיר Thread אמולציה ב-Codelab הזה תשתמש בתיאור קובץ שונה.
הערה: כשמתחילים את התהליך במכשיר אמולציה, צריך להשתמש בתיאורי קבצים מ-1
ומעלה כפי שצוין ב-Codelab הזה. מתאר קובץ של 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
ממתינים כמה שניות ומוודאים שהמכשיר הפך למוביל בשרשור. ה-Leader הוא המכשיר שאחראי לניהול הקצאת המזהים של הנתב.
> 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 בפלט של המסוף ורשמו אותו לשימוש מאוחר יותר. בפלט לדוגמה שלמעלה, ה-EID הוא:
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
2. התחלת צומת 2
פותחים טרמינל חדש ומפעילים מעטפת bash
בקונטיינר Docker שפועל כרגע כדי להשתמש בו לצומת 2.
$ docker exec -it codelab_otsim_ctnr bash
בהנחיה החדשה הזו של bash
, מריצים את תהליך ה-CLI עם הארגומנט 2
. זהו המכשיר השני שלך בטכנולוגיית Thread:
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:
> thread start Done
המכשיר יופעל כילד.
> state child Done
תוך 2 דקות אמור להופיע שינוי במצב מ-child
ל-router
. נתב פרוטוקול Thread יכול לנתב תעבורת נתונים בין מכשירים בפרוטוקול Thread. הוא נקרא גם 'הורה'.
> state router Done
אימות הרשת
דרך קלה לאמת את רשת האריג היא לבדוק את טבלת הנתבים.
1. צריך לבדוק את החיבור
ב-Node 2, מקבלים את RLOC16. ה-RLOC16 הוא 16 הביטים האחרונים של כתובת ה-IPv6 של המכשיר ב-RLOC.
> 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 מופיע בטבלה ומאשר שהוא מחובר לרשת.
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
כדי לחזור להנחיה >
של ה-CLI, מקישים על enter
.
בדיקת הרשת
עכשיו אפשר לבצע פינג בין שני מכשירי Thread אמולומיים. עכשיו אפשר לבדוק את רשת האריג על ידי העברת צומת אחד למצב אופליין.
חוזרים לצומת 1 ומפסיקים את Thread:
> thread stop Done
עוברים לצומת 2 ובודקים את המצב. בתוך שתי דקות, צומת 2 מזהה שהמוביל (צומת 1) נמצא במצב אופליין, וצומת 2 אמור להופיע בתור ה-leader
של הרשת:
> state router Done ... > state leader Done
לאחר האישור, מפסיקים את פרוטוקול Thread ואת צומת 2 לאיפוס להגדרות המקוריות לפני שיוצאים חזרה להנחיה bash
של Docker. איפוס להגדרות המקוריות כדי להבטיח שפרטי הכניסה של רשת פרוטוקול Thread שבהם השתמשנו בתרגיל הזה לא יועברו לתרגיל הבא.
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
יכול להיות שיהיה צורך להקיש על enter
כמה פעמים כדי להחזיר את ההנחיה >
אחרי פקודת factoryreset
. אין לצאת מקונטיינר של Docker.
בנוסף, יש לאפס להגדרות המקוריות ולצאת מצומת 1:
> factoryreset > > exit root@c0f3912a74ff:/#
בחומר העזר בנושא CLI של OpenThread תוכלו למצוא מידע על כל פקודות ה-CLI הזמינות.
4. אימות צמתים באמצעות עמלה
בתרגיל הקודם הגדרת רשת פרוטוקול Thread עם שני מכשירים מדומים וקישוריות מאומתת. עם זאת, ההגדרה הזו מאפשרת רק לתנועת קישורים מקומית של IPv6 לא מאומתת לעבור בין מכשירים. כדי לנתב תנועת IPv6 גלובלית ביניהם (ואת האינטרנט באמצעות נתב גבול מסוג Thread), יש לאמת את הצמתים.
כדי לבצע אימות, מכשיר אחד צריך לשמש כנציב. הנציב הוא שרת האימות שנבחר כרגע למכשירי פרוטוקול Thread חדשים, והוא המאשר לספק את פרטי הכניסה לרשת הנדרשים כדי שהמכשירים יצטרפו לרשת.
בתרגיל זה נשתמש באותה טופולוגיה בעלת שתי צמתים כמו קודם. לצורך אימות, ה-thread Leader ישמש בתור הנציב, נתב ה-thread בתור join.
Docker
בכל צומת (חלון מסופים) בתרגילים הנותרים, צריך לוודא שמריצים את הקונטיינר של Docker עם גרסת ה-build של OpenThread. אם ממשיכים מהתרגיל הקודם, עדיין אמורות להיות לך שתי הנחיות bash
באותו קונטיינר Docker פתוח. אם לא, פועלים לפי השלב פתרון בעיות ב-Docker או מבצעים מחדש את התרגיל Simulate a Thread network.
1. יצירת רשת
בצומת 1, מתחילים את תהליך ה-CLI:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1
הערה: אם ההודעה >
לא מופיעה אחרי הרצת הפקודה הזו, צריך להקיש על enter
.
יוצרים מערך נתונים תפעולי חדש, שומרים אותו כמערך פעיל ומפעילים את פרוטוקול Thread:
> 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. התחלת התפקיד 'הצטרפות'
בחלון הטרמינל השני, בקונטיינר 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
בתור מצטרפים חדשים, המכשיר (צומת 2) אומת בהצלחה מול הנציב (Node 1) וקיבל את פרטי הכניסה של רשת פרוטוקול Thread.
עכשיו, לאחר שצומת 2 מאומת, מתחילים את פרוטוקול Thread:
> thread start Done
4. אימות אימות הרשת
בודקים את state
ב-Node 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. כך נחבר את ה-RCP לרשת שנוצרה במכשיר פרוטוקול Thread.
Docker
בכל צומת (חלון סופי) בתרגיל הזה, צריך לוודא שאתם מפעילים קונטיינר Docker עם גרסת ה-build של OpenThread. אם נמשיך מהתרגיל הקודם, אמורות להיות לך כבר שתי הנחיות bash
באותו קונטיינר של Docker. אם לא, צריך להיעזר בשלב פתרון בעיות ב-Docker.
שימוש ב-ot-daemon
בתרגיל הזה ייעשה שימוש בשלושה חלונות מסוף, בהתאם לדברים הבאים:
- מופע CLI של סימולציה של מכשיר Thread (צומת 1)
- תהליך אחד (
ot-daemon
) ot-ctl
מופע של CLI
1. התחלת צומת 1
בחלון הטרמינל הראשון, מפעילים את תהליך ה-CLI עבור האמולציה של מכשיר פרוטוקול Thread:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1
הערה: אם ההודעה >
לא מופיעה אחרי הרצת הפקודה הזו, צריך להקיש על enter
.
יוצרים מערך נתונים תפעולי חדש, שומרים אותו כמערך פעיל ומפעילים את פרוטוקול Thread:
> 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 >
כמו שמוסבר בשלב Simulate a Thread Network (סימולציה של רשת בפרוטוקול Thread), כתובת אחת היא מסוג link-local (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
המכשיר הזה משמש להעברה ולקבלה של חבילות במכשירים וירטואליים. אם המכשיר כבר נוצר, יכול להיות שתופיע הודעת שגיאה – זו תופעה רגילה ואפשר להתעלם ממנה.
מתחילים את 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 כדי להצטרף לרשת
עדיין לא הזמנתם את Node 2 (ה-RCP של ot-daemon
) לאף רשת בפרוטוקול Thread. כאן ot-ctl
נכנס. ה-CLI של ot-ctl
זהה לזה של אפליקציית OpenThread 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, כדי להגביל את ההצטרפות ל-joiner הספציפי:
> 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) אימת את עצמו מול הנציב (Node 1) וקיבל את פרטי הכניסה של רשת פרוטוקול Thread.
עכשיו מצטרפים ל-Node 2 לרשת בפרוטוקול Thread (שוב, בחלון הטרמינל השלישי):
> thread start Done
4. אימות אימות הרשת
בטרמינל השלישי, בודקים את state
ב-Node 2 כדי לוודא שהוא הצטרף לרשת. תוך שתי דקות, צומת 2 עובר מ-child
ל-router
:
> state child Done ... > state router Done
5. אימות הקישוריות
בחלון הטרמינל השלישי, יוצאים מ-ot-ctl
באמצעות הפקודה Ctrl+D או exit
, וחוזרים למסוף bash
של מאגר התגים. מהמסוף הזה, מבצעים פינג ל-Node 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
אם יצאתם מקונטיינר של Docker
bash
הודעות, יכול להיות שצריך לבדוק אם היא פועלת ולהפעיל מחדש או להזין אותה מחדש לפי הצורך. כל הקונטיינרים שיצרתם ב-Docker שבהם לא השתמשתם באפשרות --rm
עדיין אמורים להתקיים.
כדי להציג אילו קונטיינרים של Docker פועלים:
$ 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
), צריך לוודא שמריצים את Docker כמשתמש ברמה הבסיסית (root), לפי הפקודות שמופיעות ב-Codelab הזה. ה-Codelab הזה לא תומך בהרצת Docker במצב ללא שורש.
7. מעולה!
סיימת ליצור סימולציה של רשת פרוטוקול Thread הראשונה באמצעות OpenThread. מדהים!
ב-Codelab הזה למדת איך:
- הפעלה וניהול של קונטיינר Docker ל-OpenThread Simulation
- הדמיה של רשת פרוטוקול Thread
- אימות צמתים של פרוטוקולי Thread
- ניהול רשת בפרוטוקול Thread באמצעות OpenThread Daemon
מידע נוסף על פרוטוקול Thread ו-OpenThread זמין בקישורים הבאים:
- Thread Primer ב-openthread.io
- מפרט לשרשורים
- מאגר OpenThread ב-GitHub
- חומר עזר בנושא OpenThread CLI
- תמיכה נוספת ב-OpenThread Docker
אפשר גם לנסות להשתמש ב-OpenThread Border Router בקונטיינר של Docker!