OCV: Add support to override channel info OCI element (STA)
To support the STA testbed role, the STA has to use specified channel information in OCI element sent to the AP in EAPOL-Key msg 2/4, SA Query Request, and SA Query Response frames. Add override parameters to use the specified channel while populating OCI element in all these frames. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
c2080e8657
commit
2d118f557a
7 changed files with 47 additions and 0 deletions
|
@ -756,6 +756,14 @@ static void wpa_supplicant_process_1_of_4(struct wpa_sm *sm,
|
||||||
"Failed to get channel info for OCI element in EAPOL-Key 2/4");
|
"Failed to get channel info for OCI element in EAPOL-Key 2/4");
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (sm->oci_freq_override_eapol) {
|
||||||
|
wpa_printf(MSG_INFO,
|
||||||
|
"TEST: Override OCI KDE frequency %d -> %d MHz",
|
||||||
|
ci.frequency, sm->oci_freq_override_eapol);
|
||||||
|
ci.frequency = sm->oci_freq_override_eapol;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
if (ocv_insert_oci_kde(&ci, &pos) < 0)
|
if (ocv_insert_oci_kde(&ci, &pos) < 0)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
@ -3291,6 +3299,9 @@ int wpa_sm_set_param(struct wpa_sm *sm, enum wpa_sm_conf_params param,
|
||||||
case WPA_PARAM_FT_RSNXE_USED:
|
case WPA_PARAM_FT_RSNXE_USED:
|
||||||
sm->ft_rsnxe_used = value;
|
sm->ft_rsnxe_used = value;
|
||||||
break;
|
break;
|
||||||
|
case WPA_PARAM_OCI_FREQ_EAPOL:
|
||||||
|
sm->oci_freq_override_eapol = value;
|
||||||
|
break;
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
#ifdef CONFIG_DPP2
|
#ifdef CONFIG_DPP2
|
||||||
case WPA_PARAM_DPP_PFS:
|
case WPA_PARAM_DPP_PFS:
|
||||||
|
|
|
@ -108,6 +108,7 @@ enum wpa_sm_conf_params {
|
||||||
WPA_PARAM_USE_EXT_KEY_ID,
|
WPA_PARAM_USE_EXT_KEY_ID,
|
||||||
WPA_PARAM_FT_RSNXE_USED,
|
WPA_PARAM_FT_RSNXE_USED,
|
||||||
WPA_PARAM_DPP_PFS,
|
WPA_PARAM_DPP_PFS,
|
||||||
|
WPA_PARAM_OCI_FREQ_EAPOL,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rsn_supp_config {
|
struct rsn_supp_config {
|
||||||
|
|
|
@ -154,6 +154,7 @@ struct wpa_sm {
|
||||||
#ifdef CONFIG_TESTING_OPTIONS
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
struct wpabuf *test_assoc_ie;
|
struct wpabuf *test_assoc_ie;
|
||||||
int ft_rsnxe_used;
|
int ft_rsnxe_used;
|
||||||
|
unsigned int oci_freq_override_eapol;
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
#ifdef CONFIG_FILS
|
#ifdef CONFIG_FILS
|
||||||
|
|
|
@ -751,6 +751,12 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
} else if (os_strcasecmp(cmd, "ft_rsnxe_used") == 0) {
|
} else if (os_strcasecmp(cmd, "ft_rsnxe_used") == 0) {
|
||||||
wpa_s->ft_rsnxe_used = atoi(value);
|
wpa_s->ft_rsnxe_used = atoi(value);
|
||||||
|
} else if (os_strcasecmp(cmd, "oci_freq_override_eapol") == 0) {
|
||||||
|
wpa_s->oci_freq_override_eapol = atoi(value);
|
||||||
|
} else if (os_strcasecmp(cmd, "oci_freq_override_saquery_req") == 0) {
|
||||||
|
wpa_s->oci_freq_override_saquery_req = atoi(value);
|
||||||
|
} else if (os_strcasecmp(cmd, "oci_freq_override_saquery_resp") == 0) {
|
||||||
|
wpa_s->oci_freq_override_saquery_resp = atoi(value);
|
||||||
} else if (os_strcasecmp(cmd, "rsne_override_eapol") == 0) {
|
} else if (os_strcasecmp(cmd, "rsne_override_eapol") == 0) {
|
||||||
wpabuf_free(wpa_s->rsne_override_eapol);
|
wpabuf_free(wpa_s->rsne_override_eapol);
|
||||||
if (os_strcmp(value, "NULL") == 0)
|
if (os_strcmp(value, "NULL") == 0)
|
||||||
|
@ -8315,6 +8321,9 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
|
||||||
wpabuf_free(wpa_s->rsnxe_override_eapol);
|
wpabuf_free(wpa_s->rsnxe_override_eapol);
|
||||||
wpa_s->rsnxe_override_eapol = NULL;
|
wpa_s->rsnxe_override_eapol = NULL;
|
||||||
wpas_clear_driver_signal_override(wpa_s);
|
wpas_clear_driver_signal_override(wpa_s);
|
||||||
|
wpa_s->oci_freq_override_eapol = 0;
|
||||||
|
wpa_s->oci_freq_override_saquery_req = 0;
|
||||||
|
wpa_s->oci_freq_override_saquery_resp = 0;
|
||||||
#ifdef CONFIG_DPP
|
#ifdef CONFIG_DPP
|
||||||
os_free(wpa_s->dpp_config_obj_override);
|
os_free(wpa_s->dpp_config_obj_override);
|
||||||
wpa_s->dpp_config_obj_override = NULL;
|
wpa_s->dpp_config_obj_override = NULL;
|
||||||
|
|
|
@ -2573,6 +2573,16 @@ static void sme_send_sa_query_req(struct wpa_supplicant *wpa_s,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (wpa_s->oci_freq_override_saquery_req) {
|
||||||
|
wpa_printf(MSG_INFO,
|
||||||
|
"TEST: Override SA Query Request OCI frequency %d -> %d MHz",
|
||||||
|
ci.frequency,
|
||||||
|
wpa_s->oci_freq_override_saquery_req);
|
||||||
|
ci.frequency = wpa_s->oci_freq_override_saquery_req;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
if (ocv_insert_extended_oci(&ci, req + req_len) < 0)
|
if (ocv_insert_extended_oci(&ci, req + req_len) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2727,6 +2737,16 @@ static void sme_process_sa_query_request(struct wpa_supplicant *wpa_s,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (wpa_s->oci_freq_override_saquery_resp) {
|
||||||
|
wpa_printf(MSG_INFO,
|
||||||
|
"TEST: Override SA Query Response OCI frequency %d -> %d MHz",
|
||||||
|
ci.frequency,
|
||||||
|
wpa_s->oci_freq_override_saquery_resp);
|
||||||
|
ci.frequency = wpa_s->oci_freq_override_saquery_resp;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
if (ocv_insert_extended_oci(&ci, resp + resp_len) < 0)
|
if (ocv_insert_extended_oci(&ci, resp + resp_len) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -1642,6 +1642,8 @@ int wpa_supplicant_set_suites(struct wpa_supplicant *wpa_s,
|
||||||
#ifdef CONFIG_TESTING_OPTIONS
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_FT_RSNXE_USED,
|
wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_FT_RSNXE_USED,
|
||||||
wpa_s->ft_rsnxe_used);
|
wpa_s->ft_rsnxe_used);
|
||||||
|
wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_OCI_FREQ_EAPOL,
|
||||||
|
wpa_s->oci_freq_override_eapol);
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
/* Extended Key ID is only supported in infrastructure BSS so far */
|
/* Extended Key ID is only supported in infrastructure BSS so far */
|
||||||
|
|
|
@ -1149,6 +1149,9 @@ struct wpa_supplicant {
|
||||||
struct wpabuf *rsnxe_override_assoc;
|
struct wpabuf *rsnxe_override_assoc;
|
||||||
struct wpabuf *rsnxe_override_eapol;
|
struct wpabuf *rsnxe_override_eapol;
|
||||||
struct dl_list drv_signal_override;
|
struct dl_list drv_signal_override;
|
||||||
|
unsigned int oci_freq_override_eapol;
|
||||||
|
unsigned int oci_freq_override_saquery_req;
|
||||||
|
unsigned int oci_freq_override_saquery_resp;
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
struct wmm_ac_assoc_data *wmm_ac_assoc_info;
|
struct wmm_ac_assoc_data *wmm_ac_assoc_info;
|
||||||
|
|
Loading…
Reference in a new issue