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

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

במדריך הזה נסביר על תהליך ה-build וההגדרה הבסיסיים של OpenThread Border Router‏ (OTBR). בסיום התהליך, תהיה לכם OTBR שפועל כמכשיר Full Thread Device‏ (FTD) בתכנון RCP.

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

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

פיתוח וטעינה של RCP

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

במדריך הבנייה תוכלו לקרוא סקירה כללית על פיתוח פרוטוקול OpenThread.

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

התקנת OTBR

OTBR מתקשר עם RCP דרך spinel. כדי להתקין את OTBR בפלטפורמת החומרה שהוגדרה, מבצעים את השלבים הבאים.

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

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

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

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

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

    cd ot-br-posix
    ./script/bootstrap
    
  • BeagleBone Black עם Network Manager (אופציונלי):

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

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

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

    שימוש ב-Ethernet:

    INFRA_IF_NAME=eth0 ./script/setup
    

    שימוש ב-Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • BeagleBone Black. שימוש ב-Network Manager (אופציונלי):

    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, את שם ממשק ה-Ethernet או ה-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"

כדי לעדכן ממשק Ethernet:

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.