Build e configuração do roteador de borda do OpenThread

Veja o código-fonte no GitHub

Este guia aborda a criação e a configuração básicas do roteador de borda do OpenThread (OTBR). Após a conclusão deste procedimento, você terá um OTBR que funciona como um dispositivo de linha de execução completa (FTD, na sigla em inglês) em um design de RCP.

Configurar plataforma

Configure uma plataforma de hardware compatível:

Criar e atualizar o RCP

O OTBR é executado em um design de RCP. Selecione uma plataforma OpenThread compatível para usar como RCP e siga as instruções de criação e atualização para essa plataforma.

Para ter uma visão geral da criação do OpenThread, consulte o Guia de criação.

Veja instruções específicas sobre a criação de plataformas com suporte no GNU Autotools na pasta da plataforma de cada exemplo.

Instalar a OTBR

A OTBR se comunica com o RCP usando o ícone de carregamento. Para instalar o OTBR na plataforma de hardware configurada, conclua as etapas a seguir.

Clone o repositório OTBR:

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

Instalar dependências

A configuração padrão ativa BORDER_ROUTING para a maioria das plataformas. Para ver uma lista completa de sinalizações padrão de OTBR, consulte os exemplos de plataforma no GitHub. Selecione sua plataforma e clique em default, se disponível.

  • Uso padrão:

    cd ot-br-posix
    ./script/bootstrap
    
  • BeagleBone Black com o Gerenciador de rede (opcional):

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

Compilar e instalar o OTBR

  • Uso padrão. O script de configuração ativa o roteamento de borda por padrão. Para ativar o roteamento de borda, especifique a interface Ethernet ou Wi-Fi da sua plataforma:

    Use Ethernet:

    INFRA_IF_NAME=eth0 ./script/setup
    

    Usar Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • BeagleBone Black Usar o Gerenciador de rede (opcional):

    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/setup
    

Anexar e configurar o dispositivo RCP

Anexe o dispositivo RCP atualizado à plataforma do roteador de borda por USB.

Para configurar a porta serial do dispositivo RCP em otbr-agent, primeiro determine o nome da porta serial do dispositivo RCP verificando /dev:

ls /dev/tty*

Em seguida, verifique suas configurações de otbr-agent.

cd /etc/default
cat otbr-agent

O arquivo de configuração otbr-agent contém o nome da interface da linha de execução, nome da interface Ethernet ou Wi-Fi e nome da porta serial RCP.

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

Nem todos os dispositivos são anexados com o mesmo nome de porta serial. Os nomes de porta mais comuns são ttyACM* e ttyUSB*. Consulte a documentação do dispositivo para saber o nome esperado da porta serial.

Se necessário, atualize o arquivo de configuração otbr-agent. Por exemplo, para uma interface Wi-Fi e um nome de porta serial ttyUSB0:

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

Para atualizar uma interface Ethernet:

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

Reinicie o roteador de borda. Se você estiver usando a plataforma BeagleBone Black, lembre-se de manter o botão BOOT pressionado ao fazer isso.

O serviço OTBR será iniciado na inicialização.

Verificar serviços

Verifique se todos os serviços necessários estão ativados:

sudo systemctl status

Se o script setup for bem-sucedido, os seguintes serviços vão aparecer na saída:

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

Exemplo:

● 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

Se esses serviços estiverem em execução, mas a RPi estiver em um estado degradado, algum outro serviço falhou ao iniciar. Verifique quais:

sudo systemctl --failed

Também é possível verificar cada serviço individualmente:

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

O otbr-web é ativado por padrão para a maioria das plataformas. Se otbr-web não estiver instalado, tente transmitir a sinalização WEB_GUI:

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

Verificar RCP

Verifique se o RCP está no estado correto:

sudo ot-ctl state

ot-ctl é um utilitário de linha de comando fornecido com o OTBR. Ele é usado para se comunicar com a interface PAN Thread (o padrão é wpan0) a que otbr-agent está vinculado no design RCP.

Se o RCP estiver em execução e o nó não for membro de uma rede Thread, a saída será semelhante a esta:

disabled

Se a saída for OpenThread daemon is not running, resolva o problema com o seguinte:

  1. Verifique se o roteador de borda tem energia suficiente (use o adaptador de CA externo adequado).
  2. Desconecte e reconecte a placa RCP à plataforma do roteador de borda.
  3. Verifique se o dispositivo serial RCP está presente. Por exemplo, se o dispositivo precisa ser conectado a /dev/ttyUSB0:

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. Redefina o RCP com sudo ot-ctl reset.

Verifique o status do RCP novamente com sudo ot-ctl state.