OCE: Move OCE checks to IE formation from hostapd initialization
Earlier, the OCE flags were checked during hostapd initialization. This doesn't address few cases like for example when the interface is added from control interface. Move the OCE flag checks to the functions that are forming the MBO/OCE IEs to cover all the different paths for enabling a BSS. Also use macros as appropriate for readability. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
1695b4dc37
commit
0f0aa2a640
4 changed files with 18 additions and 33 deletions
|
@ -873,27 +873,8 @@ int main(int argc, char *argv[])
|
|||
*/
|
||||
interfaces.terminate_on_error = interfaces.count;
|
||||
for (i = 0; i < interfaces.count; i++) {
|
||||
if (hostapd_driver_init(interfaces.iface[i]))
|
||||
goto out;
|
||||
#ifdef CONFIG_MBO
|
||||
for (j = 0; j < interfaces.iface[i]->num_bss; j++) {
|
||||
struct hostapd_data *hapd = interfaces.iface[i]->bss[j];
|
||||
|
||||
if (hapd && (hapd->conf->oce & OCE_STA_CFON) &&
|
||||
(interfaces.iface[i]->drv_flags &
|
||||
WPA_DRIVER_FLAGS_OCE_STA_CFON))
|
||||
hapd->enable_oce = OCE_STA_CFON;
|
||||
|
||||
if (hapd && (hapd->conf->oce & OCE_AP) &&
|
||||
(interfaces.iface[i]->drv_flags &
|
||||
WPA_DRIVER_FLAGS_OCE_STA_CFON)) {
|
||||
/* TODO: Need to add OCE-AP support */
|
||||
wpa_printf(MSG_ERROR,
|
||||
"OCE-AP feature is not yet supported");
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_MBO */
|
||||
if (hostapd_setup_interface(interfaces.iface[i]))
|
||||
if (hostapd_driver_init(interfaces.iface[i]) ||
|
||||
hostapd_setup_interface(interfaces.iface[i]))
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
@ -176,7 +176,8 @@ int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
|
|||
#endif /* CONFIG_HS20 */
|
||||
|
||||
#ifdef CONFIG_MBO
|
||||
if (hapd->conf->mbo_enabled || hapd->enable_oce) {
|
||||
if (hapd->conf->mbo_enabled ||
|
||||
OCE_STA_CFON_ENABLED(hapd) || OCE_AP_ENABLED(hapd)) {
|
||||
pos = hostapd_eid_mbo(hapd, buf, sizeof(buf));
|
||||
if (add_buf_data(&beacon, buf, pos - buf) < 0 ||
|
||||
add_buf_data(&proberesp, buf, pos - buf) < 0 ||
|
||||
|
|
|
@ -14,6 +14,13 @@
|
|||
#include "ap_config.h"
|
||||
#include "drivers/driver.h"
|
||||
|
||||
#define OCE_STA_CFON_ENABLED(hapd) \
|
||||
((hapd->conf->oce & OCE_STA_CFON) && \
|
||||
(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_OCE_STA_CFON))
|
||||
#define OCE_AP_ENABLED(hapd) \
|
||||
((hapd->conf->oce & OCE_AP) && \
|
||||
(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_OCE_AP))
|
||||
|
||||
struct wpa_ctrl_dst;
|
||||
struct radius_server_data;
|
||||
struct upnp_wps_device_sm;
|
||||
|
@ -324,11 +331,6 @@ struct hostapd_data {
|
|||
|
||||
#ifdef CONFIG_MBO
|
||||
unsigned int mbo_assoc_disallow;
|
||||
/**
|
||||
* enable_oce - Enable OCE if it is enabled by user and device also
|
||||
* supports OCE.
|
||||
*/
|
||||
u8 enable_oce;
|
||||
#endif /* CONFIG_MBO */
|
||||
|
||||
struct dl_list nr_db;
|
||||
|
|
|
@ -552,7 +552,8 @@ u8 * hostapd_eid_mbo(struct hostapd_data *hapd, u8 *eid, size_t len)
|
|||
u8 mbo[9], *mbo_pos = mbo;
|
||||
u8 *pos = eid;
|
||||
|
||||
if (!hapd->conf->mbo_enabled && !hapd->enable_oce)
|
||||
if (!hapd->conf->mbo_enabled &&
|
||||
!OCE_STA_CFON_ENABLED(hapd) && !OCE_AP_ENABLED(hapd))
|
||||
return eid;
|
||||
|
||||
if (hapd->conf->mbo_enabled) {
|
||||
|
@ -568,12 +569,11 @@ u8 * hostapd_eid_mbo(struct hostapd_data *hapd, u8 *eid, size_t len)
|
|||
*mbo_pos++ = hapd->mbo_assoc_disallow;
|
||||
}
|
||||
|
||||
if (hapd->enable_oce & (OCE_AP | OCE_STA_CFON)) {
|
||||
if (OCE_STA_CFON_ENABLED(hapd) || OCE_AP_ENABLED(hapd)) {
|
||||
u8 ctrl;
|
||||
|
||||
ctrl = OCE_RELEASE;
|
||||
if ((hapd->enable_oce & (OCE_AP | OCE_STA_CFON)) ==
|
||||
OCE_STA_CFON)
|
||||
if (OCE_STA_CFON_ENABLED(hapd) && !OCE_AP_ENABLED(hapd))
|
||||
ctrl |= OCE_IS_STA_CFON;
|
||||
|
||||
*mbo_pos++ = OCE_ATTR_ID_CAPA_IND;
|
||||
|
@ -591,7 +591,8 @@ u8 hostapd_mbo_ie_len(struct hostapd_data *hapd)
|
|||
{
|
||||
u8 len;
|
||||
|
||||
if (!hapd->conf->mbo_enabled && !hapd->enable_oce)
|
||||
if (!hapd->conf->mbo_enabled &&
|
||||
!OCE_STA_CFON_ENABLED(hapd) && !OCE_AP_ENABLED(hapd))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
@ -603,7 +604,7 @@ u8 hostapd_mbo_ie_len(struct hostapd_data *hapd)
|
|||
len += 3 + (hapd->mbo_assoc_disallow ? 3 : 0);
|
||||
|
||||
/* OCE capability indication attribute (3) */
|
||||
if (hapd->enable_oce & (OCE_AP | OCE_STA_CFON))
|
||||
if (OCE_STA_CFON_ENABLED(hapd) || OCE_AP_ENABLED(hapd))
|
||||
len += 3;
|
||||
|
||||
return len;
|
||||
|
|
Loading…
Reference in a new issue