[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