[openwrt/openwrt] unetmsg: fix publish notification timing around remote auth

LEDE Commits lede-commits at lists.infradead.org
Sat Feb 7 01:04:33 PST 2026


nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/3efcf444a11e9402d86ae79c733114827ce31b42

commit 3efcf444a11e9402d86ae79c733114827ce31b42
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Fri Feb 6 09:22:30 2026 +0000

    unetmsg: fix publish notification timing around remote auth
    
    When a remote peer's publish registrations arrive via RX before the
    local TX connection is authenticated, handle_publish fires but the
    subscriber can't reach the remote publisher yet since the TX channel
    isn't ready.
    
    Suppress publish notifications on the RX side when no authenticated TX
    channel exists for the remote host. After TX authentication completes,
    re-trigger handle_publish only for topics that the specific peer
    publishes and that have local subscribers.
    
    Signed-off-by: John Crispin <john at phrozen.org>
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 .../files/usr/share/ucode/unetmsg/unetmsgd-remote.uc        | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-remote.uc b/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-remote.uc
index 92f81262ef..1f1c97a2ca 100644
--- a/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-remote.uc
+++ b/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-remote.uc
@@ -93,6 +93,8 @@ function network_socket_handle_request(sock_data, req)
 	let host = sock_data.name;
 	let network = sock_data.network;
 	let args = { ...req.args, host, network };
+	let tx_chan = net.tx_channels[host];
+	let tx_auth = tx_chan && tx_chan.auth;
 	switch (msgtype) {
 	case "publish":
 	case "subscribe":
@@ -102,7 +104,8 @@ function network_socket_handle_request(sock_data, req)
 			return;
 		if (args.enabled) {
 			if (list[name]) {
-				core.handle_publish(null, name);
+				if (tx_auth)
+					core.handle_publish(null, name);
 				return 0;
 			}
 
@@ -121,7 +124,8 @@ function network_socket_handle_request(sock_data, req)
 				network: sock_data.network,
 				name: host,
 			}, pubsub_proto);
-			core.handle_publish(null, name);
+			if (tx_auth)
+				core.handle_publish(null, name);
 			list[name] = true;
 		} else {
 			if (!list[name])
@@ -318,6 +322,11 @@ function network_open_channel(net, name, peer)
 					data: { name, enabled: true },
 					return: "ignore",
 				});
+
+		let rx_chan = net.rx_channels[name];
+		if (rx_chan)
+			for (let sub_name in rx_chan.publish)
+				core.handle_publish(null, sub_name);
 	};
 	let auth_cb = () => {
 		if (!sock_data.auth)




More information about the lede-commits mailing list