openthread-br: update to 2026.08.0, internal mDNS, configurable REST listen address - #30091
openthread-br: update to 2026.08.0, internal mDNS, configurable REST listen address#30091LorbusChris wants to merge 3 commits into
Conversation
522cae5 to
7aa6e5a
Compare
stintel
left a comment
There was a problem hiding this comment.
As this has not even been build-tested, I am going to request changes here. This PR has the potential to completely break people's smart homes, so without runtime testing this is a 100% no go.
👍 I'll be doing testing on actual hardware soon - this also requires openwrt/luci#8871 and coordination between the two. |
Thanks, appreciated. I'd be interested to know more about your setup and hardware. I had the idea of adding some kind of tested hardware matrix in the README.md. |
|
@stintel my first field test will be on a Turris Omnia NG (running the Turris OS flavour of OpenWrt) with a Home Assistant Connect ZBT-2. |
Great, that's completely different from my setup: 2x Olimex A64-OLinuXino with nRF52840 MDK USB Dongle in a dual-border-router setup with stateful packet filtering and conntrack state syncing with conntrackd and TREL between the 2. I have briefly been running with a 3rd border-router on a TP-Link EAP683-LR with the integrated CC2652, but the firmware of that CC2652 appeared to be unstable so it is currently disabled until I have time (and probably a 2nd device) to debug this properly. |
7aa6e5a to
bfc4369
Compare
bfc4369 to
e49c1c9
Compare
|
@stintel could you approve the "Test and Build" CI workflow? This should build now and I'm curious if anything else pops up. |
|
I'd also be happy to split the 3rd commit out into its own PR so the update can go in independently. |
Done |
If it's not too much hassle, I think I would prefer that. I'd like to thoroughly review and test this PR myself before accepting it, so having the LuCI separation in a different PR would allow that to land earlier. Also regarding mDNSResponder vs OpenThread's internal mDNS support, I'm not sure. I think I'd prefer following upstream's default. We would then have to make sure we can't run another mDNS daemon when otbr-agent is running. I see your point about keeping mDNSResponder as default, but I guess we have to check how that works when someone also install umdns and/or avahi-daemon. Lastly, otbr-agent is the only consumer of mDNSResponder and @neheb suggested to drop mDNSResponder from tree entirely after landing my 2026.06 bump. |
e49c1c9 to
d1ae6dc
Compare
d1ae6dc to
bc2d58f
Compare
|
Switched to I tested it alongside umdns on a simulated RCP and they seem to get along fine: OT names its host One thing worth knowing: OT's mDNS only serves the single Also added a Hardware testing on a Turris Omnia NG + ZBT-2 next. Mind re-approving the build workflow? |
a12c137 to
a1c33b2
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage (and its install recipe) so the UI is no longer shipped from two places. Split out of openwrt#30091 so it can be reviewed and land independently of the 2026.07.0 update. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage (and its install recipe) so the UI is no longer shipped from two places. Split out of openwrt#30091 so it can be reviewed and land independently of the 2026.07.0 update. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed 3 new commits (fresh review, full PR diff). All three commit messages match their diffs.
Verified against upstream ot-br-posix at v2026.07.0 (ec16e396): the tag exists; both dropped patches are indeed upstream at that tag; OTBR_DUA_ROUTING is gone from etc/cmake/options.cmake; the "Only one Advertising Proxy can be enabled." FATAL_ERROR and the OT-core proxy defaults are as described; OTBR_MDNS=openthread is the upstream default and a valid value; --rest-listen-address / --rest-listen-port exist as required_argument long options; and the ot-ctl getopt_long() missing-terminator bug behind the -h choice in test.sh is real (-h exits 0 via PrintUsage(..., stdout, OT_EXIT_SUCCESS)).
Two things I'd look at before merge — one that blocks the CI job, and one that I think blocks the package at runtime; both are inline.
Generated by Claude Code
|
I am just dropping my 2 cents here because its funny, I individually set down yesterday updating this package on my local install without knowing that this PR was up. These are my locally made changes: diff --git a/net/openthread-br/Makefile b/net/openthread-br/Makefile
index 9486685..d49e9ae 100644
--- a/net/openthread-br/Makefile
+++ b/net/openthread-br/Makefile
@@ -4,13 +4,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=openthread-br
-PKG_SOURCE_DATE:=2025-06-12
-PKG_SOURCE_VERSION:=2f3c799c7463c8f674754e65c53f78bc0bbcbd58
-PKG_RELEASE:=2
+PKG_SOURCE_DATE:=2026-06-25
+PKG_SOURCE_VERSION:=ec16e396382b4559e70a2c6fdeecb7d596a5e915
+PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=https://github.com/openthread/ot-br-posix.git
-PKG_MIRROR_HASH:=fae1c7c88102f88bac32f8ee25e044b9a8781eef6b9acef39388e1e11a44a195
+PKG_MIRROR_HASH:=d19a2ea6d01d66151f769e6d23450a23d5802c5a9adf3b37fe4938fb3acf63a3
PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
PKG_LICENSE:=BSD-3-Clause
@@ -41,9 +41,7 @@ define Package/openthread-br
+libreadline \
+libstdcpp \
+libubox \
- +libubus \
- +mdnsd \
- +mdnsresponder
+ +libubus
endef
define Package/openthread-br/description
@@ -63,13 +61,15 @@ CMAKE_OPTIONS += \
-DOT_TARGET_OPENWRT=ON \
-DOTBR_BACKBONE_ROUTER=ON \
-DOTBR_BORDER_ROUTING=ON \
- -DOTBR_DNSSD_DISCOVERY_PROXY=ON \
+ -DOTBR_DNSSD_DISCOVERY_PROXY=OFF \
+ -DOTBR_OT_DISCOVERY_PROXY=ON \
-DOTBR_DUA_ROUTING=ON \
- -DOTBR_MDNS=mDNSResponder \
+ -DOTBR_MDNS=openthread \
-DOTBR_NAT64=OFF \
-DOTBR_OPENWRT=ON \
-DOTBR_REST=ON \
- -DOTBR_SRP_ADVERTISING_PROXY=ON \
+ -DOTBR_SRP_ADVERTISING_PROXY=OFF \
+ -DOTBR_OT_SRP_ADV_PROXY=ON \
-DOTBR_SRP_SERVER_AUTO_ENABLE=ON \
-DOTBR_TREL=ON
diff --git a/net/openthread-br/patches/101-rest-Permit-to-externally-provide-cJSON-library.patch b/net/openthread-br/patches/101-rest-Permit-to-externally-provide-cJSON-library.patch
deleted file mode 100644
index 812978c..0000000
--- a/net/openthread-br/patches/101-rest-Permit-to-externally-provide-cJSON-library.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 59c389a91cfe91eebed9c36887fa2a3eca4cbd6f Mon Sep 17 00:00:00 2001
-From: Christian Marangi <ansuelsmth@gmail.com>
-Date: Mon, 24 Nov 2025 18:53:28 +0100
-Subject: [PATCH] [rest] Permit to externally provide cJSON library
-
-Permit to externally provide cJSON library if found with PKGConfig.
-
-Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
----
- src/rest/CMakeLists.txt | 12 +++++++++++-
- third_party/CMakeLists.txt | 5 ++++-
- 2 files changed, 15 insertions(+), 2 deletions(-)
-
---- a/src/rest/CMakeLists.txt
-+++ b/src/rest/CMakeLists.txt
-@@ -36,11 +36,22 @@ add_library(otbr-rest
- response.cpp
- )
-
-+if (CJSON_FOUND)
-+ set(CJSON_LIB_TARGETS ${CJSON_LINK_LIBRARIES})
-+else()
-+ set(CJSON_LIB_TARGETS cjson)
-+endif()
-+
-+target_include_directories(otbr-rest
-+ PRIVATE
-+ ${CJSON_INCLUDE_DIRS}
-+)
-+
- target_link_libraries(otbr-rest
- PUBLIC
- http_parser
- PRIVATE
-- cjson
-+ ${CJSON_LIB_TARGETS}
- otbr-config
- otbr-utils
- openthread-ftd
---- a/third_party/CMakeLists.txt
-+++ b/third_party/CMakeLists.txt
-@@ -28,6 +28,13 @@
-
- add_subdirectory(openthread)
- if(OTBR_REST)
-- add_subdirectory(cJSON)
-+ pkg_check_modules(CJSON libcjson)
-+ if (CJSON_FOUND)
-+ set(CJSON_FOUND ${CJSON_FOUND} PARENT_SCOPE)
-+ set(CJSON_INCLUDE_DIRS ${CJSON_INCLUDE_DIRS} PARENT_SCOPE)
-+ set(CJSON_LINK_LIBRARIES ${CJSON_LINK_LIBRARIES} PARENT_SCOPE)
-+ else()
-+ add_subdirectory(cJSON)
-+ endif()
- add_subdirectory(http-parser)
- endif()
diff --git a/net/openthread-br/patches/102-openwrt-fix-LuCI-icons.patch b/net/openthread-br/patches/102-openwrt-fix-LuCI-icons.patch
deleted file mode 100644
index 701ae0f..0000000
--- a/net/openthread-br/patches/102-openwrt-fix-LuCI-icons.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 4b09d856fd3d82bfb6707d889fb40f981945a6a2 Mon Sep 17 00:00:00 2001
-From: Stijn Tintel <stijn@linux-ipv6.be>
-Date: Wed, 7 Jan 2026 00:20:04 +0200
-Subject: [PATCH] [openwrt] fix LuCI icons (#3178)
-
-The PNG icons in LuCI have been replaced with SVG icons.
-
-Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
----
- src/openwrt/view/admin_thread/thread_overview.htm | 10 +++++-----
- src/openwrt/view/admin_thread/thread_scan.htm | 12 ++++++------
- 2 files changed, 11 insertions(+), 11 deletions(-)
-
---- a/src/openwrt/view/admin_thread/thread_overview.htm
-+++ b/src/openwrt/view/admin_thread/thread_overview.htm
-@@ -32,7 +32,7 @@
- <!-- physical device -->
- <div class="tr cbi-rowstyle-2">
- <div class="td col-1 center middle">
-- <span class="ifacebadge"><img src="<%=resource .. "/icons/wifi.png"%>" id="wpan0" /> <%=threadget("interfacename").InterfaceName%></span>
-+ <span class="ifacebadge"><img src="<%=resource .. "/icons/wifi.svg"%>" id="wpan0" /> <%=threadget("interfacename").InterfaceName%></span>
- </div>
- <div class="td col-7 left middle">
- <big><strong><%:Generic MAC 802.15.4 Thread%></strong></big><br />
-@@ -164,13 +164,13 @@
- var scale = percent_thread_signal(info);
-
- if (scale == 0)
-- icon = "<%=resource%>/icons/signal-0.png";
-+ icon = "<%=resource%>/icons/signal-000.svg";
- else if (scale == 30)
-- icon = "<%=resource%>/icons/signal-25-50.png";
-+ icon = "<%=resource%>/icons/signal-025-050.svg";
- else if (scale == 50)
-- icon = "<%=resource%>/icons/signal-50-75.png";
-+ icon = "<%=resource%>/icons/signal-050-075.svg";
- else
-- icon = "<%=resource%>/icons/signal-75-100.png";
-+ icon = "<%=resource%>/icons/signal-075-100.svg";
-
- return icon;
- }
---- a/src/openwrt/view/admin_thread/thread_scan.htm
-+++ b/src/openwrt/view/admin_thread/thread_scan.htm
-@@ -17,17 +17,17 @@
- end
-
- if info.NetworkName == nil then
-- icon = resource .. "/icons/signal-none.png"
-+ icon = resource .. "/icons/signal-none.svg"
- elseif scale < 15 then
-- icon = resource .. "/icons/signal-0.png"
-+ icon = resource .. "/icons/signal-000.svg"
- elseif scale < 35 then
-- icon = resource .. "/icons/signal-0-25.png"
-+ icon = resource .. "/icons/signal-000-025.svg"
- elseif scale < 55 then
-- icon = resource .. "/icons/signal-25-50.png"
-+ icon = resource .. "/icons/signal-025-050.svg"
- elseif scale < 75 then
-- icon = resource .. "/icons/signal-50-75.png"
-+ icon = resource .. "/icons/signal-050-075.svg"
- else
-- icon = resource .. "/icons/signal-75-100.png"
-+ icon = resource .. "/icons/signal-075-100.svg"
- end
-
- return icon
It's clear Chris is further than I am. But I have been running this on my system last night until now and besides a few mistakes I made along the way, the update itself works. So take that for a +1 for "it won't break peoples smart homes". Edit: |
c4254e9 to
3ca602c
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage (and its install recipe) so the UI is no longer shipped from two places. Split out of openwrt#30091 so it can be reviewed and land independently of the 2026.07.0 update. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage (and its install recipe) so the UI is no longer shipped from two places. Split out of openwrt#30091 so it can be reviewed and land independently of the 2026.07.0 update. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
3ca602c to
371bb05
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arms are removed from test.sh and test-version.sh -- those scripts refuse to pass a package they don't know, so keeping a case for one that is no longer built would defeat that. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it; the version bump below already resets PKG_RELEASE, which covers this change too. Should the ordering ever flip, this commit needs rebasing onto master and a PKG_RELEASE bump of its own. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arms are removed from test.sh and test-version.sh -- those scripts refuse to pass a package they don't know, so keeping a case for one that is no longer built would defeat that. PKG_RELEASE is bumped: the package set changes without a version change. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
371bb05 to
9998910
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arms are removed from test.sh and test-version.sh -- those scripts refuse to pass a package they don't know, so keeping a case for one that is no longer built would defeat that. PKG_RELEASE is bumped: the package set changes without a version change. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
9998910 to
6e05e4c
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arm is removed from test.sh -- that script refuses to pass a package it doesn't know, so keeping a case for one that is no longer built would defeat that. PKG_RELEASE is bumped: the package set changes without a version change. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
openwrt-ai
left a comment
There was a problem hiding this comment.
Re-reviewed after the force-push. Diffed c4254e94 (my last review) against 6e05e4cd: three files in net/openthread-br/ — the re-pin to 2026.08.0 with a new PKG_MIRROR_HASH, -DOTBR_VERSION=$(PKG_VERSION), test-version.sh deleted, and test.sh's comments rewritten to match. All three commit messages still match their diffs; PKG_RELEASE correctly stays at 1 for the version bump.
The interesting change is dropping the override script, so I checked whether the generic version check actually passes without it, end to end:
v2026.08.0exists upstream (337711e7, viagit ls-remote), and2026.08.0is the newest tag on the repo.OTBR_VERSIONis a real cache variable, not a no-op:if(NOT OTBR_VERSION)at CMakeLists.txt:72 guards the fallback, and the value lands inOTBR_PACKAGE_VERSION, which--versionprints verbatim. Sootbr-agent --versionemits exactly2026.08.0.- The harness strips the release suffix before matching (
PKG_VERSION="${PKG_VERSION%-[!-]*}", test_entrypoint.sh:305-306), so it greps for2026.08.0, not2026.08.0-r1— the match holds. ot-ctlstill won't report a version, but that is not a failure: the job only fails when every executable misses it ([ "$exec_checked" -eq "$version_missing" ], test_entrypoint.sh:247-255); a partial miss is awarn. Expect one1/2 executables are missing version 2026.08.0line in the log, nothing more.- That same code path is why the commit message's "as it already does on master" is accurate rather than rhetorical: on master neither binary reports the packaged version, so
exec_checked == version_missingand the check genuinely fails there today. luci-app-openthreadinstalls no executables, soexec_checkedis 0 and the block is skipped entirely — losing theluci-app-openthread)arm fromtest-version.shcosts nothing, andtest.shstill carries its own arm. No introduce-then-remove pair is left in the series either;test-version.shnever appears in the final three commits.
CI on 6e05e4cd: the three FormalityCheck runs are green. Feeds Package Test Build has not run on this head (it needs maintainer approval), so there is nothing to report from logs — worth an eye when it does, since this is the first head where the generic version check runs unmasked.
Nothing blocking. One nit inline.
Generated by Claude Code
Switch from a pinned commit to the 2026.08.0 release tag (the latest release). Drop the two local patches whose fixes are upstream since 2026.07.0: - 101-rest-Permit-to-externally-provide-cJSON-library.patch - 102-openwrt-fix-LuCI-icons.patch Adjust CMAKE_OPTIONS for the proxy rework that arrived with 2026.07.0. That release added OT core Advertising and Discovery Proxies that default on whenever OTBR_MDNS is set and are mutually exclusive with the legacy POSIX proxies, so forcing OTBR_SRP_ADVERTISING_PROXY=ON and OTBR_DNSSD_DISCOVERY_PROXY=ON now fails configure with "Only one Advertising Proxy can be enabled." Drop both flags to adopt the OT core proxies, matching upstream's default build. Also drop OTBR_DUA_ROUTING, which is no longer a recognized option. Set OTBR_VENDOR_NAME and OTBR_PRODUCT_NAME. 2026.07.0 removed the built-in defaults that border_agent.hpp used to supply, so otbr-agent now exits with "Vendor name must be set." unless they are given at compile time or on the command line. They are set to OpenThread and BorderRouter, the values those defaults had, rather than to anything OpenWrt specific. The pair also forms the MeshCoP service instance name, as "<vendor> <product>", which is the name shown when adding the border router in a Thread client and the one already-paired clients have recorded. Keeping the previous values means upgrading does not rename anyone's border router. It also leaves OTBR_NAME at OpenThread_BorderRouter, which is what it defaulted to. Pass OTBR_VERSION=$(PKG_VERSION). Left alone, otbr-agent --version reports the upstream CMake project version (0.3.0), which is unrelated to the version this package is built from, so the generic version check fails -- as it already does on master, independently of this update. OTBR_VERSION overrides that string at configure time, so the binary reports the version it was packaged as and the check passes with no override script. luci-app-openthread installs no executables, so the generic checks have nothing to probe there and need no override either. Add a test.sh as the functional smoke test: it exercises both binaries, which also covers their runtime library closure. ot-ctl is probed with -h because it has no version option at this release (openthread/openthread#13424 adds one, but the bundled openthread predates it). The segfault on unrecognized long options that earlier made -h the only safe probe is fixed in the openthread this release bundles (openthread/openthread#13423). The mDNS provider is left unchanged here; a follow-up commit switches it to OpenThread's internal implementation. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
6e05e4c to
60b71c3
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arm is removed from test.sh -- that script refuses to pass a package it doesn't know, so keeping a case for one that is no longer built would defeat that. PKG_RELEASE is bumped: the package set changes without a version change. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
60b71c3 to
2c803bc
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arm is removed from test.sh -- that script refuses to pass a package it doesn't know, so keeping a case for one that is no longer built would defeat that. PKG_RELEASE is bumped: the package set changes without a version change. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
openwrt-ai
left a comment
There was a problem hiding this comment.
Re-reviewed after the force-push. Diffed 6e05e4cd (my last review) against 2c803bcf: one file, net/openthread-br/README.md, +17/-4. No rebase this time — the three commits are byte-identical to df882011 / 6875a576 / 6e05e4cd apart from the README hunks, and all three commit messages still match their diffs.
Both hunks are follow-ups to the previous round, and each lands in the commit that owns the change it documents rather than as a fixup on top:
### Version string(lines 41-50) goes into commit 1, which is where-DOTBR_VERSION=$(PKG_VERSION)is added. It records the two things that were only implicit before — that the fallback is the CMake project version because the repacked tarball has no git dir forgit describe, and that the CI version check depends on this option — so the line can't be dropped later as looking redundant withPKG_VERSION. That matches the### Vendor and product namesection immediately above it, so all three of this PR's packaging decisions are now recorded in the file that exists to hold them.- The required/optional paragraph goes into commit 2, which is where
rest_listen_address/rest_listen_portare introduced. Worth noting it also corrects a pre-existing error: the old text said "Prefix, verbose, rest_listen_address and rest_listen_port are optional. Everything else is required", which madedatasetlook mandatory when the handler only touches it under[ -n "$dataset" ].
I checked the new claims against the handler at this head and against the harness rather than taking them as given:
- The three required options and the "no device" case are exactly what
proto_openthread_setup()enforces — see the inline comment for the line references. [REST Server](#rest-server)resolves: the target heading### REST Serveris at README.md:70.- "dropping this option would make the package fail it again" holds. The generic check only fails when every probed executable misses the string (
[ "$exec_checked" -eq "$version_missing" ], test_entrypoint.sh:247-255) — withoutOTBR_VERSION,otbr-agentprints the project version andot-ctlprints none, so both miss and the job fails; with it,otbr-agentmatches and theot-ctlmiss is only awarn.
CI on 2c803bcf: the three FormalityCheck runs are green. Feeds Package Test Build has not run on this head, so there is nothing to report from logs; it is still worth a look when it does, since this head and its predecessor are the first without test-version.sh masking the generic version check.
Nothing blocking. One nit inline, presentation only.
Generated by Claude Code
2c803bc to
85a14db
Compare
As of the 2026.07.0 update, otbr-agent's REST API defaults to listening on 127.0.0.1, so remote clients (e.g. Home Assistant on another host) can no longer reach it. Add rest_listen_address and rest_listen_port proto options and pass them through to otbr-agent when set; leaving them unset keeps the secure loopback-only default. Also drop the leftover unused 'foobar' proto config option. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
Switch OTBR_MDNS from mDNSResponder to openthread, drop the mdnsd and mDNSResponder dependencies, and remove the proto handler's mdnsd service check, which would otherwise refuse to start otbr-agent now that mdnsd is no longer installed. This follows upstream, which made the internal implementation the default in openthread/ot-br-posix#2996 and uses it in its own OpenWrt example package, and it lets otbr-agent share a router with umdns, which is what advertises the router's procd-registered services (ssh, samba and the like) and resolves <hostname>.local. The two can coexist because they never contend for a name: OpenThread's mDNS names its host after the Thread extended address, while umdns keeps <hostname>.local. Both bind UDP 5353 with SO_REUSEADDR and each answers only for its own records. mDNSResponder instead takes its name from gethostname(), so it and umdns race for the same name, and the loser either stops announcing without logging anywhere procd captures or, if neither notices, both keep claiming it. That is the conflict with a running mdnsd noted in openwrt#29784. Border router discovery is unaffected: in this mode OpenThread's own border agent registers the _meshcop._udp service (its OPENTHREAD_CONFIG_BORDER_AGENT_MESHCOP_SERVICE_ENABLE follows OPENTHREAD_CONFIG_MULTICAST_DNS_ENABLE), and OTBR's publisher is disabled by design, so clients such as Home Assistant still find the border router. Note that OpenThread's mDNS serves a single interface, the one given by the backbone_network option, so Thread service records are announced on that network only. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Opus 4.8
85a14db to
233cfaa
Compare
The LuCI web interface for OpenThread Border Router is proposed for the openwrt/luci repository as luci-app-openthread (openwrt/luci#8871), following the standard convention for LuCI apps, as requested in openwrt#29791 and openthread/ot-br-posix#3431. Remove the luci-app-openthread subpackage and its install recipe so the UI is no longer shipped from two places. The README's LuCI section now points at the openwrt/luci app instead of documenting the dropped one, and the luci-app-openthread arm is removed from test.sh -- that script refuses to pass a package it doesn't know, so keeping a case for one that is no longer built would defeat that. PKG_RELEASE is bumped: the package set changes without a version change. Split out of openwrt#30091 at the maintainer's request. This sits on top of openwrt#30091's update to 2026.08.0 and is meant to land with or after it. Signed-off-by: Christian Glombek <c.glombek@cosa.systems> Assisted-By: Claude Fable 5
openwrt-ai
left a comment
There was a problem hiding this comment.
Reviewed 3 new commits; no new issues found.
Diffed 2c803bcf (my last review) against 233cfaa7: one file, net/openthread-br/README.md, +4/-4 — exactly the suggestion from the previous round. The two -- separators in the required/optional paragraph became —, matching line 90 in the same file, and the tail rewrapped so the last two lines are no longer ragged against the file's ~79-column wrap. No ASCII double-hyphen is left anywhere in the file, so the fix is complete rather than local.
The change is folded into commit 2 (caacf174), which is the commit that introduces that paragraph together with rest_listen_address / rest_listen_port — not added as a fixup on top, so there is no introduce-then-fix pair in the series. Commit 1 is unchanged (07cd2dc8, same SHA as before), and commit 3 (233cfaa7) differs from 2c803bcf only in the blob it carries forward; git show --format=%B on both is byte-identical. All three commit messages still match their diffs, and PKG_RELEASE:=1 remains correct for the version bump.
Nothing in this delta touches the two threads still open with @BKPepe (the PKG_SOURCE_VERSION:=v$(PKG_VERSION) pin, tracked upstream in openthread/ot-br-posix#3496 / #3497, and the MeshCoP instance name question on README.md:35). Both are maintainer calls rather than defects I can adjudicate, so I have nothing to add there.
CI on 233cfaa7: the three FormalityCheck runs are green. Feeds Package Test Build has not run on this head, so there is nothing to report from logs; still worth a look when it does, since this head and its two predecessors are the first without test-version.sh masking the generic version check.
Generated by Claude Code
📦 Package Details
Maintainer: @stintel
Description
Updates openthread-br to the 2026.08.0 release and switches to OpenThread's internal mDNS, addressing the mDNS/REST issues discussed in #29784.
Update to 2026.08.0. Re-pins to the release and drops the two patches upstream at this tag. The 2026.07.0 proxy rework made the legacy
OTBR_SRP_ADVERTISING_PROXY/OTBR_DNSSD_DISCOVERY_PROXY/OTBR_DUA_ROUTINGoptions fail configure, so they are dropped; vendor/product names are now required at startup and are set toOpenThread/BorderRouter, the same MeshCoP instance name earlier releases advertised, so an upgrade renames nothing.Make the REST listen address configurable. The release defaults REST to
127.0.0.1, breaking remote clients like Home Assistant (Bump OpenThread Border Router and switch to internal mDNS implementation #29784 issue 1). Addsrest_listen_address/rest_listen_portproto options; unset keeps the loopback default.Use OpenThread's internal mDNS (
OTBR_MDNS=openthread, upstream's default since [mdns] change default to OT mDNS openthread/ot-br-posix#2996), dropping themdnsd/mDNSResponderdependencies (Bump OpenThread Border Router and switch to internal mDNS implementation #29784 issue 2). This lets otbr-agent share a router with umdns without name contention: OT names its host after the Thread extended address (ot<ExtAddress>.local), umdns keeps<hostname>.local, and both bind :5353 viaSO_REUSEADDRin either start order. Caveats: OT's mDNS serves only thebackbone_networkinterface, and a unicast reply meant for one daemon can land on the other.🧪 Run Testing Details
Builds clean in the OpenWrt SDK (x86_64, replicating the feed CI flow). umdns coexistence exercised against a simulated RCP (both daemons bound in either start order, services resolved by a third-party zeroconf browse), and the same update has since been running on a Turris Omnia alongside umdns with a Home Assistant Connect ZBT-2 RCP, commissioned into a Matter fabric.
test.shexercisesotbr-agent --version(the Makefile passes-DOTBR_VERSION, thanks @BKPepe) andot-ctl -h— ot-ctl has no version option at this release (openthread/openthread#13424 missed the submodule pin by four days; the long-option segfault the probe surfaced is fixed here via openthread/openthread#13423).Follow-ups stacked on this PR: #30096 (LuCI app separation), #30276 (RCP discovery, draft).
✅ Formalities