[PATCH 15/15] NAN: Keep sync services off the off-channel USD path

Andrei Otcheretianski andrei.otcheretianski at intel.com
Thu Oct 8 09:05:24 PDT 2026


The follow-up transmit path let peer_freq override srv->sync, so a
synchronized service ended up transmitting off-channel.
Sync services shall never use off-channel (USD) tx. Fix it.

Fixes: 2f7d0b2ca405 ("NAN: Propagate peer frequency through follow-up TX path")

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
 src/common/nan_de.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/src/common/nan_de.c b/src/common/nan_de.c
index 9b36f95f4a..9210996fd7 100644
--- a/src/common/nan_de.c
+++ b/src/common/nan_de.c
@@ -1090,8 +1090,8 @@ static void nan_de_tx_sdf(struct nan_de *de, struct nan_de_service *srv,
 	/* Use per-service source address if configured, otherwise use NMI */
 	forced_addr = srv->forced_addr_set ? srv->forced_addr : de->nmi;
 	nan_de_tx(de,
-		  peer_freq ? peer_freq : (srv->sync ? 0 : srv->freq),
-		  peer_freq ? wait_time : (srv->sync ? 0 : wait_time),
+		  srv->sync ? 0 : (peer_freq ? peer_freq : srv->freq),
+		  srv->sync ? 0 : wait_time,
 		  dst, forced_addr, a3, buf, cookie, srv->id);
 	wpabuf_free(buf);
 }
@@ -3675,7 +3675,6 @@ int nan_de_transmit(struct nan_de *de, int handle,
 	struct nan_de_service *srv;
 	const u8 *a3;
 	const u8 *network_id;
-	unsigned int tx_wait;
 
 	srv = nan_de_get_service(de, handle);
 	if (!srv)
@@ -3705,15 +3704,7 @@ int nan_de_transmit(struct nan_de *de, int handle,
 	else
 		a3 = network_id;
 
-	/* When peer_freq is set, send the follow-up off-channel on the
-	 * peer's discovery frequency instead of the sync/DW path.
-	 */
-	if (peer_freq)
-		tx_wait = 100;
-	else
-		tx_wait = srv->sync ? 0 : 100;
-
-	nan_de_tx_sdf(de, srv, tx_wait, NAN_SRV_CTRL_FOLLOW_UP,
+	nan_de_tx_sdf(de, srv, 100, NAN_SRV_CTRL_FOLLOW_UP,
 		      peer_addr, a3, req_instance_id, ssi, nan_attrs,
 		      cookie, peer_freq);
 
-- 
2.53.0




More information about the Hostap mailing list