From: Vinay Gannevaram Date: Wed, 16 Apr 2025 19:14:15 +0000 (+0530) Subject: NAN USD: Trigger USD offload cancellation upon timer expiration X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2ee7ca99c7925fced2c6ac1ec709de94bef0c78;p=thirdparty%2Fhostap.git NAN USD: Trigger USD offload cancellation upon timer expiration Trigger USD offload cancellation when the timer expires. This ensures that the USD is canceled for drivers that do not implement a timer to stop discovery upon timer expiration. Signed-off-by: Vinay Gannevaram --- diff --git a/src/common/nan_de.c b/src/common/nan_de.c index 4f63adc85..2833211f9 100644 --- a/src/common/nan_de.c +++ b/src/common/nan_de.c @@ -604,6 +604,14 @@ static void nan_de_timer(void *eloop_ctx, void *timeout_ctx) wpa_printf(MSG_DEBUG, "NAN: Service id %d expired", srv->id); nan_de_del_srv(de, srv, NAN_DE_REASON_TIMEOUT); + if (srv->type == NAN_DE_PUBLISH && + de->cb.offload_cancel_publish) + de->cb.offload_cancel_publish(de->cb.ctx, + srv->id); + if (srv->type == NAN_DE_SUBSCRIBE && + de->cb.offload_cancel_subscribe) + de->cb.offload_cancel_subscribe(de->cb.ctx, + srv->id); continue; } diff --git a/src/common/nan_de.h b/src/common/nan_de.h index 41e294e71..2900bab5c 100644 --- a/src/common/nan_de.h +++ b/src/common/nan_de.h @@ -50,6 +50,9 @@ struct nan_callbacks { void (*subscribe_terminated)(void *ctx, int subscribe_id, enum nan_de_reason reason); + void (*offload_cancel_publish)(void *ctx, int publish_id); + void (*offload_cancel_subscribe)(void *ctx, int subscribe_id); + void (*receive)(void *ctx, int id, int peer_instance_id, const u8 *ssi, size_t ssi_len, const u8 *peer_addr); diff --git a/wpa_supplicant/nan_usd.c b/wpa_supplicant/nan_usd.c index 946d62fb3..b2d195ca7 100644 --- a/wpa_supplicant/nan_usd.c +++ b/wpa_supplicant/nan_usd.c @@ -271,6 +271,15 @@ static void wpas_nan_de_publish_terminated(void *ctx, int publish_id, } +static void wpas_nan_usd_offload_cancel_publish(void *ctx, int publish_id) +{ + struct wpa_supplicant *wpa_s = ctx; + + if (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_NAN_OFFLOAD) + wpas_drv_nan_cancel_publish(wpa_s, publish_id); +} + + static void wpas_nan_de_subscribe_terminated(void *ctx, int subscribe_id, enum nan_de_reason reason) { @@ -280,6 +289,15 @@ static void wpas_nan_de_subscribe_terminated(void *ctx, int subscribe_id, } +static void wpas_nan_usd_offload_cancel_subscribe(void *ctx, int subscribe_id) +{ + struct wpa_supplicant *wpa_s = ctx; + + if (wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_NAN_OFFLOAD) + wpas_drv_nan_cancel_subscribe(wpa_s, subscribe_id); +} + + static void wpas_nan_de_receive(void *ctx, int id, int peer_instance_id, const u8 *ssi, size_t ssi_len, const u8 *peer_addr) @@ -316,6 +334,8 @@ int wpas_nan_usd_init(struct wpa_supplicant *wpa_s) cb.replied = wpas_nan_de_replied; cb.publish_terminated = wpas_nan_de_publish_terminated; cb.subscribe_terminated = wpas_nan_de_subscribe_terminated; + cb.offload_cancel_publish = wpas_nan_usd_offload_cancel_publish; + cb.offload_cancel_subscribe = wpas_nan_usd_offload_cancel_subscribe; cb.receive = wpas_nan_de_receive; #ifdef CONFIG_P2P cb.process_p2p_usd_elems = wpas_nan_process_p2p_usd_elems;