OpenThread 邊界路由器 (OTBR) 需要 Thread RCP 節點才能加入 Thread 網路。OTBR Docker 同時支援實體 RCP (OpenThread) Dongle) 或模擬 RCP。
如要將 OTBR Docker 連線至其他實體 Thread 裝置,請使用 實體 RCP如果您要使用模擬的 Thread 測試邊界轉送 請使用模擬 RCP
實體 RCP
針對支援的 OpenThread 平台 實體 RCP請參閱建構及刷新 RCP 按照「OpenThread 邊界路由器建構和設定」指南中的步驟 可能不準確或不適當
安裝 RCP
- 建構並刷新後,將 RCP 裝置連接至執行 透過 USB 執行 OTBR Docker
- 檢查
/dev
,確認 RCP 裝置的序列埠名稱: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 Docker 就會 下降。
前往「測試連線」頁面, 繼續進行 OTBR Docker 設定
模擬 RCP
針對模擬 RCP 使用模擬的 OpenThread RCP 版本。如果您的情況 您想要在單一機器上使用模擬 Thread 網路測試邊界轉送 這類機制更為快速
建構模擬 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]
記下輸出內容中以粗體顯示的兩個序列埠。請使用第一項 和第二個用於 OTBR Docker 的 RCP輸出範例 以上:
/dev/pts/2
= 模擬的 RCP 通訊埠/dev/pts/7
= OTBR Docker
請讓這個終端機視窗在背景中執行。
啟動模擬的 RCP
開啟新的終端機視窗以執行模擬 RCP,因為此視窗必須留空 在 OTBR Docker 執行時運作
使用
socat
輸出內容中的第一個序列埠,啟動模擬的 RCP 應用程式。例如,如果使用socat
輸出內容中的/dev/pts/2
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
這個指令沒有輸出。請將這個終端機視窗保持開啟, 在背景執行
啟動 OTBR Docker 容器
在新終端機視窗中,使用
socat
輸出內容。例如,如果使用 socat
輸出內容中的 /dev/pts/7
:
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 就會 下降。