]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Stop listen state when listen-only duration is over
authorSyed Asifful Dayyan Rafiuddeen <syedd@broadcom.com>
Sat, 31 Aug 2013 15:09:15 +0000 (18:09 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 31 Aug 2013 15:09:15 +0000 (18:09 +0300)
Even after listen duration is over, P2P module remained in
P2P_LISTEN_ONLY state, which is blocking station mode scans. Fix this by
stopping P2P listen explicitly to update p2p_state to IDLE when listen
duration expires.

Signed-hostap: Syed Asifful Dayyan <syedd@broadcom.com>

src/p2p/p2p.c
src/p2p/p2p.h
wpa_supplicant/p2p_supplicant.c

index f3414dd9ef5d749e6741de2f358e9ffced3d12bc..178a8f6da92bb7163323c9ec52fe35debc83fc38 100644 (file)
@@ -1120,6 +1120,18 @@ void p2p_stop_listen_for_freq(struct p2p_data *p2p, int freq)
 }
 
 
+void p2p_stop_listen(struct p2p_data *p2p)
+{
+       if (p2p->state != P2P_LISTEN_ONLY) {
+               p2p_dbg(p2p, "Skip stop_listen since not in listen_only state.");
+               return;
+       }
+
+       p2p_stop_listen_for_freq(p2p, 0);
+       p2p_set_state(p2p, P2P_IDLE);
+}
+
+
 void p2p_stop_find(struct p2p_data *p2p)
 {
        p2p_stop_find_for_freq(p2p, 0);
index 1f1fa67124ee10db026e04761e1a955a9a6394d8..9b6921e556375fd528bb1725a01f8d9b98281aa0 100644 (file)
@@ -903,6 +903,12 @@ void p2p_stop_find_for_freq(struct p2p_data *p2p, int freq);
  */
 int p2p_listen(struct p2p_data *p2p, unsigned int timeout);
 
+/**
+ * p2p_stop_listen - Stop P2P Listen
+ * @p2p: P2P module context from p2p_init()
+ */
+void p2p_stop_listen(struct p2p_data *p2p);
+
 /**
  * p2p_connect - Start P2P group formation (GO negotiation)
  * @p2p: P2P module context from p2p_init()
index 4b0e0eeb24da3e64867fb6768f9876cb86b554bd..f8c8b0ae6bb3cc3211172392707fc350bc83382f 100644 (file)
@@ -4130,6 +4130,12 @@ void wpas_p2p_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
        if (wpa_s->p2p_long_listen > 0) {
                wpa_printf(MSG_DEBUG, "P2P: Continuing long Listen state");
                wpas_p2p_listen_start(wpa_s, wpa_s->p2p_long_listen);
+       } else {
+               /*
+                * When listen duration is over, stop listen & update p2p_state
+                * to IDLE.
+                */
+               p2p_stop_listen(wpa_s->global->p2p);
        }
 }