เรียกใช้ OTBR Docker

ดูแหล่งที่มาใน GitHub

OpenThread Border Router (OTBR) ต้องใช้โหนด RCP เทรดเพื่อเข้าร่วม เครือข่าย Thread OTBR Docker รองรับทั้ง RCP จริง (OpenThread) ดองเกิล) หรือ RCP จำลอง

หากต้องการเชื่อมต่อ Docker OTBR กับอุปกรณ์เทรดจริงอื่นๆ ให้ใช้ RCP ทางกายภาพ ถ้าคุณต้องการทดสอบการกำหนดเส้นทางเส้นขอบด้วย Thread ที่จำลองขึ้น เครือข่าย ให้ใช้ RCP จำลอง

RCP ทางกายภาพ

ใช้แพลตฟอร์ม OpenThread ใดก็ได้ที่รองรับเพื่อ RCP ทางกายภาพ ดู RCP สร้างและ Flash จากคู่มือการสร้างและการกำหนดค่า Border Router ของ OpenThread เพื่อดูข้อมูลเพิ่มเติม

แนบ RCP

  1. หลังจากสร้างและกะพริบแล้ว ให้ติดอุปกรณ์ RCP เข้ากับเครื่องที่กำลังทำงาน แท่นชาร์จ OTBR ผ่าน USB
  2. ระบุชื่อพอร์ตอนุกรมของอุปกรณ์ RCP โดยตรวจสอบที่ /dev ดังนี้ วันที่
    ls /dev/tty*
    /dev/ttyACMO
    

เริ่มต้นคอนเทนเนอร์ Docker OTBR

ในหน้าต่างเทอร์มินัลใหม่ ให้เริ่ม 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 จะย้าย ลง

ไปที่ทดสอบการเชื่อมต่อเพื่อ ดำเนินการต่อด้วยการตั้งค่า OTBR Docker

RCP จำลอง

ใช้บิลด์ OpenThread RCP จำลองสำหรับ RCP ที่จำลอง วิธีนี้มีประโยชน์หาก คุณต้องการทดสอบการกำหนดเส้นทางเส้นขอบด้วยเครือข่าย Thread ที่จำลองในเครือข่าย Thread อุปกรณ์

สร้างแอปพลิเคชัน RCP จำลอง

  1. โคลนที่เก็บ OpenThread ด้วยคำสั่งต่อไปนี้

    cd ~
    git clone https://github.com/openthread/openthread
    

  2. เปิดระบบและสร้างแอปพลิเคชันจำลอง:

    cd openthread
    ./script/bootstrap
    ./script/cmake-build simulation
    

ตั้งค่าสตรีมข้อมูลแบบ 2 ทิศทาง

ใช้ยูทิลิตีบรรทัดคำสั่ง socat เพื่อสร้างสตรีมข้อมูลแบบ 2 ทิศทาง เพื่อโอนข้อมูลระหว่าง RCP จำลองและ Docker OTBR

  1. เปิดหน้าต่างเทอร์มินัลใหม่เพื่อเรียกใช้กระบวนการนี้ เนื่องจากต้องทำงานอยู่ต่อไป ขณะที่ OTBR Docker ทำงานอยู่

  2. ติดตั้ง socat: วันที่

    sudo apt-get install socat
    

  3. เริ่มต้น 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 จำลองและ RCP ที่ 2 สำหรับ OTBR Docker ในเอาต์พุตตัวอย่าง ด้านบน:

  • /dev/pts/2 = พอร์ต RCP จำลอง
  • /dev/pts/7 = แท่นชาร์จ OTBR

เปิดหน้าต่างเทอร์มินัลนี้ทิ้งไว้และทำงานในเบื้องหลัง

เริ่ม RCP จำลอง

  1. เปิดหน้าต่างเทอร์มินัลใหม่เพื่อเรียกใช้ RCP จำลอง เนื่องจากต้องปล่อยไว้ กำลังทำงานขณะที่ OTBR Docker ทำงานอยู่

  2. เริ่ม 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 โดยใช้พอร์ตอนุกรมที่สองใน เอาต์พุต 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 จะย้าย ลง