Der OpenThread Border Router (OTBR) benötigt einen Thread-RCP-Knoten, um sich mit einem Thread-Netzwerk verbinden zu können. OTBR-Docker bietet Unterstützung für einen physischen RCP (OpenThread-Dongle) oder ein simuliertes RCP.
Wenn Sie OTBR-Docker mit anderen physischen Thread-Geräten verbinden möchten, verwenden Sie einen physischen RCP. Wenn Sie das Border Routing mit einem simulierten Thread-Netzwerk testen möchten, verwenden Sie ein simuliertes RCP.
Physischer RCP
Verwenden Sie eine beliebige unterstützte OpenThread-Plattform für das physische RCP. Weitere Informationen finden Sie im Schritt Build and Flash RCP im Build- und Konfigurationsleitfaden für OpenThread Border Router.
RCP anhängen
- Hängen Sie nach dem Erstellen und Flashen das RCP-Gerät über USB an die Maschine an, auf der OTBR Docker ausgeführt wird.
- Ermitteln Sie den Namen des seriellen Ports für das RCP-Gerät. Prüfen Sie dazu
/dev
:ls /dev/tty*
/dev/ttyACMO
OTBR-Docker-Container starten
Starten Sie OTBR-Docker in einem neuen Terminalfenster und verweisen Sie dabei auf den seriellen Port des RCP.
Wenn das RCP beispielsweise unter /dev/ttyACM0
bereitgestellt wird:
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
Bei Erfolg sollte die Ausgabe in etwa so aussehen:
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 wird jetzt ausgeführt. Lassen Sie dieses Terminalfenster geöffnet und im Hintergrund laufen. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR Docker heruntergefahren.
Rufen Sie Verbindung testen auf, um mit der OTBR-Docker-Einrichtung fortzufahren.
Simulierter RCP
Verwenden Sie einen simulierten OpenThread-RCP-Build für das simulierte RCP. Dies ist nützlich, wenn Sie das Border-Routing mit einem simulierten Thread-Netzwerk auf einem einzelnen Computer testen möchten.
Simulierte RCP-Anwendung erstellen
Klonen Sie das OpenThread-Repository:
cd ~
git clone https://github.com/openthread/openthread
Führen Sie ein Bootstrapping der simulierten Anwendung durch und erstellen Sie sie:
cd openthread
./script/bootstrap
./script/cmake-build simulation
Bidirektionalen Datenstream einrichten
Verwenden Sie das Befehlszeilendienstprogramm socat
, um einen bidirektionalen Datenstream einzurichten, um Daten zwischen dem simulierten RCP und dem OTBR-Docker zu übertragen.
Öffnen Sie ein neues Terminalfenster, um diesen Prozess auszuführen. Er muss während der Ausführung von OTBR-Docker noch weiter ausgeführt werden.
Installieren Sie
socat
:sudo apt-get install socat
socat
starten: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]
Notieren Sie sich die beiden seriellen Ports, die in der Ausgabe fett hervorgehoben sind. Verwenden Sie die erste für das simulierte RCP und die zweite für OTBR-Docker. In der obigen Beispielausgabe gilt Folgendes:
/dev/pts/2
= Simulierter RCP-Port/dev/pts/7
= OTBR-Docker
Lassen Sie dieses Terminalfenster geöffnet und im Hintergrund laufen.
Simulierten RCP starten
Öffnen Sie ein neues Terminalfenster, um das simulierte RCP auszuführen. Es muss noch ausgeführt werden, während OTBR-Docker ausgeführt wird.
Starten Sie die simulierte RCP-Anwendung mit dem ersten seriellen Port in der Ausgabe
socat
. Wenn Sie beispielsweise/dev/pts/2
aus dersocat
-Ausgabe verwenden:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
Von diesem Befehl gibt es keine Ausgabe. Lassen Sie dieses Terminalfenster geöffnet und im Hintergrund laufen.
OTBR-Docker-Container starten
Starten Sie OTBR-Docker in einem neuen Terminalfenster mit dem zweiten seriellen Port in der socat
-Ausgabe. Wenn Sie beispielsweise /dev/pts/7
aus der socat
-Ausgabe verwenden:
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
Beachten Sie, dass der Befehl auch den Port /dev/ttyUSB0
verwendet. Dies ist der Standardbereitstellungspunkt im Docker-Container.
Bei Erfolg sollte die Ausgabe in etwa so aussehen:
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 wird jetzt ausgeführt. Lassen Sie dieses Terminalfenster geöffnet und im Hintergrund laufen. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR Docker heruntergefahren.