Сборка и настройка пограничного маршрутизатора OpenThread

Посмотреть исходный код на GitHub

В этом руководстве описывается базовая сборка и настройка пограничного маршрутизатора OpenThread (OTBR). По завершении этой процедуры у вас будет OTBR, который функционирует как полнопоточное устройство (FTD) в конструкции RCP.

Настроить платформу

Настройте поддерживаемую аппаратную платформу:

Сборка и прошивка RCP

OTBR работает по схеме RCP. Выберите поддерживаемую платформу OpenThread для использования в качестве RCP и следуйте инструкциям по сборке и обновлению для этой платформы.

Обзор сборки OpenThread см. в Руководстве по сборке .

Конкретные инструкции по созданию поддерживаемых платформ с помощью GNU Autotools можно найти в папке платформы каждого примера.

Установить ОТБР

OTBR связывается с RCP через шпинель. Чтобы установить OTBR на настроенную аппаратную платформу, выполните следующие действия.

Клонируйте репозиторий OTBR:

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

Установить зависимости

Конфигурация по умолчанию включает BORDER_ROUTING для большинства платформ. Полный список флагов OTBR по умолчанию см. в примерах платформ на GitHub . Выберите свою платформу, затем нажмите default , если доступно.

  • Использование по умолчанию:

    cd ot-br-posix
    ./script/bootstrap
    
  • BeagleBone Black с сетевым менеджером (опционально):

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

Скомпилируйте и установите OTBR

  • Использование по умолчанию. Сценарий установки по умолчанию включает пограничную маршрутизацию. Чтобы включить пограничную маршрутизацию, укажите интерфейс Ethernet или Wi-Fi вашей платформы:

    Используйте Ethernet:

    INFRA_IF_NAME=eth0 ./script/setup
    

    Используйте Wi-Fi:

    INFRA_IF_NAME=wlan0 ./script/setup
    
  • БиглБоун Блэк . Используйте сетевой менеджер (необязательно):

    NETWORK_MANAGER=1 NETWORK_MANAGER_WIFI=1 ./script/setup
    

Подключите и настройте устройство RCP

Подключите прошитое устройство RCP к платформе Border Router через USB.

Чтобы настроить последовательный порт устройства RCP в otbr-agent , сначала определите имя последовательного порта для устройства RCP, проверив /dev :

ls /dev/tty*

Далее проверьте настройки вашего otbr-agent .

cd /etc/default
cat otbr-agent

Файл конфигурации otbr-agent содержит имя вашего интерфейса Thread, имя интерфейса Ethernet или Wi-Fi и имя последовательного порта RCP.

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

Не все устройства подключаются с одинаковым именем последовательного порта. Наиболее распространенные имена портов — ttyACM* и ttyUSB* . Обратитесь к документации вашего устройства, чтобы определить ожидаемое имя последовательного порта.

При необходимости обновите файл конфигурации otbr-agent . Например, для интерфейса Wi-Fi и имени последовательного порта ttyUSB0 :

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

Чтобы обновить интерфейс Ethernet:

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

Выключите и включите пограничный маршрутизатор. Если вы используете платформу BeagleBone Black, не забудьте при этом удерживать кнопку BOOT .

Служба OTBR должна запуститься при загрузке.

Проверить услуги

Убедитесь, что все необходимые службы включены:

sudo systemctl status

Если сценарий setup прошел успешно, в выходных данных появятся следующие службы:

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

Например:

● 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

Если эти службы работают, но RPi находится в ухудшенном состоянии, значит, не удалось запустить какую-то другую службу. Проверьте, какие:

sudo systemctl --failed

Вы также можете проверить каждую услугу отдельно:

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

otbr-web включен по умолчанию для большинства платформ . Если otbr-web не установлен, попробуйте передать флаг WEB_GUI :

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

Проверить RCP

Убедитесь, что RCP находится в правильном состоянии:

sudo ot-ctl state

ot-ctl — это утилита командной строки, входящая в состав OTBR. Он используется для связи с интерфейсом Thread PAN (по умолчанию — wpan0 ), к которому привязан otbr-agent в проекте RCP.

Если RCP успешно запущен и узел не является членом сети потоков, выходные данные должны быть аналогичны приведенным ниже:

disabled

Если в результате выводится сообщение о том, что OpenThread daemon is not running , устраните неполадки, выполнив следующие действия:

  1. Убедитесь, что пограничный маршрутизатор имеет достаточную мощность (используйте соответствующий внешний адаптер переменного тока).
  2. Отсоедините и снова подключите плату RCP к платформе пограничного маршрутизатора.
  3. Убедитесь, что последовательное устройство RCP присутствует. Например, если устройство должно быть подключено к /dev/ttyUSB0 :

    ls /dev/ttyUSB*
    /dev/ttyUSB0
    
  4. Сбросьте RCP с помощью sudo ot-ctl reset .

Еще раз проверьте статус RCP с помощью sudo ot-ctl state .