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;
}
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);
}
+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)
{
}
+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)
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;