openthread-br and matter-netman: pending-dataset migration, full NIM cluster data - #53
openthread-br and matter-netman: pending-dataset migration, full NIM cluster data#53LorbusChris wants to merge 12 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request enhances the matter-netman service on OpenWrt to fully support the Network Infrastructure Manager (NIM) cluster set using real system data. Key updates include publishing a 'matter' ubus object for onboarding and commissioning control, integrating real-time diagnostics for Wi-Fi, Thread, and Ethernet clusters, and migrating the OpenThread border router agent to a netifd protocol handler. Feedback on these changes identifies a build issue in the Makefile due to an invalid $(INSTALL_CONF) macro, potential information leaks and globbing bugs in the init script's reload logic, and a deprecated -a shell operator in the RCP script.
b0c79de to
50a0964
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request refactors the OpenThread Border Router (OTBR) agent configuration on OpenWrt by moving it to a netifd protocol handler (thread-proto.sh) and implements real data providers for the NIM clusters (Wi-Fi, Thread, and Ethernet diagnostics). It also publishes a new 'matter' ubus object to expose commissioning status and control. The review feedback is highly constructive, pointing out that in multi-interface setups, ot-ctl needs to be directed to the correct socket path. It suggests introducing an otctl helper function in thread-proto.sh to ensure commands are routed correctly based on the active device.
50a0964 to
dd5bab4
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request integrates the full Network Infrastructure Manager (NIM) cluster set for OpenWrt, including Wi-Fi Network Management, Thread Network Diagnostics, Thread Network Directory, and Ethernet Network Diagnostics. It also updates the openthread-br package to support pending datasets, asynchronous provisioning/deprovisioning, and publishing a matter ubus object. The feedback recommends avoiding the suppression of stderr from the RCP discovery tool in thread-proto.sh to facilitate debugging.
dd5bab4 to
116342a
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request updates the matter-netman service and openthread-br package to improve Thread network management and integration with OpenWrt. Key changes include migrating to a new netifd protocol for Thread, implementing asynchronous ubus calls for provisioning, and adding a matter ubus object for commissioning. I have reviewed the code and identified two issues: a potential race condition in the protocol handler that could permanently block the interface at boot, and an unsafe string comparison in the OsReleaseField helper that could lead to undefined behavior.
116342a to
a8c3077
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request integrates the Matter Network Infrastructure Manager (NIM) service with OpenWrt, enabling full support for Thread Border Router Management, Wi-Fi Network Management, and diagnostics clusters. It replaces the legacy procd service for otbr-agent with a native netifd protocol handler (thread) and introduces a series of patches to OpenThread Border Router (OTBR) and the Matter daemon to support asynchronous provisioning, pending datasets, and local commissioning control via a published Ubus object. The review feedback highlights two shell scripting issues: a syntax error in thread-proto.sh due to unsupported default value syntax in json_get_vars, and a potential false positive in the hotplug script when matching unconfigured backbone networks.
a8c3077 to
79885b9
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces comprehensive improvements to the Matter Network Infrastructure Manager (NIM) and OpenThread Border Router (OTBR) integration on OpenWrt. Key changes include migrating the OTBR service to a native netifd protocol handler (thread), implementing full NIM cluster support (Wi-Fi Network Management, Thread Network Diagnostics, Thread Network Directory, and Ethernet Network Diagnostics) backed by real system data via ubus, publishing a matter ubus object for local commissioning control, and resolving several commissioning-flow issues such as asynchronous provisioning and fail-safe revert guarding. Additionally, the openthread-br package is updated, and several patches are introduced to enhance dataset handling, mDNS hostname advertising, and robustness. As there are no review comments, no further feedback is provided.
79885b9 to
07049b4
Compare
|
Hi @LorbusChris, thanks for this PR, it looks like a very substantial piece of work! I will have a detailed look next week. In regards to upstreaming my OTBR patches, yes, I’m going through our company internal contribution review process at the moment, so I should be able to upstream them in a few weeks time. |
caee27d to
015a51b
Compare
015a51b to
cc2895b
Compare
cc2895b to
61503f7
Compare
ca1a4a7 to
ffa5a80
Compare
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems> (cherry picked from commit c2dfe5d)
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems> (cherry picked from commit 2358537)
Moves the pin forward from 9e56492e past the v2026.08.0 tag to the 2026-08-23 tip of main (42e5846d), which includes the host groundwork this feed previously carried as a patch (openthread/ot-br-posix#3489, merged). Drop OTBR_SRP_ADVERTISING_PROXY. The 2026.07.0 release turned the OT core Advertising Proxy on by default whenever OTBR_MDNS is set, and the two are mutually exclusive, so forcing the POSIX proxy on now fails configure with "Only one Advertising Proxy can be enabled." Dropping the flag adopts the OT core proxy, which is upstream's default build. The mDNS provider is unchanged; both the mDNSResponder and avahi variants keep their own responder. OTBR_PRODUCT_NAME is not needed even though vendor and model are mandatory now, because otbr-agent.init already passes --model-name from board.json at runtime. 020-external-mbedtls stopped applying with strict context at 2026.07.0. A three way apply resolves every hunk without conflict, so it is refreshed with no change in what it does. The other build patches and the whole ubus series apply unchanged, as nothing upstream touched src/openwrt/ubus in that range. PKG_MIRROR_HASH is regenerated for the new tarball. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
The ubus surface can form a Thread network but cannot change one that is already running. Replacing the credentials or the channel of a live network has to go through the pending dataset, so every node switches together when the delay timer expires rather than being orphaned. The host groundwork rides the pin now: openthread/ot-br-posix#3489 is merged and the snapshot contains it. The ubus series (100-106, 110) is regenerated on that snapshot — the readiness-notification support (openthread/ot-br-posix#3478) moved the context of its first patch — with authorship preserved in the patch headers. New patches continue the series, generated with git format-patch from the upstream branch: - 130-135: the ubus methods — provision through the host abstraction, set_pending forwarding to ThreadHost::ScheduleMigration() (MGMT_PENDING_SET), a pending_dataset_changed notification, a deprovision method (detach + erase; gentler than factory-reset leave, needed for Matter's RevertActiveDataset()), respond to provision once the join is under way, and threadstart/threadstop through the host abstraction. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Opus 5
This release rejects it outright: configure fails with "OTBR_MDNS=avahi is no longer supported", so the variant has stopped being buildable and only mDNSResponder remains. With no backend choice left there is nothing for the variants to vary, and openthread-br becomes a single package selecting mDNSResponder explicitly. Assisted-By: Claude Fable 5
Enable the border router feature set the other packagings build with: OT_BORDER_ROUTER for the management surface the ubus methods sit on, the channel manager and monitor so a channel can be changed and judged at runtime, and the SRP server's auto-enable. The REST API is switched off explicitly rather than by relying on the upstream default, since nothing here consumes it and it would listen on the infrastructure interface. Assisted-By: Claude Fable 5
The Matter Thread Network Diagnostics cluster needs a router table, which the neighbour list does not cover: a leader with a populated mesh has routers it is not a direct neighbour of. The neighbour rows also carry two mandatory frame counters that otNeighborInfo has had all along. Stacked on the ubus method series; see the openthread-br patch table for what is proposed upstream and what is carried here. Assisted-By: Claude Opus 5
Move the pin from 2026-07-30 to b7912017, so the carried patches are generated against the tree they are proposed to, and drop what the pin now contains: the ubus watch no longer re-registers while shutting down (project-chip/connectedhomeip#73343), which patch 044 carried, and the netlink fixes this feed depended on without carrying (project-chip/connectedhomeip#73557, #73560). The version moves with the source date, so PKG_RELEASE starts over at 1. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
The delegate advertised no PANChange support and answered SetPendingDataset and RevertActiveDataset with NOT_IMPLEMENTED, so a controller could form a Thread network through it but never change one already running, and a fail-safe expiry left the border router holding a dataset the controller had abandoned. With the ubus methods added to openthread-br, the delegate can now report PANChange, invoke set_pending to schedule a migration and deprovision to revert, and serve the pending dataset that status and pending_dataset_changed report. 030 also implements RevertActiveDataset in the fake delegate, so fail-safe rollback can be exercised without hardware. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
Patch 038 replaces the demo stubs behind the NIM device type with live router state: the Wi-Fi Network Management cluster shares the LAN access point credentials read from netifd (guest networks excluded; wifi_share, wifi_network and wifi_iface in /etc/config/matter adjust or disable the sharing), Thread Network Diagnostics is fed from otbr-agent over ubus, the Thread Network Directory is seeded with the border router own network, and Ethernet Network Diagnostics reports the uplink counters. The service gains a procd reload trigger on wireless/network config changes that pokes the daemon over ubus, and the ubusd ACL grants the matter user read access to exactly network.wireless status. Applying a new ubusd ACL needs a ubusd restart, which breaks clients holding the old connection (rpcd, lighttpd, foris) - a reboot after install is the clean path. Patch 035 first puts the example's OpenWrt integration behind a backend interface, so the patches that follow land as backend code rather than as conditional blocks in main.cpp; it is proposed upstream on its own, stacked on project-chip/connectedhomeip#73309. Assisted-By: Claude Fable 5
010-zap-disable-arl removes the ReviewFabricRestrictions commands from the checked-in data model. It has no effect on what the device does: the Access Control cluster is written in code and ignores its ZAP input entirely — the kManagedDevice feature bit, the Arl and CommissioningARL attributes and the command dispatch are all hardcoded under #if CHIP_CONFIG_USE_ACCESS_RESTRICTIONS (access-control-cluster.cpp:507, :552-554, :591), and the example provider is instantiated under the same guard. What actually turns the feature off is --enable-access-restrictions=no in CONFIGURE_OPTIONS, which has been there since the same commit that added this patch. That still holds, so removing the patch changes nothing except one less file to rebase. Assisted-By: Claude Opus 5
Four more patches out of the network-manager branch, from an audit of what this node tells a controller against what it can actually establish. - CONFIG_BUILD_FOR_HOST_UNIT_TEST is off, so the encoder keeps the range check the specification requires of a device rather than of a test host - ProductName comes from the distribution name in /etc/os-release, with the product_name uci option to override; it read as an empty string before - BorderRouterName comes from the host name rather than being the same literal on every unit, which makes a mesh with more than one border router readable - ThreadVersion and InterfaceEnabled come from otbr rather than a constant and a guess at what a configured dataset implies - the Thread state cached from otbr-agent is dropped when it goes away, instead of being reported as current - SecurityPolicy, ChannelPage0Mask, the route table and the neighbour frame counters are served instead of encoded as null, empty or zero - the Ethernet counters answer with zero rather than a Failure status when they are switched off, ResetCounts does what it says, and RebootCount counts reboots of the router rather than restarts of this daemon Assisted-By: Claude Opus 5
The Thread Network Directory kept every network this node had ever been on. An entry is a whole operational dataset, network key included, readable by any commissioned fabric; Thread Border Router Management only returns the current one, so a superseded network's key was reachable through the directory and nowhere else. On a router that offers credential rotation that is a key the operator believes they have replaced. Two patches, because they belong in different places upstream. The first adds AddOrUpdateNetwork and ForgetNetwork to the ThreadNetworkDirectory cluster, so an application recording a network goes through the cluster rather than behind it and subscribers are told. The second is the application: it retracts the entry this node seeded when that network is superseded or when otbr reports none, and only that entry. Assisted-By: Claude Opus 5
minimal-mDNS binds its sockets to the interfaces that existed when the Matter server started and had no way to be told they changed, so the feed restarted the daemon from an interface hotplug hook whenever the backbone device came back up. A restart does fix the sockets, but it also drops every CASE session and subscription, so each controller has to re-establish the connection and attribute reporting stops until it does. On a border router the backbone comes up on every network reconfiguration, so this is not a rare event. Carry two patches instead, and drop the hook: - 045 keeps a single interface that fails to bind from taking the whole mDNS server down with it (proposed upstream as project-chip/connectedhomeip#73558). Without this, re-binding while interfaces are still settling can leave the daemon with no endpoints at all -- worse than the state it started from. - 046 has the Linux platform watch the interfaces over netlink and restart DNS-SD when they change (proposed upstream as project-chip/connectedhomeip#73559). The daemon re-binds on its own and keeps its sessions, so nothing outside it needs to know that an interface came or went. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
ffa5a80 to
facc0ad
Compare
Follows project-chip/matter-openwrt#53: openthread/ot-br-posix#3489 is merged, so the host-groundwork patch 121 goes and the pin moves from the v2026.08.0 tag to the 2026-08-23 tip of main (42e5846d) that contains it. The ubus series 100-106/110 and the methods 130-136 are regenerated on that snapshot (the readiness-notification support moved the first patch's context; authorship preserved), and the nftables series 300-303 follows openthread/ot-br-posix#3325 rebased onto the same snapshot. The version now derives from the source date; PKG_RELEASE starts over. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems> (cherry picked from commit 5209fec)
Follows project-chip/matter-openwrt#53: openthread/ot-br-posix#3489 is merged, so the host-groundwork patch 121 goes and the pin moves from the v2026.08.0 tag to the 2026-08-23 tip of main (42e5846d) that contains it. The ubus series 100-106/110 and the methods 130-136 are regenerated on that snapshot (the readiness-notification support moved the first patch's context; authorship preserved), and the nftables series 300-303 follows openthread/ot-br-posix#3325 rebased onto the same snapshot. The version now derives from the source date; PKG_RELEASE starts over. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems> (cherry picked from commit 2358537)
Follows project-chip/matter-openwrt#53: openthread/ot-br-posix#3489 is merged, so the host-groundwork patch 121 goes and the pin moves from the v2026.08.0 tag to the 2026-08-23 tip of main (42e5846d) that contains it. The ubus series 100-106/110 and the methods 130-136 are regenerated on that snapshot (the readiness-notification support moved the first patch's context; authorship preserved), and the nftables series 300-303 follows openthread/ot-br-posix#3325 rebased onto the same snapshot. The version now derives from the source date; PKG_RELEASE starts over. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems> (cherry picked from commit 5209fec)
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
Follows project-chip/matter-openwrt#53: openthread/ot-br-posix#3489 is merged, so the host-groundwork patch 121 goes and the pin moves from the v2026.08.0 tag to the 2026-08-23 tip of main (42e5846d) that contains it. The ubus series 100-106/110 and the methods 130-136 are regenerated on that snapshot (the readiness-notification support moved the first patch's context; authorship preserved), and the nftables series 300-303 follows openthread/ot-br-posix#3325 rebased onto the same snapshot. The version now derives from the source date; PKG_RELEASE starts over. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems> (cherry picked from commit 2358537)
openthread-br: the host groundwork is now the single patch 121, since openthread/ot-br-posix#3489 was squashed to one commit at its reviewer's request; the ubus methods 130-136 are regenerated on top of it, unchanged in content. The nftables series 300-303 follows openthread/ot-br-posix#3325 as of 2026-08-23: a build with the backend now installs a marker file the legacy firewall scripts read, so the two cannot drift apart when the OTBR_NFTABLES environment variable is forgotten. PKG_RELEASE bumped so the rebuilt package is picked up. matter-netman: pinned to connectedhomeip master of 2026-08-21 (b7912017), which carries project-chip/connectedhomeip#73343, so its patch goes. The setup-passcode log patch goes too, its upstream PR having been closed. The carried patches are regenerated from the upstream branches as they stand: 035 puts the example's OpenWrt integration behind a backend interface (stacked on project-chip/connectedhomeip#73309), and the NIM patches that follow land as backend code rather than as conditional blocks in main.cpp; 036-038 shift into the freed slots, 039-046 keep their numbers. The same files ship in openwrt/packages and project-chip/matter-openwrt#53. Assisted-By: Claude Fable 5 Signed-off-by: Christian Glombek <c.glombek@cosa.systems>
Updates the border-router stack to enable Matter management of the Thread network, including migration to a different dataset via the pending-dataset mechanism. In daily use on OpenWrt-based hardware:
git format-patchfrom the upstream branch.matterubus object and pending-dataset support in the ubus delegate ([network-manager-app] pending dataset support over ubus connectedhomeip#73309), the example's OpenWrt integration put behind a backend interface (follow-up PR stacked on #73309), and real data on all NIM clusters. The SDK now watches interface changes itself for mDNS ([linux] restart DNS-SD when the network interfaces change connectedhomeip#73559), so the interface hotplug hook that restarted the daemon is gone.Dropped in earlier revisions, per review: the netifd protocol integration — its proto script derived from the GPL-2.0-only one in openwrt/packages, which the CLA cannot accept, so the feed stays with the init-based model — and the GCC 14 patch for the vendored mbedtls, which this feed does not compile.
(On our Turris OS builds we additionally run the nftables firewall backend from openthread/ot-br-posix#3325; it is not carried in this PR.)
Carried patches
matter-netman (chip pinned at b7912017, 2026-08-21)
Unchanged: 020-dont-overwrite-factory-config. Dropped: 010-zap-disable-arl (inert), the setup-passcode log patch (its upstream PR #73563 was closed), the shutdown re-register patch (#73343 is in the new pin).
openthread-br (main snapshot 42e5846d, 2026-08-23)
Unchanged: 020-external-mbedtls, 030-git-version, 040-settings-ifname, 050-radio-version. The 100–106/110 ubus series by @ksperling-apple is regenerated on the snapshot with authorship preserved. Dropped: the host-groundwork patch (its PR openthread/ot-br-posix#3489 is merged and in the pin).
@ksperling-apple — the ubus series upstream: the 100–106/110 patches are your commits, and I'd like to see them land in ot-br-posix proper so the packagings can stop carrying them. Since the CLA has to come from the author, would you open that upstream PR yourself? My follow-on host work is merged (openthread/ot-br-posix#3487, openthread/ot-br-posix#3489), and the ubus methods series that builds on yours (130–135 here) would follow, stacked on your PR.
The controller side works as well: Home Assistant imports the Thread dataset and Wi-Fi credentials from the network manager, surfaces the diagnostics, and can hand a border router a new network as a pending migration — those changes are heading upstream to home-assistant/core as a series of PRs.