hostapd: Add support for testing Probe Response frame elements
Add support for additional (vendor) elements to be added to only Probe Response frames, for testing. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
a6062568ab
commit
d43eb71da7
6 changed files with 27 additions and 0 deletions
|
@ -4516,6 +4516,9 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
bss->eapol_m3_no_encrypt = atoi(pos);
|
bss->eapol_m3_no_encrypt = atoi(pos);
|
||||||
} else if (os_strcmp(buf, "test_assoc_comeback_type") == 0) {
|
} else if (os_strcmp(buf, "test_assoc_comeback_type") == 0) {
|
||||||
bss->test_assoc_comeback_type = atoi(pos);
|
bss->test_assoc_comeback_type = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "presp_elements") == 0) {
|
||||||
|
if (parse_wpabuf_hex(line, buf, &bss->presp_elements, pos))
|
||||||
|
return 1;
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
#ifdef CONFIG_SAE
|
#ifdef CONFIG_SAE
|
||||||
} else if (os_strcmp(buf, "sae_password") == 0) {
|
} else if (os_strcmp(buf, "sae_password") == 0) {
|
||||||
|
|
|
@ -3216,6 +3216,13 @@ own_ip_addr=127.0.0.1
|
||||||
# attempt (wpa_pairwise_update_count). This will trigger a timeout on all
|
# attempt (wpa_pairwise_update_count). This will trigger a timeout on all
|
||||||
# previous attempts and thus delays the frame. (testing only)
|
# previous attempts and thus delays the frame. (testing only)
|
||||||
#delay_eapol_tx=0
|
#delay_eapol_tx=0
|
||||||
|
#
|
||||||
|
# Additional elements for Probe Response frames.
|
||||||
|
# This parameter can be used to add additional element(s) to the end of the
|
||||||
|
# Probe Response frames. The format for these element(s) is a hexdump of the
|
||||||
|
# raw information elements (id+len+payload for one or more elements).
|
||||||
|
# These elements are added after the 'vendor_elements'.
|
||||||
|
#presp_elements=
|
||||||
|
|
||||||
##### Multiple BSSID support ##################################################
|
##### Multiple BSSID support ##################################################
|
||||||
#
|
#
|
||||||
|
|
|
@ -967,6 +967,7 @@ void hostapd_config_free_bss(struct hostapd_bss_config *conf)
|
||||||
wpabuf_free(conf->igtk_rsc_override);
|
wpabuf_free(conf->igtk_rsc_override);
|
||||||
wpabuf_free(conf->eapol_m1_elements);
|
wpabuf_free(conf->eapol_m1_elements);
|
||||||
wpabuf_free(conf->eapol_m3_elements);
|
wpabuf_free(conf->eapol_m3_elements);
|
||||||
|
wpabuf_free(conf->presp_elements);
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
os_free(conf->no_probe_resp_if_seen_on);
|
os_free(conf->no_probe_resp_if_seen_on);
|
||||||
|
|
|
@ -709,6 +709,7 @@ struct hostapd_bss_config {
|
||||||
struct wpabuf *eapol_m3_elements;
|
struct wpabuf *eapol_m3_elements;
|
||||||
bool eapol_m3_no_encrypt;
|
bool eapol_m3_no_encrypt;
|
||||||
int test_assoc_comeback_type;
|
int test_assoc_comeback_type;
|
||||||
|
struct wpabuf *presp_elements;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
u16 eht_oper_puncturing_override;
|
u16 eht_oper_puncturing_override;
|
||||||
|
|
|
@ -208,6 +208,9 @@ int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
|
||||||
|
|
||||||
add_buf(&beacon, hapd->conf->vendor_elements);
|
add_buf(&beacon, hapd->conf->vendor_elements);
|
||||||
add_buf(&proberesp, hapd->conf->vendor_elements);
|
add_buf(&proberesp, hapd->conf->vendor_elements);
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
add_buf(&proberesp, hapd->conf->presp_elements);
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
add_buf(&assocresp, hapd->conf->assocresp_elements);
|
add_buf(&assocresp, hapd->conf->assocresp_elements);
|
||||||
|
|
||||||
*beacon_ret = beacon;
|
*beacon_ret = beacon;
|
||||||
|
|
|
@ -649,6 +649,10 @@ static size_t hostapd_probe_resp_elems_len(struct hostapd_data *hapd,
|
||||||
#endif /* CONFIG_FST */
|
#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);
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (hapd->conf->presp_elements)
|
||||||
|
buflen += wpabuf_len(hapd->conf->presp_elements);
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
if (hapd->conf->vendor_vht) {
|
if (hapd->conf->vendor_vht) {
|
||||||
buflen += 5 + 2 + sizeof(struct ieee80211_vht_capabilities) +
|
buflen += 5 + 2 + sizeof(struct ieee80211_vht_capabilities) +
|
||||||
2 + sizeof(struct ieee80211_vht_operation);
|
2 + sizeof(struct ieee80211_vht_operation);
|
||||||
|
@ -885,6 +889,14 @@ static u8 * hostapd_probe_resp_fill_elems(struct hostapd_data *hapd,
|
||||||
pos += wpabuf_len(hapd->conf->vendor_elements);
|
pos += wpabuf_len(hapd->conf->vendor_elements);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (hapd->conf->presp_elements) {
|
||||||
|
os_memcpy(pos, wpabuf_head(hapd->conf->presp_elements),
|
||||||
|
wpabuf_len(hapd->conf->presp_elements));
|
||||||
|
pos += wpabuf_len(hapd->conf->presp_elements);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue