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