u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid) { u8 *pos = eid; u8 len = 0, i; if (hapd->conf->tdls & (TDLS_PROHIBIT | TDLS_PROHIBIT_CHAN_SWITCH)) len = 5; if (len < 4 && hapd->conf->interworking) len = 4; if (len < 3 && hapd->conf->wnm_sleep_mode) len = 3; if (len < 1 && hapd->iconf->obss_interval) len = 1; if (len < 7 && hapd->conf->ssid.utf8_ssid) len = 7; if (len < 9 && (hapd->conf->ftm_initiator || hapd->conf->ftm_responder)) len = 9; #ifdef CONFIG_WNM_AP if (len < 4) len = 4; #endif /* CONFIG_WNM_AP */ #ifdef CONFIG_HS20 if (hapd->conf->hs20 && len < 6) len = 6; #endif /* CONFIG_HS20 */ #ifdef CONFIG_MBO if (hapd->conf->mbo_enabled && len < 6) len = 6; #endif /* CONFIG_MBO */ #ifdef CONFIG_FILS if ((!(hapd->conf->wpa & WPA_PROTO_RSN) || !wpa_key_mgmt_fils(hapd->conf->wpa_key_mgmt)) && len < 10) len = 10; #endif /* CONFIG_FILS */ if (len < hapd->iface->extended_capa_len) len = hapd->iface->extended_capa_len; if (len == 0) return eid; *pos++ = WLAN_EID_EXT_CAPAB; *pos++ = len; for (i = 0; i < len; i++, pos++) { hostapd_ext_capab_byte(hapd, pos, i); if (i < hapd->iface->extended_capa_len) { *pos &= ~hapd->iface->extended_capa_mask[i]; *pos |= hapd->iface->extended_capa[i]; } } while (len > 0 && eid[1 + len] == 0) { len--; eid[1] = len; } if (len == 0) return eid; return eid + 2 + len; }
u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid) { u8 *pos = eid; u8 len = 0, i; if (hapd->conf->tdls & (TDLS_PROHIBIT | TDLS_PROHIBIT_CHAN_SWITCH)) len = 5; if (len < 4 && hapd->conf->interworking) len = 4; if (len < 3 && hapd->conf->wnm_sleep_mode) len = 3; if (len < 1 && hapd->iconf->obss_interval) len = 1; if (len < 7 && hapd->conf->ssid.utf8_ssid) len = 7; #ifdef CONFIG_WNM if (len < 4) len = 4; #endif /* CONFIG_WNM */ #ifdef CONFIG_HS20 if (hapd->conf->hs20 && len < 6) len = 6; #endif /* CONFIG_HS20 */ if (len < hapd->iface->extended_capa_len) len = hapd->iface->extended_capa_len; if (len == 0) return eid; *pos++ = WLAN_EID_EXT_CAPAB; *pos++ = len; for (i = 0; i < len; i++, pos++) { hostapd_ext_capab_byte(hapd, pos, i); if (i < hapd->iface->extended_capa_len) { *pos &= ~hapd->iface->extended_capa_mask[i]; *pos |= hapd->iface->extended_capa[i]; } } while (len > 0 && eid[1 + len] == 0) { len--; eid[1] = len; } if (len == 0) return eid; return eid + 2 + len; }