WPS: Testing mechanism to force auth/encr type flags
The new wps_force_{auth,encr}_types parameters can be used in test build (CONFIG_WPS_TESTING) to force wpa_supplicant to use the specified value in the Authentication/Encryption Type flags attribute. This can be used to test AP behavior on various error cases for which there are workarounds to cover deployed device behavior. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
ea319127e4
commit
6e379c6c16
4 changed files with 45 additions and 3 deletions
|
@ -19,6 +19,10 @@
|
|||
int wps_version_number = 0x20;
|
||||
int wps_testing_dummy_cred = 0;
|
||||
int wps_corrupt_pkhash = 0;
|
||||
int wps_force_auth_types_in_use = 0;
|
||||
u16 wps_force_auth_types = 0;
|
||||
int wps_force_encr_types_in_use = 0;
|
||||
u16 wps_force_encr_types = 0;
|
||||
#endif /* CONFIG_WPS_TESTING */
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Wi-Fi Protected Setup - attribute building
|
||||
* Copyright (c) 2008, Jouni Malinen <j@w1.fi>
|
||||
* Copyright (c) 2008-2016, Jouni Malinen <j@w1.fi>
|
||||
*
|
||||
* This software may be distributed under the terms of the BSD license.
|
||||
* See README for more details.
|
||||
|
@ -298,7 +298,16 @@ int wps_build_auth_type_flags(struct wps_data *wps, struct wpabuf *msg)
|
|||
auth_types &= ~WPS_AUTH_WPA;
|
||||
auth_types &= ~WPS_AUTH_WPA2;
|
||||
auth_types &= ~WPS_AUTH_SHARED;
|
||||
wpa_printf(MSG_DEBUG, "WPS: * Authentication Type Flags");
|
||||
#ifdef CONFIG_WPS_TESTING
|
||||
if (wps_force_auth_types_in_use) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"WPS: Testing - replace auth type 0x%x with 0x%x",
|
||||
auth_types, wps_force_auth_types);
|
||||
auth_types = wps_force_auth_types;
|
||||
}
|
||||
#endif /* CONFIG_WPS_TESTING */
|
||||
wpa_printf(MSG_DEBUG, "WPS: * Authentication Type Flags (0x%x)",
|
||||
auth_types);
|
||||
wpabuf_put_be16(msg, ATTR_AUTH_TYPE_FLAGS);
|
||||
wpabuf_put_be16(msg, 2);
|
||||
wpabuf_put_be16(msg, auth_types);
|
||||
|
@ -310,7 +319,16 @@ int wps_build_encr_type_flags(struct wps_data *wps, struct wpabuf *msg)
|
|||
{
|
||||
u16 encr_types = WPS_ENCR_TYPES;
|
||||
encr_types &= ~WPS_ENCR_WEP;
|
||||
wpa_printf(MSG_DEBUG, "WPS: * Encryption Type Flags");
|
||||
#ifdef CONFIG_WPS_TESTING
|
||||
if (wps_force_encr_types_in_use) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"WPS: Testing - replace encr type 0x%x with 0x%x",
|
||||
encr_types, wps_force_encr_types);
|
||||
encr_types = wps_force_encr_types;
|
||||
}
|
||||
#endif /* CONFIG_WPS_TESTING */
|
||||
wpa_printf(MSG_DEBUG, "WPS: * Encryption Type Flags (0x%x)",
|
||||
encr_types);
|
||||
wpabuf_put_be16(msg, ATTR_ENCR_TYPE_FLAGS);
|
||||
wpabuf_put_be16(msg, 2);
|
||||
wpabuf_put_be16(msg, encr_types);
|
||||
|
|
|
@ -14,6 +14,10 @@
|
|||
extern int wps_version_number;
|
||||
extern int wps_testing_dummy_cred;
|
||||
extern int wps_corrupt_pkhash;
|
||||
extern int wps_force_auth_types_in_use;
|
||||
extern u16 wps_force_auth_types;
|
||||
extern int wps_force_encr_types_in_use;
|
||||
extern u16 wps_force_encr_types;
|
||||
#define WPS_VERSION wps_version_number
|
||||
|
||||
#else /* CONFIG_WPS_TESTING */
|
||||
|
|
|
@ -371,6 +371,20 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
|
|||
wps_corrupt_pkhash = atoi(value);
|
||||
wpa_printf(MSG_DEBUG, "WPS: Testing - wps_corrupt_pkhash=%d",
|
||||
wps_corrupt_pkhash);
|
||||
} else if (os_strcasecmp(cmd, "wps_force_auth_types") == 0) {
|
||||
if (value[0] == '\0') {
|
||||
wps_force_auth_types_in_use = 0;
|
||||
} else {
|
||||
wps_force_auth_types = strtol(value, NULL, 0);
|
||||
wps_force_auth_types_in_use = 1;
|
||||
}
|
||||
} else if (os_strcasecmp(cmd, "wps_force_encr_types") == 0) {
|
||||
if (value[0] == '\0') {
|
||||
wps_force_encr_types_in_use = 0;
|
||||
} else {
|
||||
wps_force_encr_types = strtol(value, NULL, 0);
|
||||
wps_force_encr_types_in_use = 1;
|
||||
}
|
||||
#endif /* CONFIG_WPS_TESTING */
|
||||
} else if (os_strcasecmp(cmd, "ampdu") == 0) {
|
||||
if (wpa_drv_ampdu(wpa_s, atoi(value)) < 0)
|
||||
|
@ -6979,6 +6993,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
|
|||
wps_version_number = 0x20;
|
||||
wps_testing_dummy_cred = 0;
|
||||
wps_corrupt_pkhash = 0;
|
||||
wps_force_auth_types_in_use = 0;
|
||||
wps_force_encr_types_in_use = 0;
|
||||
#endif /* CONFIG_WPS_TESTING */
|
||||
#ifdef CONFIG_WPS
|
||||
wpa_s->wps_fragment_size = 0;
|
||||
|
|
Loading…
Reference in a new issue