Browse Source

WPS: Do not update Beacon IEs before initial IE set

This avoids a request to the driver to first start beaconing before
the WPA/RSN IE has been generated and then immediately changing the
beacon IEs once the WPA/RSN IE is ready.
Jouni Malinen 13 years ago
parent
commit
bc45d4279f
3 changed files with 4 additions and 1 deletions
  1. 1 0
      src/ap/beacon.c
  2. 1 0
      src/ap/hostapd.h
  3. 2 1
      src/ap/wps_hostapd.c

+ 1 - 0
src/ap/beacon.c

@@ -403,6 +403,7 @@ void ieee802_11_set_beacon(struct hostapd_data *hapd)
 	if ((hapd->conf->p2p & (P2P_ENABLED | P2P_GROUP_OWNER)) == P2P_ENABLED)
 		goto no_beacon;
 #endif /* CONFIG_P2P */
+	hapd->beacon_set_done = 1;
 
 #define BEACON_HEAD_BUF_SIZE 256
 #define BEACON_TAIL_BUF_SIZE 512

+ 1 - 0
src/ap/hostapd.h

@@ -115,6 +115,7 @@ struct hostapd_data {
 	struct l2_packet_data *l2;
 	struct wps_context *wps;
 
+	int beacon_set_done;
 	struct wpabuf *wps_beacon_ie;
 	struct wpabuf *wps_probe_resp_ie;
 #ifdef CONFIG_WPS

+ 2 - 1
src/ap/wps_hostapd.c

@@ -141,7 +141,8 @@ static int hostapd_wps_set_ie_cb(void *ctx, struct wpabuf *beacon_ie,
 	hapd->wps_beacon_ie = beacon_ie;
 	wpabuf_free(hapd->wps_probe_resp_ie);
 	hapd->wps_probe_resp_ie = probe_resp_ie;
-	ieee802_11_set_beacon(hapd);
+	if (hapd->beacon_set_done)
+		ieee802_11_set_beacon(hapd);
 	return hostapd_set_ap_wps_ie(hapd);
 }