OpenThread 邊界路由器 (OTBR) 需要 Thread RCP 節點才能加入 Thread 網路。OTBR Docker 同時支援實體 RCP (OpenThread 轉接器) 或模擬 RCP。
如要將 OTBR Docker 連線至其他實體 Thread 裝置,請使用實體 RCP。如果您想使用模擬的 Thread 網路測試邊界路由,請使用模擬的 RCP。
實體 RCP
請為實體 RCP 使用任何支援的 OpenThread 平台。如需更多資訊,請參閱 OpenThread Border Router 建構和設定指南中的「建構並閃燈 RCP」步驟。
附加 RCP
- 建構及閃燈後,請透過 USB 將 RCP 裝置連接至執行 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 就會關閉。
模擬 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]
請記下輸出內容中以粗體顯示的兩個序列埠。請使用第一個值用於模擬的 RCP,第二個則用於 OTBR Docker。在上述輸出內容範例中:
/dev/pts/2
= 模擬 RCP 通訊埠/dev/pts/7
= OTBR Docker
請將這個終端機視窗保持在背景中執行。
啟動模擬的 RCP
請開啟新的終端機視窗來執行模擬的 RCP,因為在 OTBR Docker 執行時,必須讓 RCP 繼續執行。
使用
socat
輸出內容中的第一個序列埠,啟動模擬的 RCP 應用程式。舉例來說,如果使用socat
輸出的/dev/pts/2
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
這個指令不會產生任何輸出內容。請將這個終端機視窗保持開啟狀態,並在背景執行。
啟動 OTBR Docker 容器
在新終端機視窗中,使用 socat
輸出內容中的第二個序列埠啟動 OTBR Docker。舉例來說,如果要使用 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 就會關閉。