qcacmn: Add support for FT SAE and FT Suite-B

Previously host driver only supports initial SAE and Suite-B
authentication types and roaming to SAE AP is blocked. The
802.11 specification has introduced the Akm suite 00:0F:AC:9 for
FT-SAE and 00:0F:AC:13 for FT Suite-B akm type. Add support for
FT-SAE and FT-Suite-B.

Extend the enum wlan_auth_type to include WLAN_AUTH_TYPE_FT_SAE,
WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384. This enum wlan_auth_type is
the new implementation for akm type in converged scan module
corresponding to the legacy eCsrAuthType enum.

Add changes in scan module filter to support FT-SAE and
FT-Suite-B authentication suites be added to filter->auth_type.
csr_scan_get_result() will translate the legacy eCsrAuthType
to wlan_auth_type and push it to the filter->auth_type.

Change-Id: I74d7b0be74d33ced5d3e528032aec6e057a75ff3
CRs-Fixed: 2400683
This commit is contained in:
Pragaspathi Thilagaraj 2019-02-18 17:42:21 +05:30 • committed by nshrivas
commit 17810df306
4 changed files with 33 additions and 1 deletions

View file

@ -646,6 +646,8 @@ enum qca_wlan_802_11_mode {
* @QCA_WLAN_AUTH_TYPE_WAI_PSK wai psk key
* @QCA_WLAN_AUTH_TYPE_CCKM_WPA: cckm wpa key
* @QCA_WLAN_AUTH_TYPE_CCKM_RSN: cckm rsn key
* @QCA_WLAN_AUTH_TYPE_FT_SAE: FT sae akm
* @QCA_WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384: FT suite B SHA384
*/
enum qca_wlan_auth_type {
QCA_WLAN_AUTH_TYPE_INVALID,
@ -665,6 +667,8 @@ enum qca_wlan_auth_type {
QCA_WLAN_AUTH_TYPE_CCKM_WPA,
QCA_WLAN_AUTH_TYPE_CCKM_RSN,
QCA_WLAN_AUTH_TYPE_AUTOSWITCH,
QCA_WLAN_AUTH_TYPE_FT_SAE,
QCA_WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384,
};
/**

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@ -417,8 +417,10 @@ enum extn_element_ie {
#define WLAN_AKM_SHA256_IEEE8021X 0x05
#define WLAN_AKM_SHA256_PSK 0x06
#define WLAN_AKM_SAE 0x08
#define WLAN_AKM_FT_SAE 0x09
#define WLAN_AKM_SUITEB_EAP_SHA256 0x0B
#define WLAN_AKM_SUITEB_EAP_SHA384 0x0C
#define WLAN_AKM_FT_SUITEB_EAP_SHA384 0x0D
#define WLAN_AKM_FILS_SHA256 0x0E
#define WLAN_AKM_FILS_SHA384 0x0F
#define WLAN_AKM_FILS_FT_SHA256 0x10

View file

@ -523,6 +523,8 @@ enum wlan_pmf_cap {
* @WLAN_AUTH_TYPE_OWE: OWE
* @WLAN_AUTH_TYPE_SUITEB_EAP_SHA256: EAP SHA256
* @WLAN_AUTH_TYPE_SUITEB_EAP_SHA384: EAP SHA384
* @WLAN_AUTH_TYPE_FT_SAE: FT SAE
* @WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384: FT suiteb SHA384
* @WLAN_AUTH_TYPE_ANY: To match any auth type
* @WLAN_NUM_OF_SUPPORT_AUTH_TYPE: Max no of Auth type
*/
@ -553,6 +555,8 @@ enum wlan_auth_type {
WLAN_AUTH_TYPE_SUITEB_EAP_SHA256,
WLAN_AUTH_TYPE_SUITEB_EAP_SHA384,
WLAN_AUTH_TYPE_OSEN,
WLAN_AUTH_TYPE_FT_SAE,
WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384,
WLAN_AUTH_TYPE_ANY,
WLAN_NUM_OF_SUPPORT_AUTH_TYPE = WLAN_AUTH_TYPE_ANY,
};

View file

@ -618,6 +618,28 @@ static bool scm_is_rsn_security(struct scan_filter *filter,
break;
}
}
if (scm_is_cipher_match(rsn.akm_suites, rsn.akm_suite_count,
WLAN_RSN_SEL(WLAN_AKM_FT_SAE))) {
if (match_any_akm || (WLAN_AUTH_TYPE_FT_SAE ==
filter->auth_type[i])) {
neg_auth = WLAN_AUTH_TYPE_FT_SAE;
match = true;
break;
}
}
if (scm_is_cipher_match(rsn.akm_suites, rsn.akm_suite_count,
WLAN_RSN_SEL(
WLAN_AKM_FT_SUITEB_EAP_SHA384))) {
if (match_any_akm ||
(WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384 ==
filter->auth_type[i])) {
neg_auth = WLAN_AUTH_TYPE_FT_SUITEB_EAP_SHA384;
match = true;
break;
}
}
}
if (!match) {