הפעלת עגינה של OTBR

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

נתב OpenThread Border (OTBR) דורש צומת RCP של Thread כדי להצטרף לרשת בפרוטוקול Thread. Docker מסוג OTBR תומך גם ב-RCP פיזי (מתאם OpenThread) וגם ב-RCP מדומה.

אם רוצים לחבר Docker מסוג OTBR למכשירי Thread פיזיים אחרים, משתמשים ב-RCP פיזי. אם רוצים לבדוק ניתוב גבולות באמצעות סימולציה של רשת פרוטוקול Thread, צריך להשתמש בהדמיה של RCP.

RCP פיזי

משתמשים בכל פלטפורמת OpenThread נתמכת ל-RCP הפיזי. למידע נוסף, ראו את השלב Build and flash RCP במדריך OpenThread Border Router Build and Configuration.

צירוף ה-RCP

  1. אחרי הבנייה וההבהוב, מחברים את מכשיר ה-RCP למכונה שמריצה OTBR Docker באמצעות USB.
  2. קובעים את שם היציאה הטורית של מכשיר ה-RCP על ידי בדיקת הערך /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

הפעלת קונטיינר OTBR של Docker

בחלון טרמינל חדש, מפעילים את Docker מסוג OTBR, תוך התייחסות ליציאה הטורית של ה-RCP. לדוגמה, אם ה-RCP נטען ב-/dev/ttyACM0:

docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0

לאחר ההצלחה, הפלט אמור להיראות כך:

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
RADIO_URL: spinel+hdlc+uart:///dev/ttyACM0
TUN_INTERFACE_NAME: wpan0
NAT64_PREFIX: 64:ff9b::/96
AUTO_PREFIX_ROUTE: true
AUTO_PREFIX_SLAAC: true
Current platform is ubuntu
* Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /etc/sysctl.d/60-otbr-ip-forward.conf ...
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
 * Starting userspace NAT64 tayga             [ OK ]
/usr/sbin/service
 * Starting domain name service... bind9      [ OK ]
/usr/sbin/service
 * dbus is not running
 * Starting system message bus dbus           [ OK ]
   ...fail!
otWeb[155]: border router web started on wpan0
otbr-agent[224]: Thread interface wpan0
otbr-agent[224]: Thread is down
otbr-agent[224]: Check if Thread is up: OK
otbr-agent[224]: Stop publishing service
otbr-agent[224]: PSKc is not initialized
otbr-agent[224]: Check if PSKc is initialized: OK
otbr-agent[224]: Initialize OpenThread Border Router Agent: OK
otbr-agent[224]: Border router agent started.

OTBR Docker פועל עכשיו. משאירים את חלון הטרמינל פתוח ופועל ברקע. אם יוצאים מהתהליך או סוגרים את החלון, ה-Docker OTBR ייפתח.

נכנסים ל-Test Connectivity כדי להמשיך בהגדרת Docker של OTBR.

סימולציה של RCP

משתמשים בהדמיה של גרסת build של OpenThread RCP לסימולציה של ה-RCP. האפשרות הזו שימושית אם רוצים לבדוק ניתוב גבולות באמצעות סימולציה של רשת פרוטוקול Thread במכונה אחת.

פיתוח אפליקציה להדמיה של RCP

  1. משכפלים את המאגר של OpenThread :

    cd ~
    git clone https://github.com/openthread/openthread
    

  2. אתחול ובניית האפליקציה המדומה:

    cd openthread
    ./script/bootstrap
    ./script/cmake-build simulation
    

הגדרה של מקור נתונים דו-כיווני

משתמשים בכלי שורת הפקודה socat כדי ליצור מקור נתונים דו-כיווני להעברת נתונים בין ה-RCP המדמה ל-Docker OTBR.

  1. כדי להריץ את התהליך הזה, פותחים חלון טרמינל חדש כי צריך להשאיר אותו פועל בזמן ש-OTBR Docker פועל.

  2. מתקינים את socat:

    sudo apt-get install socat
    

  3. מפעילים את socat:

    socat -d -d pty,raw,echo=0 pty,raw,echo=0
    2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/2
    2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/7
    2018/09/06 09:58:29 socat[242994] N starting data transfer loop with FDs [5,5] and [7,7]
    

רושמים בצד את שתי היציאות הטוריות שמודגשות בפלט. משתמשים במפתח הראשון לסימולציה של RCP ובשני ל-Docker OTBR. בפלט לדוגמה שלמעלה:

  • /dev/pts/2 = סימולציה של יציאת RCP
  • /dev/pts/7 = Docker מסוג OTBR

צריך להשאיר את חלון הטרמינל פתוח ולפעול ברקע.

הפעלת הסימולציה של ה-RCP

  1. פותחים חלון טרמינל חדש כדי להריץ את ה-RCP הסימולציה, כי הוא צריך לפעול בזמן ש-OTBR Docker פועל.

  2. באמצעות היציאה הטורית הראשונה בפלט socat, מפעילים את אפליקציית ה-RCP המדומה. לדוגמה, אם משתמשים ב-/dev/pts/2 מהפלט socat:

    ~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

אין פלט מהפקודה הזו. משאירים את חלון הטרמינל פתוח ופועל ברקע.

הפעלת קונטיינר OTBR של Docker

בחלון טרמינל חדש, מפעילים את Docker של OTBR באמצעות היציאה הטורית השנייה בפלט socat. לדוגמה, אם משתמשים ב-/dev/pts/7 מהפלט socat:

docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/pts/7:/dev/ttyUSB0 --privileged openthread/otbr

חשוב לשים לב שהפקודה משתמשת גם ביציאה /dev/ttyUSB0. זוהי נקודת הטעינה שמוגדרת כברירת מחדל בקונטיינר ב-Docker.

לאחר ההצלחה, הפלט אמור להיראות כך:

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
RADIO_URL: spinel+hdlc+uart:///dev/ttyUSB0
TUN_INTERFACE_NAME: wpan0
NAT64_PREFIX: 64:ff9b::/96
AUTO_PREFIX_ROUTE: true
AUTO_PREFIX_SLAAC: true
Current platform is ubuntu
* Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /etc/sysctl.d/60-otbr-ip-forward.conf ...
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
 * Starting userspace NAT64 tayga             [ OK ]
/usr/sbin/service
 * Starting domain name service... bind9      [ OK ]
/usr/sbin/service
 * dbus is not running
 * Starting system message bus dbus           [ OK ]
   ...fail!
otWeb[155]: border router web started on wpan0
otbr-agent[224]: Thread interface wpan0
otbr-agent[224]: Thread is down
otbr-agent[224]: Check if Thread is up: OK
otbr-agent[224]: Stop publishing service
otbr-agent[224]: PSKc is not initialized
otbr-agent[224]: Check if PSKc is initialized: OK
otbr-agent[224]: Initialize OpenThread Border Router Agent: OK
otbr-agent[224]: Border router agent started.

OTBR Docker פועל עכשיו. משאירים את חלון הטרמינל פתוח ופועל ברקע. אם יוצאים מהתהליך או סוגרים את החלון, ה-Docker OTBR ייפתח.