OpenThread Border Router (OTBR) ต้องใช้โหนด RCP ของ Thread เพื่อเข้าร่วมเครือข่าย Thread OTBR Docker รองรับทั้ง RCP จริง (ดองเกิล OpenThread) หรือ RCP ที่จำลอง
หากต้องการเชื่อมต่อ Docker OTBR กับอุปกรณ์เทรดอื่นๆ ให้ใช้ RCP จริง หากต้องการทดสอบการกำหนดเส้นทาง Border ด้วยเครือข่ายเทรดจำลอง ให้ใช้ RCP จำลอง
RCP ทางกายภาพ
ใช้แพลตฟอร์ม OpenThread ที่รองรับสำหรับ RCP จริง ดูข้อมูลเพิ่มเติมได้ในขั้นตอน Build and Flash RCP จากคู่มือการสร้างและการกำหนดค่า Border Router ของ OpenThread
แนบ RCP
- หลังจากสร้างและแฟลชแล้ว ให้ต่ออุปกรณ์ RCP เข้ากับเครื่องที่ใช้ OTBR Docker ผ่าน USB
- ระบุชื่อพอร์ตซีเรียลของอุปกรณ์ RCP โดยตรวจสอบ
/dev
ls /dev/tty*
/dev/ttyACMO
เริ่มต้นคอนเทนเนอร์ Docker OTBR
ในหน้าต่างเทอร์มินัลใหม่ ให้เริ่ม 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 Docker จะปิดลง
ไปที่ทดสอบการเชื่อมต่อเพื่อดำเนินการต่อในการตั้งค่า OTBR Docker
RCP จำลอง
ใช้บิลด์ RCP ของ OpenThread ที่จำลองสำหรับ RCP ที่จำลอง ซึ่งจะมีประโยชน์หากคุณต้องการทดสอบการกำหนดเส้นทาง Border ด้วยเครือข่ายเทรดจำลองในเครื่องเดียว
สร้างแอปพลิเคชัน RCP ที่จำลอง
โคลนที่เก็บ OpenThread
cd ~
git clone https://github.com/openthread/openthread
เปิดระบบและสร้างแอปพลิเคชันจำลอง:
cd openthread
./script/bootstrap
./script/cmake-build simulation
ตั้งค่าสตรีมข้อมูลแบบ 2 ทิศทาง
ใช้เครื่องมือบรรทัดคำสั่ง socat
เพื่อสร้างสตรีมข้อมูลแบบ 2 ทิศทางเพื่อโอนข้อมูลระหว่าง 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]
จดบันทึกพอร์ตอนุกรม 2 พอร์ตที่ขีดหนาในเอาต์พุต ใช้อันแรกสำหรับ RCP จำลอง และอันที่ 2 สำหรับ OTBR Docker ในตัวอย่างเอาต์พุตด้านบน
/dev/pts/2
= พอร์ต RCP จำลอง/dev/pts/7
= แท่นชาร์จ OTBR
ปล่อยหน้าต่างเทอร์มินัลนี้เปิดอยู่และทำงานในเบื้องหลัง
เริ่ม RCP จำลอง
เปิดหน้าต่างเทอร์มินัลใหม่เพื่อเรียกใช้ RCP ที่จำลอง เนื่องจากต้องเปิดไว้ขณะที่ OTBR Docker ทำงาน
เริ่มแอปพลิเคชัน RCP จำลองโดยใช้พอร์ตอนุกรมแรกในเอาต์พุต
socat
เช่น หากใช้/dev/pts/2
จากเอาต์พุตsocat
ให้ทำดังนี้~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
ไม่มีเอาต์พุตจากคําสั่งนี้ เปิดหน้าต่างเทอร์มินัลนี้ไว้และทำงานในเบื้องหลัง
เริ่มคอนเทนเนอร์ Docker ของ OTBR
ในหน้าต่างเทอร์มินัลใหม่ ให้เริ่ม Docker OTBR โดยใช้พอร์ตอนุกรมที่ 2 ในเอาต์พุต 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 Docker จะปิดลง