From 3103f345761eb644e04f4337cec6c39062c04340 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Wed, 2 Feb 2011 17:30:15 +0200 Subject: [PATCH] P2P: Add wpas_p2p_disconnect() Add a new API function wpas_p2p_disconnect() to disconnect from or dissolve a group. Signed-off-by: Johannes Berg --- wpa_supplicant/p2p_supplicant.c | 35 ++++++++++++++++++++++++--------- wpa_supplicant/p2p_supplicant.h | 1 + 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index bcd28c41b..dfc50c529 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -3034,8 +3034,7 @@ int wpas_p2p_group_remove(struct wpa_supplicant *wpa_s, const char *ifname) while (wpa_s) { prev = wpa_s; wpa_s = wpa_s->next; - prev->removal_reason = P2P_GROUP_REMOVAL_REQUESTED; - wpas_p2p_group_delete(prev); + wpas_p2p_disconnect(prev); } return 0; } @@ -3045,13 +3044,7 @@ int wpas_p2p_group_remove(struct wpa_supplicant *wpa_s, const char *ifname) break; } - if (wpa_s == NULL) - return -1; - - wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED; - wpas_p2p_group_delete(wpa_s); - - return 0; + return wpas_p2p_disconnect(wpa_s); } @@ -4156,3 +4149,27 @@ int wpas_p2p_unauthorize(struct wpa_supplicant *wpa_s, const char *addr) return p2p_unauthorize(p2p, peer); } + + +/** + * wpas_p2p_disconnect - Disconnect from a P2P Group + * @wpa_s: Pointer to wpa_supplicant data + * Returns: 0 on success, -1 on failure + * + * This can be used to disconnect from a group in which the local end is a P2P + * Client or to end a P2P Group in case the local end is the Group Owner. If a + * virtual network interface was created for this group, that interface will be + * removed. Otherwise, only the configured P2P group network will be removed + * from the interface. + */ +int wpas_p2p_disconnect(struct wpa_supplicant *wpa_s) +{ + + if (wpa_s == NULL) + return -1; + + wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED; + wpas_p2p_group_delete(wpa_s); + + return 0; +} diff --git a/wpa_supplicant/p2p_supplicant.h b/wpa_supplicant/p2p_supplicant.h index 7f5945318..7959a2543 100644 --- a/wpa_supplicant/p2p_supplicant.h +++ b/wpa_supplicant/p2p_supplicant.h @@ -121,5 +121,6 @@ void wpas_p2p_interface_unavailable(struct wpa_supplicant *wpa_s); void wpas_p2p_update_best_channels(struct wpa_supplicant *wpa_s, int freq_24, int freq_5, int freq_overall); int wpas_p2p_unauthorize(struct wpa_supplicant *wpa_s, const char *addr); +int wpas_p2p_disconnect(struct wpa_supplicant *wpa_s); #endif /* P2P_SUPPLICANT_H */