]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Move group removal reason to a function parameter
authorJouni Malinen <j@w1.fi>
Sat, 11 Aug 2012 09:41:31 +0000 (12:41 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 11 Aug 2012 09:41:31 +0000 (12:41 +0300)
wpa_s->removal_reason was set only when calling wpas_p2p_group_delete()
and while couple of call places did not set this, it should really be
set in each case. As such, it works better as a function parameter than
a variable in struct wpa_supplicant.

Signed-hostap: Jouni Malinen <j@w1.fi>

wpa_supplicant/p2p_supplicant.c
wpa_supplicant/wpa_supplicant_i.h

index 474478165ac58d57422fe8042a5933d8f67f42db..df65de971e5fc5d0547faf485cd6d0e895ecbf78 100644 (file)
 #define P2P_MAX_INITIAL_CONN_WAIT 10
 #endif /* P2P_MAX_INITIAL_CONN_WAIT */
 
+enum p2p_group_removal_reason {
+       P2P_GROUP_REMOVAL_UNKNOWN,
+       P2P_GROUP_REMOVAL_SILENT,
+       P2P_GROUP_REMOVAL_FORMATION_FAILED,
+       P2P_GROUP_REMOVAL_REQUESTED,
+       P2P_GROUP_REMOVAL_IDLE_TIMEOUT,
+       P2P_GROUP_REMOVAL_UNAVAILABLE,
+       P2P_GROUP_REMOVAL_GO_ENDING_SESSION
+};
+
 
 static void wpas_p2p_long_listen_timeout(void *eloop_ctx, void *timeout_ctx);
 static struct wpa_supplicant *
@@ -214,7 +224,8 @@ static struct wpa_supplicant * wpas_get_p2p_group(struct wpa_supplicant *wpa_s,
 }
 
 
-static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
+static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s,
+                                enum p2p_group_removal_reason removal_reason)
 {
        struct wpa_ssid *ssid;
        char *gtype;
@@ -235,11 +246,6 @@ static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
                        ssid = ssid->next;
                }
                if (ssid == NULL) {
-                       /*
-                        * Reset wpa_s->removal_reason to the default unknown
-                        * state.
-                        */
-                       wpa_s->removal_reason = P2P_GROUP_REMOVAL_UNKNOWN;
                        wpa_printf(MSG_ERROR, "P2P: P2P group interface "
                                   "not found");
                        return -1;
@@ -262,10 +268,13 @@ static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
                        P2P_EVENT_CROSS_CONNECT_DISABLE "%s %s",
                        wpa_s->ifname, wpa_s->cross_connect_uplink);
        }
-       switch (wpa_s->removal_reason) {
+       switch (removal_reason) {
        case P2P_GROUP_REMOVAL_REQUESTED:
                reason = " reason=REQUESTED";
                break;
+       case P2P_GROUP_REMOVAL_FORMATION_FAILED:
+               reason = " reason=FORMATION_FAILED";
+               break;
        case P2P_GROUP_REMOVAL_IDLE_TIMEOUT:
                reason = " reason=IDLE";
                break;
@@ -279,7 +288,7 @@ static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
                reason = "";
                break;
        }
-       if (!silent) {
+       if (removal_reason != P2P_GROUP_REMOVAL_SILENT) {
                wpa_msg(wpa_s->parent, MSG_INFO,
                        P2P_EVENT_GROUP_REMOVED "%s %s%s",
                        wpa_s->ifname, gtype, reason);
@@ -288,7 +297,7 @@ static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
        if (eloop_cancel_timeout(wpas_p2p_group_idle_timeout, wpa_s, NULL) > 0)
                wpa_printf(MSG_DEBUG, "P2P: Cancelled P2P group idle timeout");
 
-       if (!silent && ssid)
+       if (removal_reason != P2P_GROUP_REMOVAL_SILENT && ssid)
                wpas_notify_p2p_group_removed(wpa_s, ssid, gtype);
 
        if (wpa_s->p2p_group_interface != NOT_P2P_GROUP_INTERFACE) {
@@ -560,7 +569,8 @@ static void wpas_group_formation_completed(struct wpa_supplicant *wpa_s,
        if (!success) {
                wpa_msg(wpa_s->parent, MSG_INFO,
                        P2P_EVENT_GROUP_FORMATION_FAILURE);
-               wpas_p2p_group_delete(wpa_s, 0);
+               wpas_p2p_group_delete(wpa_s,
+                                     P2P_GROUP_REMOVAL_FORMATION_FAILED);
                return;
        }
 
@@ -4290,8 +4300,7 @@ static void wpas_p2p_group_idle_timeout(void *eloop_ctx, void *timeout_ctx)
 
        wpa_printf(MSG_DEBUG, "P2P: Group idle timeout reached - terminate "
                   "group");
-       wpa_s->removal_reason = P2P_GROUP_REMOVAL_IDLE_TIMEOUT;
-       wpas_p2p_group_delete(wpa_s, 0);
+       wpas_p2p_group_delete(wpa_s, P2P_GROUP_REMOVAL_IDLE_TIMEOUT);
 }
 
 
@@ -4370,8 +4379,8 @@ void wpas_p2p_deauth_notif(struct wpa_supplicant *wpa_s, const u8 *bssid,
            wpa_s->current_ssid->mode == WPAS_MODE_INFRA) {
                wpa_printf(MSG_DEBUG, "P2P: GO indicated that the P2P Group "
                           "session is ending");
-               wpa_s->removal_reason = P2P_GROUP_REMOVAL_GO_ENDING_SESSION;
-               wpas_p2p_group_delete(wpa_s, 0);
+               wpas_p2p_group_delete(wpa_s,
+                                     P2P_GROUP_REMOVAL_GO_ENDING_SESSION);
        }
 }
 
@@ -4739,7 +4748,8 @@ int wpas_p2p_cancel(struct wpa_supplicant *wpa_s)
                        found = 1;
                        eloop_cancel_timeout(wpas_p2p_group_formation_timeout,
                                             wpa_s->parent, NULL);
-                       wpas_p2p_group_delete(wpa_s, 0);
+                       wpas_p2p_group_delete(wpa_s,
+                                             P2P_GROUP_REMOVAL_REQUESTED);
                        break;
                }
        }
@@ -4760,8 +4770,7 @@ void wpas_p2p_interface_unavailable(struct wpa_supplicant *wpa_s)
 
        wpa_printf(MSG_DEBUG, "P2P: Remove group due to driver resource not "
                   "being available anymore");
-       wpa_s->removal_reason = P2P_GROUP_REMOVAL_UNAVAILABLE;
-       wpas_p2p_group_delete(wpa_s, 0);
+       wpas_p2p_group_delete(wpa_s, P2P_GROUP_REMOVAL_UNAVAILABLE);
 }
 
 
@@ -4807,8 +4816,7 @@ int wpas_p2p_disconnect(struct wpa_supplicant *wpa_s)
        if (wpa_s == NULL)
                return -1;
 
-       wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED;
-       return wpas_p2p_group_delete(wpa_s, 0);
+       return wpas_p2p_group_delete(wpa_s, P2P_GROUP_REMOVAL_REQUESTED);
 }
 
 
@@ -4892,7 +4900,7 @@ static void wpas_p2p_fallback_to_go_neg(struct wpa_supplicant *wpa_s,
        wpa_s = wpa_s->parent;
        offchannel_send_action_done(wpa_s);
        if (group_added)
-               wpas_p2p_group_delete(group, 1);
+               wpas_p2p_group_delete(group, P2P_GROUP_REMOVAL_SILENT);
        wpa_dbg(wpa_s, MSG_DEBUG, "P2P: Fall back to GO Negotiation");
        wpas_p2p_connect(wpa_s, wpa_s->pending_join_dev_addr, wpa_s->p2p_pin,
                         wpa_s->p2p_wps_method, wpa_s->p2p_persistent_group, 0,
index d6d94105605cb7d43518662a9aef47545eea3873..ba55c655fe32ffb3e138d73bdd4f8db142d68449 100644 (file)
@@ -514,14 +514,6 @@ struct wpa_supplicant {
         */
        char cross_connect_uplink[100];
 
-       enum {
-               P2P_GROUP_REMOVAL_UNKNOWN,
-               P2P_GROUP_REMOVAL_REQUESTED,
-               P2P_GROUP_REMOVAL_IDLE_TIMEOUT,
-               P2P_GROUP_REMOVAL_UNAVAILABLE,
-               P2P_GROUP_REMOVAL_GO_ENDING_SESSION
-       } removal_reason;
-
        unsigned int p2p_cb_on_scan_complete:1;
        unsigned int p2p_auto_join:1;
        unsigned int p2p_auto_pd:1;