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 <johannes.berg@intel.com>
This commit is contained in:
parent
bbeee9b0db
commit
3103f34576
2 changed files with 27 additions and 9 deletions
|
@ -3034,8 +3034,7 @@ int wpas_p2p_group_remove(struct wpa_supplicant *wpa_s, const char *ifname)
|
||||||
while (wpa_s) {
|
while (wpa_s) {
|
||||||
prev = wpa_s;
|
prev = wpa_s;
|
||||||
wpa_s = wpa_s->next;
|
wpa_s = wpa_s->next;
|
||||||
prev->removal_reason = P2P_GROUP_REMOVAL_REQUESTED;
|
wpas_p2p_disconnect(prev);
|
||||||
wpas_p2p_group_delete(prev);
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3045,13 +3044,7 @@ int wpas_p2p_group_remove(struct wpa_supplicant *wpa_s, const char *ifname)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wpa_s == NULL)
|
return wpas_p2p_disconnect(wpa_s);
|
||||||
return -1;
|
|
||||||
|
|
||||||
wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED;
|
|
||||||
wpas_p2p_group_delete(wpa_s);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4156,3 +4149,27 @@ int wpas_p2p_unauthorize(struct wpa_supplicant *wpa_s, const char *addr)
|
||||||
|
|
||||||
return p2p_unauthorize(p2p, peer);
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -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,
|
void wpas_p2p_update_best_channels(struct wpa_supplicant *wpa_s,
|
||||||
int freq_24, int freq_5, int freq_overall);
|
int freq_24, int freq_5, int freq_overall);
|
||||||
int wpas_p2p_unauthorize(struct wpa_supplicant *wpa_s, const char *addr);
|
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 */
|
#endif /* P2P_SUPPLICANT_H */
|
||||||
|
|
Loading…
Reference in a new issue