]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
NAN USD: Trigger USD offload cancellation upon timer expiration
authorVinay Gannevaram <quic_vganneva@quicinc.com>
Wed, 16 Apr 2025 19:14:15 +0000 (00:44 +0530)
committerJouni Malinen <j@w1.fi>
Tue, 6 May 2025 13:25:08 +0000 (16:25 +0300)
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 <quic_vganneva@quicinc.com>
src/common/nan_de.c
src/common/nan_de.h
wpa_supplicant/nan_usd.c

index 4f63adc85648c0b8af98d8554b19f723ff588fc5..2833211f9a696db4a3f801860da769d4a67b88ae 100644 (file)
@@ -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;
                }
 
index 41e294e71fb385e3d58598cc69b510905a1d23d8..2900bab5cf8ae9681edd01811d4fc1b409aea130 100644 (file)
@@ -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);
index 946d62fb30f7647ef9e64f34c46348dba91e4d11..b2d195ca751163eb795ee57b1aeff86fd8ea1808 100644 (file)
@@ -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;