Compilación y configuración del router de borde OpenThread

Ver el código fuente en GitHub

En esta guía, se abordan la compilación y configuración básicas del router de borde de OpenThread (OTBR). Una vez completado este procedimiento, tendrás un OTBR que funciona como un dispositivo de hilo completo (FTD) en un diseño de RCP.

Configura la plataforma

Configura una plataforma de hardware compatible:

Compila y escribe en la memoria flash el RCP

OTBR se ejecuta en un diseño RCP. Selecciona una plataforma OpenThread compatible para usarla como RCP y sigue las instrucciones de compilación y actualización de esa plataforma.

Para obtener una descripción general de la compilación de OpenThread, consulta la guía de compilación.

Puedes encontrar instrucciones específicas para compilar plataformas compatibles con GNU Autotools en la carpeta de la plataforma de cada ejemplo.

Instala OTBR

OTBR se comunica con el RCP a través de Spinel. Para instalar OTBR en la plataforma de hardware configurada, completa los siguientes pasos.

Clona el repositorio OTBR:

git clone https://github.com/openthread/ot-br-posix

Instala dependencias

La configuración predeterminada habilita BORDER_ROUTING para la mayoría de las plataformas. Para obtener una lista completa de las marcas predeterminadas de OTBR, consulta los ejemplos de plataformas en GitHub. Selecciona tu plataforma y, luego, haz clic en default, si está disponible.

  • Uso predeterminado:

    cd ot-br-posix
    ./script/bootstrap
    
  • BeagleBone Black con Network Manager (opcional):

    cd ot-br-posix
    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/bootstrap
    

Compila e instala OTBR

  • Uso predeterminado. La secuencia de comandos de configuración habilita el enrutamiento de borde de forma predeterminada. Para habilitar el enrutamiento de borde, especifica la interfaz Ethernet o Wi-Fi de tu plataforma:

    Usa Ethernet:

    INFRA_IF_NAME=eth0 ./script/setup
    

    Usa Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • BeagleBone Black. Usa el Administrador de red (opcional):

    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/setup
    

Cómo conectar y configurar el dispositivo RCP

Conecta el dispositivo RCP con la plataforma del router de borde a través de USB.

Para configurar el puerto serie del dispositivo RCP en otbr-agent, primero determina el nombre del puerto serie del dispositivo RCP verificando /dev:

ls /dev/tty*

A continuación, revisa la configuración de otbr-agent.

cd /etc/default
cat otbr-agent

El archivo de configuración otbr-agent contiene el nombre de la interfaz de Thread, el nombre de la interfaz de Ethernet o Wi-Fi, y el nombre del puerto en serie de RCP.

OTBR_AGENT_OPTS="-I wpan0 -B OTBR_INFRA_IF_NAME spinel+hdlc+uart:///dev/ttyACM0 trel://OTBR_INFRA_IF_NAME"

No todos los dispositivos se conectan con el mismo nombre de puerto serie. Los nombres de puerto más comunes son ttyACM* y ttyUSB*. Consulta la documentación de tu dispositivo para determinar el nombre del puerto serie esperado.

Si es necesario, actualiza el archivo de configuración otbr-agent. Por ejemplo, para una interfaz Wi-Fi y un nombre de puerto en serie de ttyUSB0:

OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB0 trel://wlan0"

Para actualizar una interfaz Ethernet, haz lo siguiente:

OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0"

Reinicia el router de borde. Si usas la plataforma BeagleBone Black, recuerda mantener presionado el botón BOOT mientras lo haces.

El servicio de OTBR debería iniciarse durante el inicio.

Verifica los servicios

Verifica que todos los servicios obligatorios estén habilitados:

sudo systemctl status

Si la secuencia de comandos setup se ejecutó de forma correcta, los siguientes servicios aparecerán en el resultado:

  • mdns.service
  • otbr-agent.service
  • otbr-web.service

Por ejemplo:

● raspberrypi
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Thu 1970-01-01 00:00:01 UTC; 47 years 7 months ago
   CGroup: /
           ├─user.slice
           │ └─user-1000.slice
           │   ├─user@1000.service
           │   │ └─init.scope
           │   │   ├─576 /lib/systemd/systemd --user
           │   │   └─580 (sd-pam)
           │   └─session-c1.scope
           │     ├─480 /bin/login --
           │     └─585 -bash
           ├─init.scope
           │ └─1 /sbin/init
           └─system.slice
             ├─systemd-timesyncd.service
             │ └─334 /lib/systemd/systemd-timesyncd
             ├─dbus.service
             │ └─339 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             ├─hciuart.service
             │ └─442 /usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow -
             ├─ssh.service
             │ └─621 /usr/sbin/sshd -D
             ├─avahi-daemon.service
             │ ├─341 avahi-daemon: running [raspberrypi.local]
             │ └─361 avahi-daemon: chroot helper
  # enabled  ├─otbr-web.service
             │ └─472 /usr/sbin/otbr-web
             ├─triggerhappy.service
             │ └─354 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*
             ├─systemd-logind.service
             │ └─353 /lib/systemd/systemd-logind
  # enabled  ├─otbr-agent.service
             │ └─501 /usr/sbin/otbr-agent -I wpan0
             ├─cron.service
             │ └─350 /usr/sbin/cron -f
             ├─systemd-udevd.service
             │ └─154 /lib/systemd/systemd-udevd
             ├─rsyslog.service
             │ └─345 /usr/sbin/rsyslogd -n
             ├─bluetooth.service
             │ └─445 /usr/lib/bluetooth/bluetoothd
  # enabled  ├─mdns.service
             │ └─725 /usr/sbin/mdnsd
             ├─systemd-journald.service
             │ └─136 /lib/systemd/systemd-journald
             └─dhcpcd.service
               ├─409 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
               └─466 /sbin/dhcpcd -q -w

Si esos servicios están en ejecución, pero la RPi está en un estado degradado, significa que algún otro servicio no se pudo iniciar. Verifica lo siguiente:

sudo systemctl --failed

También puedes verificar cada servicio de forma individual:

sudo service mdns status
sudo service otbr-agent status
sudo service otbr-web status

otbr-web está habilitado de forma predeterminada para la mayoría de las plataformas. Si otbr-web no está instalado, intenta pasar la marca WEB_GUI:

WEB_GUI=1 ./script/bootstrap
INFRA_IF_NAME=wlan0 WEB_GUI=1 ./script/setup

Verifica el RCP

Verifica que el RCP esté en el estado correcto:

sudo ot-ctl state

ot-ctl es una utilidad de línea de comandos que se proporciona con OTBR. Se usa para comunicarse con la interfaz de PAN de Thread (el valor predeterminado es wpan0) a la que está vinculado otbr-agent en el diseño de RCP.

Si el RCP se ejecuta de forma correcta y el nodo no es miembro de una red de Thread, el resultado debería ser similar al siguiente:

disabled

Si el resultado es OpenThread daemon is not running, sigue estos pasos para solucionar el problema:

  1. Verifica que el router de borde tenga suficiente energía (usa el adaptador de CA externo correcto).
  2. Desconecta y vuelve a conectar la placa RCP a la plataforma del router de borde.
  3. Verifica que el dispositivo serie RCP esté presente. Por ejemplo, si el dispositivo debe estar conectado a /dev/ttyUSB0:

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. Restablece el RCP con sudo ot-ctl reset.

Vuelve a verificar el estado de RCP con sudo ot-ctl state.