ל-OpenThread Border Router (OTBR) נדרש צומת Thread RCP כדי להצטרף לרשת Thread. פרוטוקול OTBR Docker מספק תמיכה ב-RCP פיזי (תוסף OpenThread) וגם בסימולציה של RCP.
אם אתם רוצים לחבר את OTBR ל-Docker למכשירי Thread פיזיים אחרים, יש להשתמש ב-RCP פיזי. אם אתם רוצים לבדוק ניתוב גבולות עם רשת שרשור מדומה, אפשר להשתמש בהדמיה של RCP.
RCP פיזי
יש להשתמש בכל פלטפורמת OpenThread נתמכת ל-RCP פיזי. מידע נוסף זמין בשלב Build ו-Flash RCP ממדריך OpenThread Border Router Build and Configuration.
צירוף של ה-RCP
- לאחר הבנייה והבהוב, יש לחבר את מכשיר ה-RCP למכונה שמריצה את OTBR באמצעות USB.
- כדי להגדיר את שם היציאה הטורית למכשיר ה-RCP, מסמנים את התיבה
/dev
:ls /dev/tty*
/dev/ttyACMO
הפעלת המכל של OTBR ב-Docker
בחלון טרמינל חדש, מפעילים את OTBR Docker, המתייחס ליציאה הטורית של ה-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 פועל עכשיו. השאירו את חלון הטרמינל פתוח ופועל ברקע. אם תפסיקו את התהליך או תסגרו את החלון, OTBR יסגור את המסך.
היכנסו לבדיקת הקישוריות כדי להמשיך בהגדרת OTBR ב-Docker.
הדמיה של RCP
שימוש בהדמיית גרסת build של RCP עבור RCP עם הדמיה. האפשרות הזו שימושית אם רוצים לבדוק ניתוב גבולות עם רשת שרשור בהדמיה של מכונה אחת.
יצירת אפליקציית ה-RCP עם הדמיה
משכפלים את המאגר של OpenThread:
cd ~
git clone https://github.com/openthread/openthread
אתחול ופיתוח אפליקציית הסימולציה:
cd openthread
./bootstrap
./script/cmake-build simulation
הגדרת מקור נתונים דו-כיווני
משתמשים בכלי השירות של שורת הפקודה socat
כדי ליצור מקור נתונים דו-כיווני כדי להעביר נתונים בין ה-RCP המדומה לבין OTBR ב-Docker.
כדאי לפתוח חלון חדש בטרמינל כדי להפעיל את התהליך הזה, כי הוא צריך להמשיך לפעול בזמן ש-OTBR Docker פועל.
התקנת
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 עם סימולציה, והשנייה ב-OTBR Docker. בפלט לדוגמה שלמעלה:
/dev/pts/2
= סימולציה של יציאת RCP/dev/pts/7
= אביזר מתקפל ל-OTBR
משאירים את חלון הטרמינל פתוח ופועל ברקע.
התחלת הדמיה של RCP
פותחים חלון טרמינל חדש כדי להריץ את ה-RCP עם סימולציה, כי צריך להשאיר אותו פועל בזמן ש-OTBR Docker פועל.
באמצעות היציאה הטורית הראשונה בפלט
socat
, אפשר להפעיל את הסימולציה של אפליקציית ה-RCP. לדוגמה, אם משתמשים בפונקציה/dev/pts/2
מהפלט שלsocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
אין פלט מהפקודה הזו. השאירו את חלון הטרמינל פתוח ופועל ברקע.
הפעלת המכל של OTBR ב-Docker
בחלון הטרמינל החדש, מפעילים את OTBR ב-Docker, עם היציאה הטורית השנייה בפלט 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 פועל עכשיו. השאירו את חלון הטרמינל פתוח ופועל ברקע. אם תפסיקו את התהליך או תסגרו את החלון, OTBR יסגור את המסך.