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:
Vamsi Krishna 2020-05-08 23:29:04 +05:30 committed by Jouni Malinen
parent c2080e8657
commit 2d118f557a
7 changed files with 47 additions and 0 deletions

View file

@ -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:

View file

@ -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 {

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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 */

View file

@ -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;