נתב OpenThread Border (OTBR) דורש צומת RCP של Thread כדי להצטרף רשת של פרוטוקול Thread. Docker של OTBR תומך ב-RCP פיזי (OpenThread) או RCP מדומה).
כדי לחבר Docker מסוג OTBR למכשירי Thread פיזיים אחרים, צריך להשתמש RCP פיזי. אם רוצים לבדוק ניתוב גבולות באמצעות סימולציה של Thread משתמשים בסימולציה של RCP.
RCP פיזי
להשתמש בכל פלטפורמת OpenThread נתמכת RCP פיזי. למידע נוסף, ראו build ו-Flash RCP. מהמדריך OpenThread Border Router Build and Configuration מידע.
צירוף ה-RCP
- לאחר הבנייה וההבהוב, מחברים את מכשיר ה-RCP למכונה שפועלת Docker מסוג OTBR באמצעות USB.
- קובעים את שם היציאה הטורית של מכשיר ה-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 יפעל למטה.
עוברים אל בדיקת הקישוריות כדי ממשיכים בהגדרת Docker של OTBR.
סימולציה של RCP
משתמשים בהדמיה של גרסת build של OpenThread RCP לסימולציה של ה-RCP. האפשרות הזאת שימושית אם רוצים לבדוק ניתוב גבולות עם סימולציה של רשת פרוטוקול Thread במחשב.
פיתוח אפליקציה להדמיה של RCP
משכפלים את המאגר של OpenThread:
cd ~
git clone https://github.com/openthread/openthread
אתחול ובניית האפליקציה המדומה:
cd openthread
./script/bootstrap
./script/cmake-build simulation
הגדרה של מקור נתונים דו-כיווני
שימוש בכלי שורת הפקודה socat
כדי ליצור מקור נתונים דו-כיווני
כדי להעביר נתונים בין ההדמיה של RCP ל-Docker OTBR.
כדי להריץ את התהליך הזה צריך לפתוח חלון טרמינל חדש כי הוא צריך להישאר פועל בזמן שה-Docker OTBR פועל.
התקנת
socat
:sudo apt-get install socat
התחלת
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
פותחים חלון טרמינל חדש כדי להריץ את ה-RCP הסימולציה, כי צריך להשאיר אותו בזמן שה-Docker OTBR פועל.
באמצעות היציאה הטורית הראשונה בפלט
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 יפעל למטה.