aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant/wps_supplicant.c
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2011-06-27 15:19:46 -0700
committerDmitry Shmidt <dimitrysh@google.com>2011-06-27 15:20:55 -0700
commit75ecf5267604f166b85a7ee2cf0d9cb682966680 (patch)
tree0056e7ebf5af72a85abe6c0868de6ffc2f08eaae /wpa_supplicant/wps_supplicant.c
parente61a2d6db6113da5fad91660764afdb0596dbc46 (diff)
downloadexternal_wpa_supplicant_8-75ecf5267604f166b85a7ee2cf0d9cb682966680.zip
external_wpa_supplicant_8-75ecf5267604f166b85a7ee2cf0d9cb682966680.tar.gz
external_wpa_supplicant_8-75ecf5267604f166b85a7ee2cf0d9cb682966680.tar.bz2
Accumulative patch from commit 20a0b03debef66cc57b0c34a05f8be5229be907c
atheros: Fix auth_alg configuration for static WEP nl80211: Implement set_rate_sets for non-hostapd AP case nl80211: Enable more AP callbacks for non-hostapd AP mode nl80211: Re-order functions to group AP/hostapd specific code Remove compiler warning for non-P2P builds random: Add support for maintaining internal entropy store over restarts Fix a compiler warning on WPS-AP-without-UPnP builds P2P: Retry provision discovery requests in IDLE state P2P: Add callback for provision discovery failure P2P: Add wpas_notify_p2p_provision_discovery() P2P: Add group started notification DBus: Move wpas_dbus_new_decompose_object_path() DBus: Refactor array adding, add binary arrays DBus: Add support for P2P primitives DBus: Fix some typos on comments Fix CONFIG_AP=y build without CONFIG_P2P=y Fix non-P2P D-Bus build nl80211: Add support for driver-based PMKSA cache P2P: Start GO without extra scan step Remove a compiler warning on uninitialized variable Add EVENT_RX_ACTION handler for hostapd Fix hostapd build without NEED_AP_MLME=y Fix AP selection to check privacy mismatch and IBSS with WPA/RSN IE bsd: Fix set_key() sequence number endian issue Add a copyright and license statement for a radiotap header file Use nl80211 as an example instead of WEXT Add notes for CONFIG_WPS_ER build configuration option Fix CONFIG_NO_WPA_PASSPHRASE=y build hostapd: Don't mask out non-symmetric STA HT caps P2P: Enable P2P capability advertisement on D-Bus P2P: Update D-Bus network object semantics during group formation P2P: Show P2P peer signal level in D-Bus P2P device properties P2P: Fix P2P device signal level type in D-Bus P2P: Add dissasoc_low_ack in P2P device properties P2P: More complete persistent group management over D-Bus P2P: Add WpsFailed signal in P2P D-Bus P2P: Update listen and operating channel from P2P D-Bus P2P: Fix WpsFailed signal in P2P D-Bus atheros: Fix glibc 'invalid pointer' error when WPA_TRACE is enabled Clear WPA and EAPOL state machine config pointer on network removal 20a0b03debef66cc57b0c34a05f8be5229be907c Change-Id: I2b83bf86ba9c7a9a218638be7b4de31d209cdde1 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'wpa_supplicant/wps_supplicant.c')
-rw-r--r--wpa_supplicant/wps_supplicant.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/wpa_supplicant/wps_supplicant.c b/wpa_supplicant/wps_supplicant.c
index 778ccaf..e3388bd 100644
--- a/wpa_supplicant/wps_supplicant.c
+++ b/wpa_supplicant/wps_supplicant.c
@@ -24,6 +24,7 @@
#include "common/wpa_ctrl.h"
#include "eap_common/eap_wsc_common.h"
#include "eap_peer/eap.h"
+#include "eapol_supp/eapol_supp_sm.h"
#include "rsn_supp/wpa.h"
#include "config.h"
#include "wpa_supplicant_i.h"
@@ -470,6 +471,9 @@ static void wpa_supplicant_wps_event_fail(struct wpa_supplicant *wpa_s,
}
wpas_clear_wps(wpa_s);
wpas_notify_wps_event_fail(wpa_s, fail);
+#ifdef CONFIG_P2P
+ wpas_p2p_wps_failed(wpa_s, fail);
+#endif /* CONFIG_P2P */
}
@@ -670,7 +674,9 @@ enum wps_request_type wpas_wps_get_req_type(struct wpa_ssid *ssid)
static void wpas_clear_wps(struct wpa_supplicant *wpa_s)
{
int id;
- struct wpa_ssid *ssid, *remove_ssid = NULL;
+ struct wpa_ssid *ssid, *remove_ssid = NULL, *prev_current;
+
+ prev_current = wpa_s->current_ssid;
eloop_cancel_timeout(wpas_wps_timeout, wpa_s, NULL);
@@ -689,6 +695,11 @@ static void wpas_clear_wps(struct wpa_supplicant *wpa_s)
id = -1;
ssid = ssid->next;
if (id >= 0) {
+ if (prev_current == remove_ssid) {
+ wpa_sm_set_config(wpa_s->wpa, NULL);
+ eapol_sm_notify_config(wpa_s->eapol, NULL,
+ NULL);
+ }
wpas_notify_network_removed(wpa_s, remove_ssid);
wpa_config_remove_network(wpa_s->conf, id);
}
@@ -780,9 +791,18 @@ static void wpas_wps_reassoc(struct wpa_supplicant *wpa_s,
ssid = wpa_s->conf->ssid;
while (ssid) {
int was_disabled = ssid->disabled;
- ssid->disabled = ssid != selected;
- if (was_disabled != ssid->disabled)
- wpas_notify_network_enabled_changed(wpa_s, ssid);
+ /*
+ * In case the network object corresponds to a persistent group
+ * then do not send out network disabled signal. In addition,
+ * do not change disabled status of persistent network objects
+ * from 2 to 1 should we connect to another network.
+ */
+ if (was_disabled != 2) {
+ ssid->disabled = ssid != selected;
+ if (was_disabled != ssid->disabled)
+ wpas_notify_network_enabled_changed(wpa_s,
+ ssid);
+ }
ssid = ssid->next;
}
wpa_s->disconnected = 0;