Building OTBR Locally#

The purpose of this document is to provide comprehensive steps and guidance on building an OpenThread Border Router (OTBR) that communicates with the Co-Processor Communication Daemon (CPCd). This guide aims to assist developers and engineers in setting up and configuring an OTBR to enhance network communication and management. By following the outlined procedures, you can use the OTBR in a multiprotocol context. For reference on hardware or software requirements, refer to the local host configuration and co-processor configuration.

Install OTBR Repository#

OpenThread host applications can be built from the Silicon Labs Simplicity SDK. Silicon Labs provides a vendor extension to build an OpenThread Linux host application with multi-PAN and CPC support.

Start by cloning the SDK:

git clone https://github.com/SiliconLabsSoftware/sisdk-release.git

Check out the desired SDK branch. This guide uses the sisdk-2026.6 branch.

In this document, $SDK_DIR refers to the location the above repo is checked out. Set the SDK directory environment variable:

export SDK_DIR=<absolute path to the SDK checkout>

Silicon Labs maintains both openthread and ot-br-posix as forks of their respective upstream projects. To make the changes transparent, the SDK package ships the following under $SDK_DIR/openthread_stack/:

  • README.md — overview of the patch files and how to inspect or apply them

  • openthread.patch — diff between the upstream openthread base commit and the Silicon Labs fork

  • ot-br-posix.patch — diff between the upstream ot-br-posix base commit and the Silicon Labs fork

  • upstream-commits — the upstream base commit for each repository

  • CHANGELOG.md — per-release summary of fork changes relative to upstream

The upstream commit SHAs are also listed in the Silicon Labs OpenThread Release Notes. You can use the patch files to inspect exactly what Silicon Labs changed, reproduce the diff independently, or apply it to your own fork with git apply.

Install the required host package:

sudo apt-get install bind9

For steps on setting up and running CPCd, refer to Building CPCd locally.

Building OTBR#

Before you build OTBR, ensure the OpenThread repo at $SDK_DIR/openthread_stack/util/third_party/openthread is symlinked under $SDK_DIR/openthread_stack/util/third_party/ot-br-posix/third_party/openthread/repo. If the symlink does not exist, create it:

ln -s $SDK_DIR/openthread_stack/util/third_party/openthread \
  $SDK_DIR/openthread_stack/util/third_party/ot-br-posix/third_party/openthread/repo

Configuration Options Reference#

Starting with SiSDK 2026.6, the bootstrap and setup scripts accept explicit environment variables that control which service implementations are compiled in. Set these variables consistently to both the bootstrap and setup steps.

The tables below list all environment variables supported by ./script/bootstrap and ./script/setup. Variables shared by both scripts must be set to the same value for each script.

Note: In this section, RCP and NCP refer to the co-processor firmware type. For CPC-based multiprotocol builds, both cases compile in DOT_MULTIPAN_RCP=ON and can be considered RCP-CPC and NCP-CPC co-processors. This distinction affects which service implementations are used on the host side.

./script/bootstrap

bootstrap resolves system package dependencies. These variables control which optional packages are installed.

Variable

Repo Default

RCP Default

NCP Default

Description

Values

OTBR_MDNS

openthread

openthread

mDNSResponder

Select mDNS implementation

openthread, mDNSResponder

OTBR_DHCP6_PD_CLIENT

none

dhcpcd

dhcpcd

Select DHCPv6 Prefix Delegation client

none, dhcpcd, openthread

NAT64

1

1

1

Install NAT64-related packages (iptables, bind9)

0, 1

NAT64_SERVICE

openthread

openthread

tayga

Select NAT64 translator implementation

openthread, tayga

BACKBONE_ROUTER

1

1

1

Install backbone router library packages (libnetfilter-queue etc.)

0, 1

FIREWALL

1

1

1

Install firewall packages (ipset etc.)

0, 1

WEB_GUI

0

0

0

Install web GUI dependencies (nodejs, npm)

0, 1

REFERENCE_DEVICE

0

0

0

Install reference device packages (radvd, dnsutils, iperf3, ndisc6 etc.)

0, 1

OT_BACKBONE_CI

0

0

0

Install additional packages required for backbone CI testing (dnsutils etc.)

0, 1

./script/setup#

setup builds and installs the border router. These variables govern which Thread features are compiled in and how the infrastructure link is configured.

Variable

Repo Default

RCP Default

NCP Default

Description

Values

INFRA_IF_NAME

wlan0

Valid interface

Valid interface

Infrastructure network interface name

Any valid interface, e.g. eth0, wlan0

OTBR_MDNS

openthread

openthread

mDNSResponder

mDNS implementation compiled into otbr-agent

openthread, mDNSResponder

OTBR_DHCP6_PD_CLIENT

none

dhcpcd

dhcpcd

DHCPv6 PD client compiled in; dhcpcd or openthread also enables -DOTBR_DHCP6_PD=ON

none, dhcpcd, openthread

NAT64

1

1

1

Enable NAT64 support (-DOTBR_NAT64=ON)

0, 1

NAT64_SERVICE

openthread

openthread

tayga

NAT64 dataplane translator

openthread, tayga

NAT64_DYNAMIC_POOL

192.168.255.0/24

192.168.255.0/24

192.168.255.0/24

IPv4 address pool for the OpenThread NAT64 translator; passed as -DOT_POSIX_NAT64_CIDR

Any valid CIDR

BORDER_ROUTING

1

1

1

Enable Thread border routing (IPv6 RA install/forwarding)

0, 1

BACKBONE_ROUTER

1

1

1

Enable Thread Backbone Router feature (-DOTBR_BACKBONE_ROUTER=ON)

0, 1

DISCOVERY_PROXY

1

1

1

Enable DNS-SD discovery proxy; automatically disabled when BORDER_ROUTING=0

0, 1

FIREWALL

1

1

1

Install and enable the otbr-firewall init service (-DOT_FIREWALL=ON/OFF)

0, 1

WEB_GUI

0

0

0

Build the OTBR web management UI (-DOTBR_WEB=ON)

0, 1

REST_API

0

0

0

Build the OTBR REST API (-DOTBR_REST=ON)

0, 1

REFERENCE_DEVICE

0

0

0

Build as a Thread certification reference device; sets -DOT_REFERENCE_DEVICE=ON, -DOTBR_NO_AUTO_ATTACH=1, and related flags

0, 1

OTBR_VENDOR_NAME

OpenThread

OpenThread

OpenThread

Vendor name advertised by the OTBR service (-DOTBR_VENDOR_NAME)

Any string

OTBR_PRODUCT_NAME

BorderRouter

BorderRouter

BorderRouter

Product name advertised by the OTBR service (-DOTBR_PRODUCT_NAME)

Any string

OTBR_OPTIONS

(unset)

(see build command)

(see build command)

Additional CMake -D flags appended verbatim to the build command

Any valid CMake flags

Note: OTBR_MDNS=avahi is deprecated as of SiSDK 2026.6 and is not recommended.

Build Steps#

Note: The values shown below are what Silicon Labs builds the host with when qualifying our co-processor for certification. Alternate values are supported — if your integration requires a different combination, try the available options. For example, if your ecosystem relies on mDNSResponder, set OTBR_MDNS=mDNSResponder independently.

Set up the required environment variables before running any build commands (if not already set):

export THREAD_DIR=$SDK_DIR/openthread        # Silicon Labs OpenThread PAL (contains platform-abstraction/)
export CPCD_DIR=<absolute path to the cpc-daemon directory>

For the following steps, we will run from the included version of the ot-br-posix in the Silicon Labs SDK, at:

cd $SDK_DIR/openthread_stack/util/third_party/ot-br-posix/

Step 1: Run the bootstrap script

For RCP:

sudo OTBR_MDNS=openthread OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 NAT64_SERVICE=openthread \
  ./script/bootstrap

For NCP:

sudo OTBR_MDNS=mDNSResponder OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 NAT64_SERVICE=tayga \
  ./script/bootstrap

Step 2: Copy the Silicon Labs configuration header

To configure the OTBR for multi-PAN and CPC support, copy the Silicon Labs-specific configuration header into the ot-br-posix OpenThread source tree:

sudo cp $THREAD_DIR/platform-abstraction/posix/openthread-core-silabs-posix-config.h \
  $SDK_DIR/openthread_stack/util/third_party/openthread/src/posix/platform/

Note: This configuration header overrides many settings to recommended values from the certifiable OTBR configuration. Review the file for any settings specific to your scenario.

Step 3: Run the setup script

Both RCP and NCP CPC builds require -DOT_MULTIPAN_RCP=ON. Adjust INFRA_IF_NAME to match your network interface (eth0 for Ethernet, wlan0 for Wi-Fi).

For RCP:

sudo INFRA_IF_NAME=eth0 OTBR_MDNS=openthread OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 \
  NAT64_SERVICE=openthread \
  OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON \
  -DCPCD_SOURCE_DIR=$CPCD_DIR \
  -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON \
  -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$THREAD_DIR/platform-abstraction/posix/posix_vendor_rcp.cmake \
  -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$THREAD_DIR/platform-abstraction/posix/cpc_interface.cpp \
  -DOT_CLI_VENDOR_EXTENSION=$THREAD_DIR/platform-abstraction/posix/posix_vendor_cli.cmake \
  -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h \
  -DOTBR_DUA_ROUTING=ON -DOTBR_DHCP6_PD=ON" \
  ./script/setup

For NCP:

sudo INFRA_IF_NAME=eth0 OTBR_MDNS=mDNSResponder OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 \
  NAT64_SERVICE=tayga \
  OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON \
  -DCPCD_SOURCE_DIR=$CPCD_DIR \
  -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON \
  -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$THREAD_DIR/platform-abstraction/posix/posix_vendor_rcp.cmake \
  -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$THREAD_DIR/platform-abstraction/posix/cpc_interface.cpp \
  -DOT_CLI_VENDOR_EXTENSION=$THREAD_DIR/platform-abstraction/posix/posix_vendor_cli.cmake \
  -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h \
  -DOTBR_DUA_ROUTING=ON -DOTBR_DHCP6_PD=ON" \
  ./script/setup

NCP Mode Limitations#

When OpenThread runs on the NCP, the border router does not forward DNS queries from Thread devices to upstream resolvers on the infrastructure link, so upstream DNS forwarding is not supported in NCP mode. Product flows where the border router must resolve arbitrary Internet names for Thread clients are out of scope for this release. If you need assistance implementing upstream DNS forwarding or integrating a host-side DNS forwarder into an NCP OTBR platform image, please contact Silicon Labs support.

Troubleshooting — Missing .default-version file: If CMake reports an error such as:

file failed to open for reading: .../third_party/openthread/repo/.default-version

Create the missing file manually from the root of ot-br-posix before re-running setup:

echo "0.01.00" > ./third_party/openthread/repo/.default-version

Some key build flags used in the setup command:

  • -DOT_THREAD_VERSION: Thread protocol version to build against (e.g., 1.4).

  • -DOT_MULTIPAN_RCP=ON: Enables multi-PAN RCP support.

  • -DOT_POSIX_RCP_VENDOR_BUS=ON: Enables the vendor RCP bus.

  • -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE: Path to the vendor CMake package file. For multiprotocol CPC builds this is posix_vendor_rcp.cmake. (In earlier releases this was referred to as SilabsRcpDeps.)

  • -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE: Path to the vendor RCP interface source file. For multiprotocol CPC builds this is cpc_interface.cpp.

  • -DOT_PLATFORM_CONFIG: Path to openthread-core-silabs-posix-config.h.

Note: Earlier SDK releases (SiSDK 2025.12 and earlier) included -DOTBR_SRP_ADVERTISING_PROXY=ON and -DOTBR_DNSSD_DISCOVERY_PROXY=ON explicitly in the setup command. Starting with SiSDK 2026.6, these are derived automatically from the OTBR_MDNS choice:

  • When OTBR_MDNS=openthread (RCP default): the native OpenThread stack handles SRP advertising and DNS-SD discovery directly. The external proxy options default OFF and are not needed.

  • When OTBR_MDNS=mDNSResponder (NCP default): OTBR_SRP_ADVERTISING_PROXY is automatically set to ON by the build system, since mDNSResponder requires it. You do not need to pass it explicitly.

If you are maintaining build scripts from older SDK releases, you can safely remove those flags when targeting SiSDK 2026.6 and later.

To link against the CPC library and headers, it is recommended that CPCd is first built and installed. The OpenThread CMake projects will automatically resolve these dependencies using pkgconfig or by searching in standard installation directories. If CPCd is not installed, the library path and include directory can be specified as CMake arguments (-DCpc_LIBRARY and -DCpc_INCLUDE_DIR respectively), or the root path to the cpc-daemon project can be specified as a CMake argument (-DCPCD_SOURCE_DIR).

Note: Host applications can be built using CMake only; make is unsupported.

Note: To clear or update your build space, run sudo rm -rf build/.

OTBR Configuration Changes for Child and Source Match Tables#

Starting with the 2025.12.0 release, the sizing logic for child and source match tables has been decoupled. The number of entries in the source match table now depends on a combination of:

  • The configured maximum number of children (OPENTHREAD_CONFIG_MLE_MAX_CHILDREN)

  • The build type (single-instance, multi-instance, or CMP)

  • The number of OpenThread network instances or protocol stacks included in the build (for example, OpenThread and Zigbee in a CMP setup)

The total number of source-match entries is sized to support all child devices across the enabled protocol stacks. In practice, this corresponds to the number of OpenThread children across all OT instances, plus any Zigbee end-device children when CMP is enabled:

total entries ≈ (MLE children × OT instances) + (Zigbee children, only when CMP is enabled)

This can be adjusted at build time using:

-DOPENTHREAD_CONFIG_MLE_MAX_CHILDREN=10

-DSL_ZIGBEE_MAX_END_DEVICE_CHILDREN=6

-DOPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE=1
-DOPENTHREAD_CONFIG_MULTIPLE_INSTANCE_NUM=2

Note: Use SL_ZIGBEE_MAX_END_DEVICE_CHILDREN only if Zigbee runs alongside OT (CMP).

Note: Use OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_* only if you're intentionally running multiple OT instances in the same host.

Configuration of the OTBR#

Once the OTBR has been successfully built, you need to modify the Radio URL to point to the correct CPCd iid. Note these instructions use: -DOT_MULTIPAN_RCP=ON meaning the OTBR was built for a multi-PAN RCP, this requires us to include both iid and iid-list values. Both Zigbeed and the OpenThread stack can connect to CPCd and use the multi-PAN RCP at one time. Spinel messages for each application are labeled with a Spinel Interface ID (IID), which is supplied to the application at startup via the OpenThread Radio URL command line argument. The fact that the RCP is being shared between multiple PANs is transparent to the host applications.

-Multi-PAN RCP (ex: Zigbee RCP + OT RCP): OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+cpc://cpcd_0?iid=2&iid-list=0". This indicates the OT RCP interface will respond to IID=2.

  • Zigbee NCP + OT RCP: OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+cpc://cpcd_0?iid=0&iid-list=0". The Zigbee NCP does not use Spinel thus the multi-PAN interface (IID) can be set to 0.

/etc/default/otbr-agent is the configuration file where you can update the Radio URL as follows:

sudo vi /etc/default/otbr-agent 
OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+cpc://cpcd_0?iid=2&iid-list=0"

To confirm that the OTBR is correctly running, you can access its CLI utility by executing sudo ot-ctl.

OTBR Build Commands for SDK Versions#

The following are reference OTBR build commands for previous releases. Set $SDK_DIR, $THREAD_DIR, and $CPCD_DIR as described in Build Steps before running.

SiSDK 2026.6 - Thread 1.4#

The commands below use the new OTBR_MDNS, OTBR_DHCP6_PD_CLIENT, and NAT64_SERVICE environment variables mandated in this release. See Build Environment Variables for a full explanation.

Bootstrap and setup must use matching values for these variables. The $THREAD_DIR and $CPCD_DIR variables must be set before running (see Build Environment Variables).

RCP:

Bootstrap:

sudo OTBR_MDNS=openthread OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 NAT64_SERVICE=openthread \
  ./script/bootstrap

Setup:

sudo INFRA_IF_NAME=eth0 OTBR_MDNS=openthread OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 \
  NAT64_SERVICE=openthread \
  OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON \
  -DCPCD_SOURCE_DIR=$CPCD_DIR \
  -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON \
  -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$THREAD_DIR/platform-abstraction/posix/posix_vendor_rcp.cmake \
  -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$THREAD_DIR/platform-abstraction/posix/cpc_interface.cpp \
  -DOT_CLI_VENDOR_EXTENSION=$THREAD_DIR/platform-abstraction/posix/posix_vendor_cli.cmake \
  -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h \
  -DOTBR_DUA_ROUTING=ON -DOTBR_DHCP6_PD=ON" \
  ./script/setup

NCP:

Bootstrap:

sudo OTBR_MDNS=mDNSResponder OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 NAT64_SERVICE=tayga \
  ./script/bootstrap

Setup:

sudo INFRA_IF_NAME=eth0 OTBR_MDNS=mDNSResponder OTBR_DHCP6_PD_CLIENT=dhcpcd NAT64=1 \
  NAT64_SERVICE=tayga \
  OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON \
  -DCPCD_SOURCE_DIR=$CPCD_DIR \
  -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON \
  -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$THREAD_DIR/platform-abstraction/posix/posix_vendor_rcp.cmake \
  -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$THREAD_DIR/platform-abstraction/posix/cpc_interface.cpp \
  -DOT_CLI_VENDOR_EXTENSION=$THREAD_DIR/platform-abstraction/posix/posix_vendor_cli.cmake \
  -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h \
  -DOTBR_DUA_ROUTING=ON -DOTBR_DHCP6_PD=ON" \
  ./script/setup

Note: NCP support wasn't present in the older releases.

SiSDK 2025.12 - Thread 1.4#

sudo INFRA_IF_NAME=eth0 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$SDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$SDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DHCP6_PD=ON" ./script/setup

SiSDK 2025.06 - Thread 1.4#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=0 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NAT64=1 DHCPV6_PD=0 WEB_GUI=0 REST_API=0 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$SDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$SDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON -DOTBR_TREL=ON -DOTBR_DHCP6_PD=ON" ./script/setup

SiSDK 2024.12 - Thread 1.4#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=0 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NETWORK_MANAGER=0 NAT64=1 DNS64=1 DHCPV6_PD=0 WEB_GUI=0 REST_API=0 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.4 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR  -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON -DOTBR_TREL=ON -DOTBR_DHCP6_PD=ON" ./script/setup

SiSDK 2024.06 - Thread 1.3#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=0 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NETWORK_MANAGER=0 NAT64=1 DNS64=1 DHCPV6_PD=0 WEB_GUI=0 REST_API=0 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.3 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$SDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$SDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON -DOTBR_TREL=ON -DOTBR_DHCP6_PD=ON" ./script/setup

GSDK v4.4.3#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NAT64=1 DNS64=1 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.3 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_RCP_VENDOR_BUS=ON -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_PROJECT_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON" ./script/setup

GSDK v4.4.2#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NAT64=1 DNS64=1 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.3 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_CONFIG_RCP_BUS=VENDOR -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON" ./script/setup

GSDK v4.4.1, v4.4.0#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NAT64=1 DNS64=1 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.3 -DOT_MULTIPAN_RCP=ON -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_RCP_VENDOR_BUS=ON -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/posix_vendor_rcp.cmake -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON" ./script/setup

GSDK v4.3.3, v4.3.2#

sudo INFRA_IF_NAME=eth0 RELEASE=1 REFERENCE_DEVICE=1 BACKBONE_ROUTER=1 BORDER_ROUTING=1 NAT64=1 DNS64=1 OTBR_OPTIONS="-DOT_THREAD_VERSION=1.3 -DOT_MULTIPAN_RCP=ON -DCMAKE_MODULE_PATH=$GSDK_DIR/protocol/openthread/platform-abstraction/posix -DCPCD_SOURCE_DIR=$CPCD_DIR -DOT_POSIX_CONFIG_RCP_BUS=VENDOR -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=SilabsRcpDeps -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$GSDK_DIR/protocol/openthread/platform-abstraction/posix/cpc_interface.cpp -DOT_CONFIG=openthread-core-silabs-posix-config.h -DOTBR_DUA_ROUTING=ON -DOTBR_DNSSD_DISCOVERY_PROXY=ON -DOTBR_SRP_ADVERTISING_PROXY=ON" ./script/setup 

Building OT-CLI#

This command builds the POSIX ot-cli application using CMake (a separate OT host application from otbr-agent). Run from the util/third_party/openthread directory of the SDK, with $THREAD_DIR and $CPCD_DIR set as described in Build Steps:

sudo ./script/cmake-build posix \
  -DOT_MULTIPAN_RCP=ON \
  -DOT_POSIX_RCP_HDLC_BUS=ON -DOT_POSIX_RCP_SPI_BUS=ON -DOT_POSIX_RCP_VENDOR_BUS=ON \
  -DCPCD_SOURCE_DIR=$CPCD_DIR \
  -DOT_POSIX_CONFIG_RCP_VENDOR_INTERFACE=$THREAD_DIR/platform-abstraction/posix/cpc_interface.cpp \
  -DOT_POSIX_CONFIG_RCP_VENDOR_DEPS_PACKAGE=$THREAD_DIR/platform-abstraction/posix/posix_vendor_rcp.cmake \
  -DOT_PLATFORM_CONFIG=openthread-core-silabs-posix-config.h