Set extended capabilities as described in IEEE Std 802.11-2020 section 9.4.2.26 Extended Capabilities element. Co-developed-by: John Crispin <john@xxxxxxxxxxx> Signed-off-by: John Crispin <john@xxxxxxxxxxx> Signed-off-by: Aloka Dixit <quic_alokad@xxxxxxxxxxx> --- src/ap/beacon.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/ap/beacon.c b/src/ap/beacon.c index b2b2bfa8babe..be0f0658155a 100644 --- a/src/ap/beacon.c +++ b/src/ap/beacon.c @@ -511,12 +511,41 @@ static u8 * hostapd_set_mbssid_beacon(struct hostapd_data *hapd, } +static u8 * hostapd_ext_capab_mbssid(struct hostapd_data *hapd, u8 *eid, + u8 *eid_ext_cap, u8 ema_periodicity) +{ + size_t len; + + if (eid == eid_ext_cap) + return eid; + + len = eid_ext_cap[1]; + eid_ext_cap += 2; + + if (!hapd->iconf->mbssid && len >= 3) + eid_ext_cap[2] &= ~0x40; + + if (!hapd->iconf->ema && len >= 11) + eid_ext_cap[10] &= ~0x08; + + if (hapd->iconf->mbssid && ema_periodicity <= 1) { + while (len < 11) { + *eid++ = 0x00; + len++; + } + eid_ext_cap[10] |= 0x01; + } + + return eid; +} + + static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd, const struct ieee80211_mgmt *req, int is_p2p, size_t *resp_len) { struct ieee80211_mgmt *resp; - u8 *pos, *epos, *csa_pos; + u8 *pos, *epos, *csa_pos, *ext_cap_pos; size_t buflen; hapd = hostapd_mbssid_get_tx_bss(hapd); @@ -627,7 +656,9 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd, pos = hostapd_eid_mbssid(hapd, pos, epos, WLAN_FC_STYPE_PROBE_RESP, 0, NULL); + ext_cap_pos = pos; pos = hostapd_eid_ext_capab(hapd, pos); + pos = hostapd_ext_capab_mbssid(hapd, pos, ext_cap_pos, 1); pos = hostapd_eid_time_adv(hapd, pos); pos = hostapd_eid_time_zone(hapd, pos); @@ -1523,7 +1554,7 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd, size_t resp_len = 0; #ifdef NEED_AP_MLME u16 capab_info; - u8 *pos, *tailpos, *tailend, *csa_pos; + u8 *pos, *tailpos, *tailend, *csa_pos, *ext_cap_pos; #endif /* NEED_AP_MLME */ os_memset(params, 0, sizeof(*params)); @@ -1656,7 +1687,10 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd, tailpos = hostapd_eid_ht_operation(hapd, tailpos); tailpos = hostapd_set_mbssid_beacon(hapd, params, tailpos); + ext_cap_pos = tailpos; tailpos = hostapd_eid_ext_capab(hapd, tailpos); + tailpos = hostapd_ext_capab_mbssid(hapd, tailpos, ext_cap_pos, + params->mbssid_elem_count); /* * TODO: Time Advertisement element should only be included in some -- 2.31.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap