Visualizza il codice sorgente su GitHub
Il router di confine OpenThread (OTBR) richiede un nodo RCP Thread per poter accedere a una rete Thread. OTBR Docker fornisce supporto sia per una chiavetta RCP (OpenThread) fisica che per una chiave RCP simulata.
Se vuoi connettere OTBR Docker ad altri dispositivi Thread fisici, utilizza un RCP fisico. Se vuoi testare il routing dei confini con una rete Thread simulata, usa un RCP simulato.
RCP fisico
Utilizza qualsiasi piattaforma OpenThread supportata per l'RCP fisico. Per ulteriori informazioni, consulta il passaggio Build and Flash RCP nella guida alla creazione e alla configurazione del router di confine OpenThread.
Collega il RCP
- Dopo la creazione e il flashing, collega il dispositivo RCP alla macchina che esegue OTBR Docker tramite USB.
- Per determinare il nome della porta seriale del dispositivo RCP, controlla
/dev
:ls /dev/tty*
/dev/ttyACMO
avvia il container Docker OTBR
In una nuova finestra del terminale, avvia OTBR Docker, facendo riferimento alla porta seriale dell'RCP.
Ad esempio, se l'RCP è montato in /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
Se l'operazione riesce, l'output visualizzato dovrebbe essere simile al seguente:
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.
Docker OTBR è ora in esecuzione. Lascia aperta e in esecuzione la finestra del terminale in background. Se esci dal processo o chiudi la finestra, Docker OTBR verrà disattivato.
Vai a Testare la connettività per continuare la configurazione di Docker OTBR.
RCP simulato
Usa una build RCP OpenThread simulata per l'RCP simulato. Questo è utile se vuoi testare il routing dei confini con una rete Thread simulata su una singola macchina.
Crea l'applicazione RCP simulata
Clona il repository OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Esegui il bootstrap e crea l'applicazione simulata:
cd openthread
./script/bootstrap
./script/cmake-build simulation
Configurare uno stream di dati bidirezionale
Utilizza l'utilità a riga di comando socat
per stabilire uno stream di dati bidirezionale
per trasferire i dati tra il Docker OTBR e RCP simulato.
Apri una nuova finestra del terminale per eseguire questo processo, poiché deve essere lasciato in esecuzione mentre è in esecuzione Docker OTBR.
Installa
socat
:sudo apt-get install socat
Avvia
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]
Prendi nota delle due porte seriali in grassetto nell'output. Usa la prima per l'RCP simulato e la seconda per OTBR Docker. Nell'output di esempio sopra:
/dev/pts/2
= porta RCP simulata/dev/pts/7
= Docker OTBR
Lascia questa finestra del terminale aperta e in esecuzione in background.
Avvia l'RCP simulato
Apri una nuova finestra del terminale per eseguire l'RCP simulato, poiché deve essere lasciato in esecuzione mentre Docker OTBR è in esecuzione.
Utilizzando la prima porta seriale nell'output
socat
, avvia l'applicazione RCP simulata. Ad esempio, se utilizzi/dev/pts/2
dall'outputsocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
Nessun output da questo comando. Lascia aperta e in esecuzione la finestra del terminale in background.
avvia il container Docker OTBR
In una nuova finestra del terminale, avvia OTBR Docker utilizzando la seconda porta seriale nell'output socat
. Ad esempio, se utilizzi /dev/pts/7
dall'output 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
Tieni presente che il comando utilizza anche la porta /dev/ttyUSB0
. Questo è il punto di montaggio
predefinito all'interno del container Docker.
Se l'operazione riesce, l'output visualizzato dovrebbe essere simile al seguente:
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.
Docker OTBR è ora in esecuzione. Lascia aperta e in esecuzione la finestra del terminale in background. Se esci dal processo o chiudi la finestra, Docker OTBR verrà disattivato.