כדי להצטרף לרשת Thread, נתב גבולות של OpenThread (OTBR) צריך צומת RCP של Thread. Docker מסוג OTBR תומך גם ב-RCP פיזי (מתאם OpenThread) וגם ב-RCP מדומה.
אם רוצים לחבר את OTBR Docker למכשירי Thread פיזיים אחרים, צריך להשתמש ב-RCP פיזי. אם רוצים לבדוק ניתוב גבולות באמצעות רשת Thread מדומה, צריך להשתמש ב-RCP מדומה.
RCP פיזי
משתמשים בכל פלטפורמת OpenThread נתמכת ל-RCP הפיזי. מידע נוסף זמין בשלב פיתוח וטעינה של RCP במדריך לפיתוח והגדרה של OpenThread Border Router.
צירוף ה-RCP
- אחרי ה-build וה-flash, מחברים את מכשיר ה-RCP למכונה שפועלת עם OTBR Docker באמצעות USB.
- בודקים את השם של יציאת ה-serial של מכשיר ה-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 פועל עכשיו. משאירים את חלון הטרמינל פתוח ופועל ברקע. אם תצאו מהתהליך או תסגרו את החלון, OTBR Docker ייסגר.
עוברים אל בדיקת הקישוריות כדי להמשיך בהגדרת Docker של OTBR.
RCP מדומה
משתמשים ב-build של OpenThread RCP מדומה ל-RCP המדומה. האפשרות הזו שימושית אם רוצים לבדוק ניתוב גבולות באמצעות רשת Thread מדומה במכונה אחת.
פיתוח גרסת build של אפליקציית RCP המדומה
משכפלים את המאגר של OpenThread:
cd ~
git clone https://github.com/openthread/openthread
מפעילים את האפליקציה המדומה ומפתחים אותה:
cd openthread
./script/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 הראשון להדמיה של RCP, וב-RCP השני ל-OTBR Docker. בפלט לדוגמה שלמעלה:
/dev/pts/2
= סימולציה של יציאת RCP/dev/pts/7
= OTBR Docker
משאירים את חלון הטרמינל הזה פתוח ופועל ברקע.
הפעלת ה-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 פועל עכשיו. משאירים את חלון הטרמינל הזה פתוח ופועל ברקע. אם יוצאים מהתהליך או סוגרים את החלון, ה-Docker OTBR ייפתח.