mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-28 18:28:23 -05:00
wpa_s AP mode: complete only when setup is complete
The AP code might, currently only in the case of HT40, defer actual enabling to after a scan. In this case, the wpa_s AP code gets confused. Add a callback for it to use and make it use it to finish only when the setup has actually completed. With appropriate hacks in place this allows using HT40 in P2P mode. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
c202f19c68
commit
c76e5d7f9b
@ -784,6 +784,9 @@ int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hapd->setup_complete_cb)
|
||||||
|
hapd->setup_complete_cb(hapd->setup_complete_cb_ctx);
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
|
wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
|
||||||
iface->bss[0]->conf->iface);
|
iface->bss[0]->conf->iface);
|
||||||
|
|
||||||
|
@ -145,6 +145,9 @@ struct hostapd_data {
|
|||||||
int authorized);
|
int authorized);
|
||||||
void *sta_authorized_cb_ctx;
|
void *sta_authorized_cb_ctx;
|
||||||
|
|
||||||
|
void (*setup_complete_cb)(void *ctx);
|
||||||
|
void *setup_complete_cb_ctx;
|
||||||
|
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
struct p2p_data *p2p;
|
struct p2p_data *p2p;
|
||||||
struct p2p_group *p2p_group;
|
struct p2p_group *p2p_group;
|
||||||
|
@ -293,6 +293,18 @@ static void ap_wps_reg_success_cb(void *ctx, const u8 *mac_addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void wpas_ap_configured_cb(void *ctx)
|
||||||
|
{
|
||||||
|
struct wpa_supplicant *wpa_s = ctx;
|
||||||
|
|
||||||
|
wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
|
||||||
|
|
||||||
|
if (wpa_s->ap_configured_cb)
|
||||||
|
wpa_s->ap_configured_cb(wpa_s->ap_configured_cb_ctx,
|
||||||
|
wpa_s->ap_configured_cb_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
|
int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid)
|
struct wpa_ssid *ssid)
|
||||||
{
|
{
|
||||||
@ -427,6 +439,8 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
|
|||||||
wpa_s, ssid->p2p_persistent_group,
|
wpa_s, ssid->p2p_persistent_group,
|
||||||
ssid->mode == WPAS_MODE_P2P_GROUP_FORMATION);
|
ssid->mode == WPAS_MODE_P2P_GROUP_FORMATION);
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
hapd_iface->bss[i]->setup_complete_cb = wpas_ap_configured_cb;
|
||||||
|
hapd_iface->bss[i]->setup_complete_cb_ctx = wpa_s;
|
||||||
}
|
}
|
||||||
|
|
||||||
os_memcpy(hapd_iface->bss[0]->own_addr, wpa_s->own_addr, ETH_ALEN);
|
os_memcpy(hapd_iface->bss[0]->own_addr, wpa_s->own_addr, ETH_ALEN);
|
||||||
@ -442,11 +456,6 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
|
|||||||
wpa_s->current_ssid = ssid;
|
wpa_s->current_ssid = ssid;
|
||||||
os_memcpy(wpa_s->bssid, wpa_s->own_addr, ETH_ALEN);
|
os_memcpy(wpa_s->bssid, wpa_s->own_addr, ETH_ALEN);
|
||||||
wpa_s->assoc_freq = ssid->frequency;
|
wpa_s->assoc_freq = ssid->frequency;
|
||||||
wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
|
|
||||||
|
|
||||||
if (wpa_s->ap_configured_cb)
|
|
||||||
wpa_s->ap_configured_cb(wpa_s->ap_configured_cb_ctx,
|
|
||||||
wpa_s->ap_configured_cb_data);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user