נתב 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
- אחרי הבנייה וההבהוב, מחברים את מכשיר ה-RCP למכונה שמריצה OTBR Docker באמצעות 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 ייפתח.
נכנסים ל-Test Connectivity כדי להמשיך בהגדרת 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.
כדי להריץ את התהליך הזה, פותחים חלון טרמינל חדש כי צריך להשאיר אותו פועל בזמן ש-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 ובשני ל-Docker OTBR. בפלט לדוגמה שלמעלה:
/dev/pts/2
= סימולציה של יציאת RCP/dev/pts/7
= Docker מסוג 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
בחלון טרמינל חדש, מפעילים את 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 ייפתח.