FST: Add FST IEs into AP mode management frames
This adds the FST IEs received from the FST module into Beacon, Probe Response, and (Re)Association Response frames. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
037378ff31
commit
347827ff6e
3 changed files with 50 additions and 0 deletions
|
@ -81,6 +81,22 @@ int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
|
||||||
wpabuf_put_data(proberesp, buf, pos - buf);
|
wpabuf_put_data(proberesp, buf, pos - buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (hapd->iface->fst_ies) {
|
||||||
|
size_t add = wpabuf_len(hapd->iface->fst_ies);
|
||||||
|
|
||||||
|
if (wpabuf_resize(&beacon, add) < 0)
|
||||||
|
goto fail;
|
||||||
|
wpabuf_put_buf(beacon, hapd->iface->fst_ies);
|
||||||
|
if (wpabuf_resize(&proberesp, add) < 0)
|
||||||
|
goto fail;
|
||||||
|
wpabuf_put_buf(proberesp, hapd->iface->fst_ies);
|
||||||
|
if (wpabuf_resize(&assocresp, add) < 0)
|
||||||
|
goto fail;
|
||||||
|
wpabuf_put_buf(assocresp, hapd->iface->fst_ies);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
|
|
||||||
if (hapd->wps_beacon_ie) {
|
if (hapd->wps_beacon_ie) {
|
||||||
if (wpabuf_resize(&beacon, wpabuf_len(hapd->wps_beacon_ie)) <
|
if (wpabuf_resize(&beacon, wpabuf_len(hapd->wps_beacon_ie)) <
|
||||||
0)
|
0)
|
||||||
|
|
|
@ -377,6 +377,10 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
|
||||||
if (hapd->p2p_probe_resp_ie)
|
if (hapd->p2p_probe_resp_ie)
|
||||||
buflen += wpabuf_len(hapd->p2p_probe_resp_ie);
|
buflen += wpabuf_len(hapd->p2p_probe_resp_ie);
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (hapd->iface->fst_ies)
|
||||||
|
buflen += wpabuf_len(hapd->iface->fst_ies);
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
if (hapd->conf->vendor_elements)
|
if (hapd->conf->vendor_elements)
|
||||||
buflen += wpabuf_len(hapd->conf->vendor_elements);
|
buflen += wpabuf_len(hapd->conf->vendor_elements);
|
||||||
if (hapd->conf->vendor_vht) {
|
if (hapd->conf->vendor_vht) {
|
||||||
|
@ -449,6 +453,15 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
|
||||||
|
|
||||||
pos = hostapd_add_csa_elems(hapd, pos, (u8 *)resp,
|
pos = hostapd_add_csa_elems(hapd, pos, (u8 *)resp,
|
||||||
&hapd->cs_c_off_proberesp);
|
&hapd->cs_c_off_proberesp);
|
||||||
|
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (hapd->iface->fst_ies) {
|
||||||
|
os_memcpy(pos, wpabuf_head(hapd->iface->fst_ies),
|
||||||
|
wpabuf_len(hapd->iface->fst_ies));
|
||||||
|
pos += wpabuf_len(hapd->iface->fst_ies);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211AC
|
#ifdef CONFIG_IEEE80211AC
|
||||||
if (hapd->iconf->ieee80211ac && !hapd->conf->disable_11ac) {
|
if (hapd->iconf->ieee80211ac && !hapd->conf->disable_11ac) {
|
||||||
pos = hostapd_eid_vht_capabilities(hapd, pos);
|
pos = hostapd_eid_vht_capabilities(hapd, pos);
|
||||||
|
@ -797,6 +810,10 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
|
||||||
if (hapd->p2p_beacon_ie)
|
if (hapd->p2p_beacon_ie)
|
||||||
tail_len += wpabuf_len(hapd->p2p_beacon_ie);
|
tail_len += wpabuf_len(hapd->p2p_beacon_ie);
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (hapd->iface->fst_ies)
|
||||||
|
tail_len += wpabuf_len(hapd->iface->fst_ies);
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
if (hapd->conf->vendor_elements)
|
if (hapd->conf->vendor_elements)
|
||||||
tail_len += wpabuf_len(hapd->conf->vendor_elements);
|
tail_len += wpabuf_len(hapd->conf->vendor_elements);
|
||||||
|
|
||||||
|
@ -895,6 +912,15 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
|
||||||
tailpos = hostapd_eid_roaming_consortium(hapd, tailpos);
|
tailpos = hostapd_eid_roaming_consortium(hapd, tailpos);
|
||||||
tailpos = hostapd_add_csa_elems(hapd, tailpos, tail,
|
tailpos = hostapd_add_csa_elems(hapd, tailpos, tail,
|
||||||
&hapd->cs_c_off_beacon);
|
&hapd->cs_c_off_beacon);
|
||||||
|
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (hapd->iface->fst_ies) {
|
||||||
|
os_memcpy(tailpos, wpabuf_head(hapd->iface->fst_ies),
|
||||||
|
wpabuf_len(hapd->iface->fst_ies));
|
||||||
|
tailpos += wpabuf_len(hapd->iface->fst_ies);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211AC
|
#ifdef CONFIG_IEEE80211AC
|
||||||
if (hapd->iconf->ieee80211ac && !hapd->conf->disable_11ac) {
|
if (hapd->iconf->ieee80211ac && !hapd->conf->disable_11ac) {
|
||||||
tailpos = hostapd_eid_vht_capabilities(hapd, tailpos);
|
tailpos = hostapd_eid_vht_capabilities(hapd, tailpos);
|
||||||
|
|
|
@ -1632,6 +1632,14 @@ static void send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
if (sta->qos_map_enabled)
|
if (sta->qos_map_enabled)
|
||||||
p = hostapd_eid_qos_map_set(hapd, p);
|
p = hostapd_eid_qos_map_set(hapd, p);
|
||||||
|
|
||||||
|
#ifdef CONFIG_FST
|
||||||
|
if (hapd->iface->fst_ies) {
|
||||||
|
os_memcpy(p, wpabuf_head(hapd->iface->fst_ies),
|
||||||
|
wpabuf_len(hapd->iface->fst_ies));
|
||||||
|
p += wpabuf_len(hapd->iface->fst_ies);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FST */
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211AC
|
#ifdef CONFIG_IEEE80211AC
|
||||||
if (hapd->conf->vendor_vht && (sta->flags & WLAN_STA_VENDOR_VHT))
|
if (hapd->conf->vendor_vht && (sta->flags & WLAN_STA_VENDOR_VHT))
|
||||||
p = hostapd_eid_vendor_vht(hapd, p);
|
p = hostapd_eid_vendor_vht(hapd, p);
|
||||||
|
|
Loading…
Reference in a new issue