פיתוח והגדרה של נתב Border Border ל-OpenThread

הצגת המקור ב-GitHub

במדריך הזה מוסבר על תהליך הפיתוח והתצורה הבסיסיים של נתב OpenThread Border (OTBR). לאחר השלמת התהליך הזה, יהיה לכם מכשיר OTBR שפועל כמכשיר בפרוטוקול Thread מלא (FTD) בעיצוב RCP.

הגדרת הפלטפורמה

הגדרת פלטפורמת חומרה נתמכת:

יצירה ו-Flash של RCP

OTBR פועל בתכנון RCP. צריך לבחור OpenThread נתמך לשימוש כ-RCP לצורך מעקב אחר הבניין וההבהוב המתאים לפלטפורמה הזו.

לסקירה כללית של פיתוח OpenThread ניתן למצוא מדריך ליצירה.

הוראות ספציפיות לפיתוח פלטפורמות נתמכות באמצעות GNU Autotools שנמצא בכל אחת מהדוגמאות תיקיית הפלטפורמה.

התקנת OTBR

OTBR מתקשר עם ה-RCP באמצעות ספינל. כדי להתקין OTBR (דפדפן OTBR) בפלטפורמת חומרה, יש לבצע את השלבים הבאים.

משכפלים את מאגר ה-OTBR:

git clone https://github.com/openthread/ot-br-posix

יחסי תלות בהתקנות

הגדרות ברירת המחדל מאפשרות להפעיל את BORDER_ROUTING ברוב הפלטפורמות. עבור לרשימה המלאה של דגלי ברירת המחדל ל-OTBR, אפשר לעיין דוגמאות לפלטפורמות ב-GitHub. בוחרים את הפלטפורמה הרצויה ולוחצים על default, אם האפשרות זמינה.

  • שימוש ברירת מחדל:

    cd ot-br-posix
    ./script/bootstrap
    
  • BeagleBone Black עם מנהל רשת (אופציונלי):

    cd ot-br-posix
    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/bootstrap
    

הידור והתקנה של OTBR

  • שימוש ברירת מחדל. סקריפט ההגדרה מפעיל ניתוב גבול כברירת מחדל. כדי להפעיל ניתוב גבול, יש לציין את ממשק האתרנט או ה-Wi-Fi של הפלטפורמה:

    שימוש באתרנט:

    INFRA_IF_NAME=eth0 ./script/setup
    

    שימוש ב-Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • BeagleBone Black. שימוש ב'מנהל הרשת' (אופציונלי):

    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/setup
    

צירוף והגדרה של מכשיר RCP

מחברים את מכשיר ה-RCP המהבהב לפלטפורמת Border Router באמצעות USB.

כדי להגדיר את היציאה הטורית של מכשיר ה-RCP ב-otbr-agent, קודם צריך לקבוע את שם היציאה הטורית של מכשיר ה-RCP על ידי בדיקה של /dev:

ls /dev/tty*

עכשיו צריך לבדוק את ההגדרות של otbr-agent.

cd /etc/default
cat otbr-agent

קובץ התצורה otbr-agent מכיל את השם של ממשק ה-Thread, האתרנט שלך או שם ממשק ה-Wi-Fi, ושם היציאה הטורית של RCP.

OTBR_AGENT_OPTS="-I wpan0 -B OTBR_INFRA_IF_NAME spinel+hdlc+uart:///dev/ttyACM0 trel://OTBR_INFRA_IF_NAME"

לא לכל המכשירים מחוברים אותו שם של יציאה טורית. במידה הרבה ביותר שמות היציאות הנפוצים הם ttyACM* ו-ttyUSB*. אפשר לעיין במסמכי התיעוד עבור המכשיר שלך כדי לקבוע את שם היציאה הטורית הצפויה.

אם צריך, מעדכנים את קובץ התצורה otbr-agent. לדוגמה, עבור רשת Wi-Fi ממשק ושם יציאה טורי של ttyUSB0:

OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB0 trel://wlan0"

כדי לעדכן ממשק אתרנט:

OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0"

מפעילים מחדש את נתב הגבולות. אם אתם משתמשים בפלטפורמה BeagleBone Black, אל תשכחו להחזיק את לחצן BOOT בזמן עשינו זאת.

שירות OTBR אמור להתחיל לאחר ההפעלה.

אימות השירותים

מוודאים שכל השירותים הנדרשים מופעלים:

sudo systemctl status

אם הסקריפט setup הצליח, השירותים הבאים יופיעו פלט:

  • mdns.service
  • otbr-agent.service
  • otbr-web.service

לדוגמה:

● raspberrypi
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Thu 1970-01-01 00:00:01 UTC; 47 years 7 months ago
   CGroup: /
           ├─user.slice
           │ └─user-1000.slice
           │   ├─user@1000.service
           │   │ └─init.scope
           │   │   ├─576 /lib/systemd/systemd --user
           │   │   └─580 (sd-pam)
           │   └─session-c1.scope
           │     ├─480 /bin/login --
           │     └─585 -bash
           ├─init.scope
           │ └─1 /sbin/init
           └─system.slice
             ├─systemd-timesyncd.service
             │ └─334 /lib/systemd/systemd-timesyncd
             ├─dbus.service
             │ └─339 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             ├─hciuart.service
             │ └─442 /usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow -
             ├─ssh.service
             │ └─621 /usr/sbin/sshd -D
             ├─avahi-daemon.service
             │ ├─341 avahi-daemon: running [raspberrypi.local]
             │ └─361 avahi-daemon: chroot helper
  # enabled  ├─otbr-web.service
             │ └─472 /usr/sbin/otbr-web
             ├─triggerhappy.service
             │ └─354 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*
             ├─systemd-logind.service
             │ └─353 /lib/systemd/systemd-logind
  # enabled  ├─otbr-agent.service
             │ └─501 /usr/sbin/otbr-agent -I wpan0
             ├─cron.service
             │ └─350 /usr/sbin/cron -f
             ├─systemd-udevd.service
             │ └─154 /lib/systemd/systemd-udevd
             ├─rsyslog.service
             │ └─345 /usr/sbin/rsyslogd -n
             ├─bluetooth.service
             │ └─445 /usr/lib/bluetooth/bluetoothd
  # enabled  ├─mdns.service
             │ └─725 /usr/sbin/mdnsd
             ├─systemd-journald.service
             │ └─136 /lib/systemd/systemd-journald
             └─dhcpcd.service
               ├─409 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
               └─466 /sbin/dhcpcd -q -w

אם השירותים האלה פועלים, אבל הגורם המוגבל (RPi) נמצא במצב ירודה, חלק הפעלת השירות האחר נכשלה. כדאי לבדוק:

sudo systemctl --failed

אפשר גם לבדוק כל שירות בנפרד:

sudo service mdns status
sudo service otbr-agent status
sudo service otbr-web status

otbr-web מופעל כברירת מחדל ברוב הפלטפורמות. אם otbr-web לא מותקן, מנסים להעביר את הדגל WEB_GUI:

WEB_GUI=1 ./script/bootstrap
INFRA_IF_NAME=wlan0 WEB_GUI=1 ./script/setup

אימות RCP

מוודאים שה-RCP נמצא במצב הנכון:

sudo ot-ctl state

ot-ctl הוא כלי עזר לשורת הפקודה שמסופק עם OTBR. הוא משמש ל- תקשורת עם ממשק ה-PAN של פרוטוקול Thread (ברירת המחדל היא wpan0) שotbr-agent שמקושרת בתכנון RCP.

אם ה-RCP פועל בהצלחה והצומת לא חבר בפרוטוקול Thread הרשת, הפלט אמור להיות דומה לזה:

disabled

אם הפלט הוא OpenThread daemon is not running, אפשר לפתור את הבעיה לפי השלבים הבאים:

  1. צריך לוודא שלנתב הגבולות יש מספיק מתח (יש להשתמש בחיבור החיצוני המתאים) מתאם).
  2. מנתקים את לוח ה-RCP ומחברים אותו מחדש לפלטפורמה של Border Router.
  3. יש לוודא שקיים מכשיר עם יציאה טורית מסוג RCP. לדוגמה, אם המכשיר צריך להיות מצורף אל /dev/ttyUSB0:

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. יש לאפס את ה-RCP באמצעות sudo ot-ctl reset.

צריך לבדוק שוב את סטטוס ה-RCP באמצעות sudo ot-ctl state.