Issue with OTBR Setup and sudo ot-ctl Command

Hello,

I am encountering an issue while setting up an OpenThread Border Router (OTBR) using the following hardware:

    nRF52833 board (flashed with RCP firmware)
    nRF52840 board (flashed with CLI firmware)
    Raspberry Pi 3B+

I have followed the official guide OpenThread Border Router Build Native (https://openthread.io/guides/border-router/build-native?hl=fr)  and also referred to OpenThread Hardware Codelab (https://openthread.io/codelabs/openthread-hardware#1) for additional insights.

Steps Taken:

    Flashed the nRF52833 board with RCP firmware and connected it to the Raspberry Pi.
    Flashed the nRF52840 board with CLI firmware and connected it to my PC running Windows with VS Code and the nRF Connect extension.
    Configured the Raspberry Pi (which was reset to a fresh state each time I attempted the setup).

Issue:
The command sudo ot-ctl, which is supposed to allow access to the CLI of the RCP and OTBR, is not functioning correctly. Either the session opens and closes unexpectedly, or I receive a "connection refused" error. For the moments where the sessions allow me to write some instructions, it feels like, despite the 'done' message, these instructions never succeed; my OTBR is not working.

Logs:

● otbr-agent.service - OpenThread Border Router Agent
     Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-07-21 15:47:32 BST; 12s ago
    Process: 8878 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
   Main PID: 8884 (otbr-agent)
      Tasks: 10 (limit: 1568)
        CPU: 151ms
     CGroup: /system.slice/otbr-agent.service
             └─8884 /usr/sbin/otbr-agent "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000" trel://wlan0

Jul 21 15:47:33 raspberrypi otbr-agent[8884]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #763C._meshcop._udp.local: OK
Jul 21 15:47:37 raspberrypi otbr-agent[8884]: 00:00:05.377 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Jul 21 15:47:38 raspberrypi otbr-agent[8884]: 00:00:05.383 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:dc7d, ecn:no, to:0xffff, sec:no, prio:net
Jul 21 15:47:38 raspberrypi otbr-agent[8884]: 00:00:05.384 [I] MeshForwarder-:     src:[fe80:0:0:0:e042:17bf:c86:1a5d]:19788
Jul 21 15:47:38 raspberrypi otbr-agent[8884]: 00:00:05.384 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
Jul 21 15:47:42 raspberrypi otbr-agent[8884]: 00:00:09.770 [I] P-Daemon------: Session socket is ready
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.605 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.613 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:a702, ecn:no, to:0xffff, sec:no, prio:net
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.613 [I] MeshForwarder-:     src:[fe80:0:0:0:e042:17bf:c86:1a5d]:19788
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.613 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788


~

lines 1-20/20 (END)
gg@raspberrypi:~ $ sudo journalctl -u otbr-agent
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.084 [I] Settings------: Read NetworkInfo {rloc:0x6000, extaddr:e24217bf0c861a5d, role:leader, mode:0x0f, version:5, keyseq:0x0, ...
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.084 [I] Settings------: ... pid:0x460b96ea, mlecntr:0x10d08, maccntr:0x109a0, mliid:bc0522ff9d0869ef}
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Settings------: Saved NetworkInfo {rloc:0x6000, extaddr:e24217bf0c861a5d, role:leader, mode:0x0f, version:5, keyseq:0x0, ...
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Settings------: ... pid:0x460b96ea, mlecntr:0x110f1, maccntr:0x10d88, mliid:bc0522ff9d0869ef}
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Notifier------: StateChanged (0x1100102d) [Ip6+ Role LLAddr Rloc+ Ip6Mult+ NetifState ActDset]
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] AnnounceSender: Stopped
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [N] P-Netif-------: Changing interface state to up.
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.095 [I] P-Netif-------: Sent request#6 to delete route 192.168.255.0/24
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.096 [I] P-Netif-------: Deleting route for NAT64
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #763C._meshcop._udp.local.
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-MDNS----: Removing existing service OpenThread BorderRouter #763C._meshcop._udp: outdated
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-MDNS----: Removing service OpenThread BorderRouter #763C._meshcop._udp
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-BA------: Cancelled previous publishing meshcop service OpenThread BorderRouter #763C._meshcop._udp.local
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-MDNS----: Registering service OpenThread BorderRouter #763C._meshcop._udp
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.100 [I] P-Netif-------: Succeeded to process request#1
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.100 [W] P-Netif-------: Failed to process request#2: No such process
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Succeeded to process request#3
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: ADD [U] fe80::e042:17bf:c86:1a5d
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Succeeded to process request#4
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: ADD [U] fdd6:1ce:c5de:6107:bc05:22ff:9d08:69ef
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Succeeded to process request#5
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: ADD [U] fdd6:1ce:c5de:6107:0:ff:fe00:6000
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Host netif is up
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [W] P-Netif-------: Failed to process request#6: No such process
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.107 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:f05d, ecn:no, to:0xffff, sec:no, prio:net
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.107 [I] MeshForwarder-:     src:[fe80:0:0:0:e042:17bf:c86:1a5d]:19788
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.107 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.124 [I] P-Netif-------: Message dropped by Thread
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff33:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff32:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff02::16
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff02::2 (rejected)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] Notifier------: StateChanged (0x00001000) [Ip6Mult+]
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff33:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff32:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff02::16 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff02::2 (rejected)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.313 [I] P-Netif-------: Message dropped by Thread
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff33:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff32:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff02::16 (already subscribed, ignored)
lines 1-48



Additional Log:

gg@raspberrypi:~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800'
./build/posix/src/posix/ot-daemon[603]: Running OPENTHREAD/thread-reference-2023 0706-1496-g3019d3c6c; POSIX; Jul 21 2025 08:24:37
./build/posix/src/posix/ot-daemon[603]: Thread version: 5
./build/posix/src/posix/ot-daemon[603]: 49d.17:05:56.088 [C] Platform------: Init() at spinel_driver.cpp:87: Failure


 and 
 
gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent status
● otbr-agent.service - OpenThread Border Router Agent
     Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-07-21 10:06:29 BST; 2s ago
    Process: 9743 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
   Main PID: 9749 (otbr-agent)
      Tasks: 1 (limit: 1579)
        CPU: 76ms
     CGroup: /system.slice/otbr-agent.service
             └─9749 /usr/sbin/otbr-agent -I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM0 trel://eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Backbone interface: eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Running 0.3.0-43082df
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Thread version: 1.4.0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Thread interface: wpan0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyACM0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Radio URL: trel://eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-ILS-----: Infra link selected: eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [INFO]-RCP_HOS-: OpenThread log level changed to 4
Jul 21 10:06:31 raspberrypi otbr-agent[9749]: 49d.17:33:37.491 [W] P-SpinelDrive-: Wait for response timeout
Jul 21 10:06:31 raspberrypi otbr-agent[9749]: 49d.17:33:37.492 [I] P-SpinelDrive-: co-processor self reset successfully


Apologies if this log is potentially out of context, but I have been unable to recreate the "spinel_driver.cpp:87" error and this is the only relevant log I have on hand regarding a recognizable error.

Additional Information:

    I have verified that the correct firmware versions are flashed on both the nRF52833 and nRF52840 boards and the correct port is selected (ls /dev/ttyACM*)


    The Raspberry Pi is configured according to the official guide.


    I previously succeeded in setting up this OTBR (with numerous issues along the way) using the same hardware. I saved the Raspberry Pi image on my computer and was able to reuse this image without any problems, which rules out any hardware issues for me. Now, I am trying to start over from scratch to facilitate the reproducibility of an OTBR on these boards for my company but find myself stuck.

Question:
Has anyone encountered a similar issue? Are there any additional steps or configurations that I might have missed?

Thank you for your assistance.

Best regards,

Parents Reply Children
  • Hi Amanda,

    Thank you for your response.

    I am using NCS version 3.0.0. I am connecting port J2 of my nRF52833DK to the Raspberry Pi. I just tried connecting port J3 as indicated by the user in the case you shared, but it seems like the board is not even powered. I must be doing something wrong ?

    Although I am trying to set the nRF52833 as RCP and the nRF52840 as CLI, I flashed the nRF52840 (with the 52840 build conf.) as RCP just to test, and it didn't change anything. I also tried using pyspinel (https://github.com/openthread/pyspinel.git) but that didn't work either.

  • Issue:
    The command sudo ot-ctl, which is supposed to allow access to the CLI of the RCP and OTBR, is not functioning correctly. Either the session opens and closes unexpectedly, or I receive a "connection refused" error. For the moments where the sessions allow me to write some instructions, it feels like, despite the 'done' message, these instructions never succeed; my OTBR is not working.

    I got a similar issue during the testing, and fixed it by restarting OTBR. 

    Could you follow the steps in the Installing OTBR manually (Raspberry Pi) and Running OTBR using Docker?

    I get the log like this 

    amhs@raspberrypi:~$ sudo service otbr-agent status
    ● otbr-agent.service - OpenThread Border Router Agent
         Loaded: loaded (/usr/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
         Active: active (running) since Fri 2025-07-25 13:12:54 MST; 8s ago
        Process: 3363 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
       Main PID: 3369 (otbr-agent)
          Tasks: 1 (limit: 3853)
         Memory: 920.0K (peak: 2.0M)
            CPU: 170ms
         CGroup: /system.slice/otbr-agent.service
                 └─3369 /usr/sbin/otbr-agent -I wpan0 -B eth0 "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000"
    
    Jul 25 13:06:45 raspberrypi otbr-agent[3275]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #C97A._meshcop._udp
    Jul 25 13:06:45 raspberrypi otbr-agent[3275]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #C97A._meshcop._udp.local: OK
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.576 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.580 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:78ab, ecn:no, to:0xffff, sec:no, prio:net
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.581 [I] MeshForwarder-:     src:[fe80:0:0:0:a0a7:fb6:e2e5:c97a]:19788
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.581 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.218 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.224 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:43e7, ecn:no, to:0xffff, sec:no, prio:net
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.224 [I] MeshForwarder-:     src:[fe80:0:0:0:a0a7:fb6:e2e5:c97a]:19788
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.224 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
    amhs@raspberrypi:~$ sudo ot-ctl state
    detached
    Done
    amhs@raspberrypi:~$ sudo ot-ctl state
    leader
    Done
    amhs@raspberrypi:~$ sudo ot-ctl commissioner start
    Commissioner: petitioning
    Done
    amhs@raspberrypi:~$ sudo ot-ctl commissioner state
    active
    Done

  • I tried to follow the steps of https://docs.nordicsemi.com/bundle/ncs-3.0.0/page/nrf/protocols/thread/tools.html#running_otbr_using_docker without Docker for the moment, and this is all I got :

    (here all the command line from a new SD card with a clean environment)

    gg@raspberrypi:~ $ sudo apt update
    
    gg@raspberrypi:~ $ sudo apt upgrade
    
    gg@raspberrypi:~ $ sudo apt install git
    
    gg@raspberrypi:~ $ git clone --depth=1 https://github.com/openthread/ot-br-posix
    
    gg@raspberrypi:~ $ cd ot-br-posix
    
    gg@raspberrypi:~/ot-br-posix $ git pull –unshallow
    
    gg@raspberrypi:~/ot-br-posix $ git checkout fbde28a
    
    gg@raspberrypi:~/ot-br-posix $ ./script/bootstrap
    
    gg@raspberrypi:~/ot-br-posix $ INFRA_IF_NAME=eth0 ./script/setup

    Here, some errors appear:

    [ … ]
    
    otbr_uninstall
    
    + have systemctl
    
    + command -v systemctl
    
    + sudo systemctl stop otbr-web
    
    Failed to stop otbr-web.service: Unit otbr-web.service not loaded.
    
    + true
    
    + sudo systemctl stop otbr-agent
    
    Failed to stop otbr-agent.service: Unit otbr-agent.service not loaded.
    
    + true
    
    + sudo systemctl disable otbr-web
    
    Failed to disable unit: Unit file otbr-web.service does not exist.
    
    + true
    
    + sudo systemctl disable otbr-agent
    
    Failed to disable unit: Unit file otbr-agent.service does not exist.
    
    + true
    
    + sudo systemctl is-enabled otbr-web
    
    Failed to get unit file state for otbr-web.service: No such file or directory
    
    + sudo systemctl is-enabled otbr-agent
    
    Failed to get unit file state for otbr-agent.service: No such file or directory
    
    + sudo killall otbr-web otbr-agent
    
    otbr-web: no process found
    
    otbr-agent: no process found
    
    [ … ]
    
    + sudo systemctl stop otbr-firewall
    
    Failed to stop otbr-firewall.service: Unit otbr-firewall.service not loaded.
    
    + true
    
    + have systemctl
    
    + command -v systemctl
    
    + sudo systemctl disable otbr-firewall
    
    Failed to disable unit: Unit file otbr-firewall.service does not exist.
    
    + true
    
    + have update-rc.d
    
    + command -v update-rc.d
    
    + sudo update-rc.d otbr
    
    [ … ]

    But I continue the guide :

    gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent status
    
    ○ otbr-agent.service - OpenThread Border Router Agent
    
    Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
    
    Active: inactive (dead)

    I modified the file as the guide told me to:

    gg@raspberrypi:~/ot-br-posix $ sudo nano /etc/default/otbr-agent
    
    # Default settings for otbr-agent. This file is sourced by systemd
    
    # Options to pass to otbr-agent
    
    OTBR_AGENT_OPTS="spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000"
    
    OTBR_NO_AUTO_ATTACH=0
    
    gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent status
    
    ● otbr-agent.service - OpenThread Border Router Agent
    
    Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
    
    Active: active (running) since Mon 2025-07-28 10:32:50 BST; 1min 9s ago
    
    Process: 19418 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
    
    Main PID: 19424 (otbr-agent)
    
    Tasks: 1 (limit: 1568)
    
    CPU: 138ms
    
    CGroup: /system.slice/otbr-agent.service
    
    └─19424 /usr/sbin/otbr-agent "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000"
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.148 [I] P-Netif-------: Deleting route for NAT64
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.148 [I] P-McastRtMgr--: Disable: OK
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #7C07._meshcop._udp.local.
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [I] RouterTable---: Route table
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [I] P-Netif-------: Host netif is down
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [I] P-Netif-------: Succeeded to process request#1
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [W] P-Netif-------: Failed to process request#2: No such process
    
    Jul 28 10:32:51 raspberrypi otbr-agent[19424]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #7C07._meshcop._udp
    
    Jul 28 10:32:51 raspberrypi otbr-agent[19424]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #7C07._meshcop._udp.local: OK
    
    Jul 28 10:32:51 raspberrypi otbr-agent[19424]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #7C07._meshcop._udp.local: OK

    The guide tells me: "enter the OpenThread directory »

    with : cd modules/lib/openthread

    but I can't find this:

    gg@raspberrypi:~/ot-br-posix $ cd modules/lib/openthread

    -bash: cd: modules/lib/openthread: No such file or directory

    And: "Install the OpenThread dependencies:"

    with: ./script/bootstrap

    I already did "./script/bootstrap" in the ot-br-posix directory, so I guess I can ignore these steps.

    Let's continue the guide.

    gg@raspberrypi:~/ot-br-posix $./script/cmake-build posix
    
    gg@raspberrypi:~/ot-br-posix $./script/cmake-build posix -DOT_DAEMON=ON

    But here I got an error :

    gg@raspberrypi:~/ot-br-posix $ sudo ./build/posix/src/posix/ot-daemon 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000' --verbose -B eth0
    
    sudo: ./build/posix/src/posix/ot-daemon: command not found

    and

    gg@raspberrypi:~/ot-br-posix $ sudo ./build/posix/src/posix/ot-cli 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000' --verbose -B eth0
    
    sudo: ./build/posix/src/posix/ot-cli: command not found

    So I checked the status. :

    gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent status
    
    ● otbr-agent.service - OpenThread Border Router Agent
    
    Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
    
    Active: active (running) since Mon 2025-07-28 10:32:50 BST; 14min ago
    
    Process: 19418 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
    
    Main PID: 19424 (otbr-agent)
    
    Tasks: 1 (limit: 1568)
    
    CPU: 274ms
    
    CGroup: /system.slice/otbr-agent.service
    
    └─19424 /usr/sbin/otbr-agent "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000"
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.148 [I] P-Netif-------: Deleting route for NAT64
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.148 [I] P-McastRtMgr--: Disable: OK
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #7C07._meshcop._udp.local.
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [I] RouterTable---: Route table
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [I] P-Netif-------: Host netif is down
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [I] P-Netif-------: Succeeded to process request#1
    
    Jul 28 10:32:50 raspberrypi otbr-agent[19424]: 00:00:00.149 [W] P-Netif-------: Failed to process request#2: No such process
    
    Jul 28 10:32:51 raspberrypi otbr-agent[19424]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #7C07._meshcop._udp
    
    Jul 28 10:32:51 raspberrypi otbr-agent[19424]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #7C07._meshcop._udp.local: OK
    
    Jul 28 10:32:51 raspberrypi otbr-agent[19424]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #7C07._meshcop._udp.local: OK

    Try to set the OTBR despite the errors. :

    gg@raspberrypi:~/ot-br-posix $ sudo ot-ctl
    
    state
    
    disabled
    
    Done
    
    dataset init new
    
    Done
    
    dataset commit active
    
    Done
    
    ifconfig upup
    
    Done
    
    thread start
    
    Done
    
    > read: Connection reset by peer [rejected at this moment]

    I tried restarting the agent like you said

    gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent restart
    
    gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent status
    
    ● otbr-agent.service - OpenThread Border Router Agent
    
    Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
    
    Active: active (running) since Mon 2025-07-28 10:51:51 BST; 18s ago
    
    Process: 20104 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
    
    Main PID: 20114 (otbr-agent)
    
    Tasks: 1 (limit: 1568)
    
    CPU: 133ms
    
    CGroup: /system.slice/otbr-agent.service
    
    └─20114 /usr/sbin/otbr-agent "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000"
    
    Jul 28 10:51:56 raspberrypi otbr-agent[20114]: 00:00:05.287 [I] MeshForwarder-: src:[fe80:0:0:0:a0d6:d070:8061:7c07]:19788
    
    Jul 28 10:51:56 raspberrypi otbr-agent[20114]: 00:00:05.287 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:2]:19788
    
    Jul 28 10:52:01 raspberrypi otbr-agent[20114]: 00:00:10.652 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
    
    Jul 28 10:52:01 raspberrypi otbr-agent[20114]: 00:00:10.660 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:24c6, ecn:no, to:0xffff, sec:no, prio:net
    
    Jul 28 10:52:01 raspberrypi otbr-agent[20114]: 00:00:10.660 [I] MeshForwarder-: src:[fe80:0:0:0:a0d6:d070:8061:7c07]:19788
    
    Jul 28 10:52:01 raspberrypi otbr-agent[20114]: 00:00:10.660 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:2]:19788
    
    Jul 28 10:52:06 raspberrypi otbr-agent[20114]: 00:00:15.768 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
    
    Jul 28 10:52:06 raspberrypi otbr-agent[20114]: 00:00:15.775 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:9e1d, ecn:no, to:0xffff, sec:no, prio:net
    
    Jul 28 10:52:06 raspberrypi otbr-agent[20114]: 00:00:15.776 [I] MeshForwarder-: src:[fe80:0:0:0:a0d6:d070:8061:7c07]:19788
    
    Jul 28 10:52:06 raspberrypi otbr-agent[20114]: 00:00:15.776 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:2]:19788

    [Notice that the error in the first status has disappeared]

    gg@raspberrypi:~/ot-br-posix $ sudo ot-ctl
    
    state
    
    detached
    
    Done
    
    > dataset init new
    
    Done
    
    > dataset commit active
    
    Done

    [at this moment I was  rejected ]

    Did I miss something? Do you want me to try using Docker this time? Thanks for your help

  • Resolved ?

    I also try with docker :

    sudo apt update && sudo apt install docker.io
    
    sudo systemctl start docker
    
    sudo docker network create --ipv6 --subnet fd11:db8:1::/64 -o com.docker.network.bridge.name=otbr0 otbr
    
    gg@raspberrypi:~ $ docker pull nrfconnect/otbr:fbde28a
    
    permission denied while trying to connect to the Docker daemon socket at unix:// /var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/creat e?fromImage=nrfconnect%2Fotbr&tag=fbde28a": dial unix /var/run/docker.sock: conn ect: permission denied
    
    sudo usermod -aG docker $USER
    
    [restarting the rasp]
    
    gg@raspberrypi:~ $ docker pull nrfconnect/otbr:fbde28a
    
    gg@raspberrypi:~ $ sudo modprobe ip6table_filter
    
    gg@raspberrypi:~ $sudo docker run -it --rm --privileged --name otbr --network otbr -p 8080:80 \
    
    --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
    
    --volume /dev/ttyACM0:/dev/radio nrfconnect/otbr:fbde28a --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000

    Open http://192.168.181.170:8080/ from my Windows 11 on the same network as the Raspberry Pi.

    On-Mesh Prefix :

    fd11:22::

    on a new windows :

    gg@raspberrypi:~ $ sudo ip -6 route add fd11:22::/64 dev otbr0 via fd11:db8:1::2
    
    gg@raspberrypi:~ $ sudo docker exec -it otbr sh -c "sudo service otbr-agent status"
    
    * otbr-agent is running
    
    gg@raspberrypi:~ $ sudo docker exec -it otbr sh -c "sudo ot-ctl state"
    
    disabled
    
    Done

    I got this on my first window.:

    Jul 28 14:28:14 41ef5f72c412 otbr-agent[199]: 00:08:30.721 [I] P-Daemon------: Session socket is ready
    
    Jul 28 14:28:14 41ef5f72c412 otbr-agent[199]: 00:08:30.721 [D] Cli-----------: Input: state
    
    Jul 28 14:28:14 41ef5f72c412 otbr-agent[199]: 00:08:30.721 [D] Cli-----------: Output: disabled
    
    Jul 28 14:28:14 41ef5f72c412 otbr-agent[199]: 00:08:30.722 [D] Cli-----------: Output: Done
    
    Jul 28 14:31:32 41ef5f72c412 otbr-agent[199]: 00:11:49.163 [I] P-Daemon------: Session socket is ready
    
    Jul 28 14:31:32 41ef5f72c412 otbr-agent[199]: 00:11:49.163 [D] Cli-----------: Input: state
    
    Jul 28 14:31:32 41ef5f72c412 otbr-agent[199]: 00:11:49.163 [D] Cli-----------: Output: disabled
    
    Jul 28 14:31:32 41ef5f72c412 otbr-agent[199]: 00:11:49.163 [D] Cli-----------: Output: Done
    
    Jul 28 14:31:32 41ef5f72c412 otbr-agent[199]: 00:11:49.163 [W] P-Daemon------: Failed to write CLI output: Broken pipe
    
    Jul 28 14:32:06 41ef5f72c412 otbr-agent[199]: 00:12:23.089 [I] P-Daemon------: Session socket is ready
    
    Jul 28 14:32:06 41ef5f72c412 otbr-agent[199]: 00:12:23.089 [D] Cli-----------: Input: state
    
    Jul 28 14:32:06 41ef5f72c412 otbr-agent[199]: 00:12:23.089 [D] Cli-----------: Output: disabled
    
    Jul 28 14:32:06 41ef5f72c412 otbr-agent[199]: 00:12:23.089 [D] Cli-----------: Output: Done

    Because I don't fully understand what the tutorial wants me to do, I modified the last command to enter in ot-ctl command line mode.

    gg@raspberrypi:~ $ sudo docker exec -it otbr sh -c "sudo ot-ctl"
    
    dataset init new
    
    Done
    
    > dataset commit active
    
    Done
    
    > ifconfig up
    
    Done
    
    > thread start
    
    Done
    
    > state
    
    leader
    
    Done
    
    > dataset active -x
    
    0e08000000000001000000030000154a0300000f35060004001fffe0020800bf797a202ab0ae0708fd110dc8cb9ec73805102cf5188b107f7498b33d572d868027eb030f4f70656e5468726561642d653239610102e29a04106abb091034759e9789fa422d95c1f2a80c0402a0f7f8
    
    Done

    At this moment, I plug my nRF52840 with CLI firmwares. Here is my terminal in VS Code.

    uart:~$ *** Booting nRF Connect SDK v3.0.0-3bfc46578e42 ***
    
    *** Using Zephyr OS v4.0.99-3e0ce7636fa6 ***
    
    ot dataset set active 0e08000000000001000000030000154a0300000f3506000400
    
    1fffe0020800bf797a202ab0ae0708fd110dc8cb9ec73805102cf5188b107f7498b33d572d868027
    
    eb030f4f70656e5468726561642d653239610102e29a04106abb091034759e9789fa422d95c1f2a8
    
    0c0402a0f7f8
    
    Done
    
    uart:~$ ot state
    
    disabled
    
    Done
    
    uart:~$ ot dataset commit active
    
    Done
    
    uart:~$ ot ifconfig up
    
    Done
    
    uart:~$ ot thread start
    
    Done
    
    uart:~$ ot state
    
    detached
    
    Done
    
    uart:~$ ot state
    
    child
    
    Done
    
    uart:~$ ot router table
    | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
    +----+--------+----------+-----------+-------+--------+-----+------------------+------+
    | 45 | 0xb400 |       63 |         0 |     0 |      0 |   0 | e6e6b9e783753af3 |    0 |
    | 55 | 0xdc00 |       63 |         0 |     3 |      3 |  13 | 7a32f8d576ba3b66 |    1 |

    on the windows with ot-ctl command line:

    > state
    leader
    Done
    
    neighbor table
    | Role | RLOC16 | Age | Avg RSSI | Last RSSI |R|D|N| Extended MAC     | Version |
    +------+--------+-----+----------+-----------+-+-+-+------------------+---------+
    |   R  | 0xb400 |   7 |      -51 |       -54 |1|1|1| e6e6b9e783753af3 |       5 |
    
    Done

    At the moment I am writing this, my OTBR has been running for 30 minutes without any problems. It looks like we have resolved my issue. But why didn't the first solution work?

  • Happy to see it works as expected. 

    Germain B said:
    why didn't the first solution work?

    I think it might be related to this

    Germain B said:

    The guide tells me: "enter the OpenThread directory »

    with : cd modules/lib/openthread

    but I can't find this:

    gg@raspberrypi:~/ot-br-posix $ cd modules/lib/openthread

    -bash: cd: modules/lib/openthread: No such file or directory

    And: "Install the OpenThread dependencies:"

    with: ./script/bootstrap

    I already did "./script/bootstrap" in the ot-br-posix directory, so I guess I can ignore these steps.

    Let's continue the guide.

    The modules\lib\openthread is under NCS.

    The bootstrap is under modules\lib\openthread\script.

Related