diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c index 76cdf277a..3211ba284 100644 --- a/src/p2p/p2p.c +++ b/src/p2p/p2p.c @@ -560,6 +560,8 @@ static void p2p_device_free(struct p2p_data *p2p, struct p2p_device *dev) if (p2p->pending_client_disc_go == dev) p2p->pending_client_disc_go = NULL; + p2p->cfg->dev_lost(p2p->cfg->cb_ctx, dev->info.p2p_device_addr); + os_free(dev); } diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h index 0d09d1e94..f41e64d6a 100644 --- a/src/p2p/p2p.h +++ b/src/p2p/p2p.h @@ -441,6 +441,15 @@ struct p2p_config { const struct p2p_peer_info *info, int new_device); + /** + * dev_lost - Notification of a lost P2P Device + * @ctx: Callback context from cb_ctx + * @dev_addr: P2P Device Address of the lost P2P Device + * + * This callback is used to notify that a P2P Device has been deleted. + */ + void (*dev_lost)(void *ctx, const u8 *dev_addr); + /** * go_neg_req_rx - Notification of a receive GO Negotiation Request * @ctx: Callback context from cb_ctx diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c index 657708a95..f69306090 100644 --- a/wpa_supplicant/notify.c +++ b/wpa_supplicant/notify.c @@ -351,8 +351,16 @@ void wpas_notify_resume(struct wpa_global *global) #ifdef CONFIG_P2P + void wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s, const u8 *dev_addr, int new_device) { } + + +void wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s, + const u8 *dev_addr) +{ +} + #endif /* CONFIG_P2P */ diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h index 9dfae1cac..b423830b0 100644 --- a/wpa_supplicant/notify.h +++ b/wpa_supplicant/notify.h @@ -80,5 +80,7 @@ void wpas_notify_resume(struct wpa_global *global); void wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s, const u8 *dev_addr, int new_device); +void wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s, + const u8 *dev_addr); #endif /* NOTIFY_H */ diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index d5061bcea..a7d07ecf3 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -1151,6 +1151,14 @@ void wpas_dev_found(void *ctx, const u8 *addr, } +static void wpas_dev_lost(void *ctx, const u8 *dev_addr) +{ + struct wpa_supplicant *wpa_s = ctx; + + wpas_notify_p2p_device_lost(wpa_s, dev_addr); +} + + static int wpas_start_listen(void *ctx, unsigned int freq, unsigned int duration, const struct wpabuf *probe_resp_ie) @@ -2331,6 +2339,7 @@ int wpas_p2p_init(struct wpa_global *global, struct wpa_supplicant *wpa_s) p2p.go_neg_completed = wpas_go_neg_completed; p2p.go_neg_req_rx = wpas_go_neg_req_rx; p2p.dev_found = wpas_dev_found; + p2p.dev_lost = wpas_dev_lost; p2p.start_listen = wpas_start_listen; p2p.stop_listen = wpas_stop_listen; p2p.send_probe_resp = wpas_send_probe_resp;