hostapd: Only update already-set beacons when processing OLBC

When hostapd is about to start an AP using HT40, it starts a scan to
check whether it is allowed or not. If OLBC is detected before the
scan has completed, it sets the beacons prematurely.

To fix this, instead of setting all beacons when OLBC is detected,
only update the ones that have already been started.

Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
Luciano Coelho 2012-04-01 18:12:04 +03:00 committed by Jouni Malinen
parent c6e86b63d2
commit 370b076197
3 changed files with 13 additions and 2 deletions

View file

@ -318,7 +318,7 @@ void ap_list_process_beacon(struct hostapd_iface *iface,
#endif /* CONFIG_IEEE80211N */ #endif /* CONFIG_IEEE80211N */
if (set_beacon) if (set_beacon)
ieee802_11_set_beacons(iface); ieee802_11_update_beacons(iface);
} }
@ -373,7 +373,7 @@ static void ap_list_timer(void *eloop_ctx, void *timeout_ctx)
} }
if (set_beacon) if (set_beacon)
ieee802_11_set_beacons(iface); ieee802_11_update_beacons(iface);
} }

View file

@ -700,4 +700,14 @@ void ieee802_11_set_beacons(struct hostapd_iface *iface)
ieee802_11_set_beacon(iface->bss[i]); ieee802_11_set_beacon(iface->bss[i]);
} }
/* only update beacons if started */
void ieee802_11_update_beacons(struct hostapd_iface *iface)
{
size_t i;
for (i = 0; i < iface->num_bss; i++)
if (iface->bss[i]->beacon_set_done)
ieee802_11_set_beacon(iface->bss[i]);
}
#endif /* CONFIG_NATIVE_WINDOWS */ #endif /* CONFIG_NATIVE_WINDOWS */

View file

@ -22,5 +22,6 @@ void handle_probe_req(struct hostapd_data *hapd,
const struct ieee80211_mgmt *mgmt, size_t len); const struct ieee80211_mgmt *mgmt, size_t len);
void ieee802_11_set_beacon(struct hostapd_data *hapd); void ieee802_11_set_beacon(struct hostapd_data *hapd);
void ieee802_11_set_beacons(struct hostapd_iface *iface); void ieee802_11_set_beacons(struct hostapd_iface *iface);
void ieee802_11_update_beacons(struct hostapd_iface *iface);
#endif /* BEACON_H */ #endif /* BEACON_H */