qcacld-3.0: Restrict three link connection on certain vendor APs
Identify APs which don't support three links and downgrade the max connection links to two so that connecting to such APs will not lead to unexpected behavior. Change-Id: I25d2c0fd09e29b6f0cc2d228e52733bcbceb39fd CRs-Fixed: 3636112
This commit is contained in:

کامیت شده توسط
Ravindra Konda

والد
2e6d28ea61
کامیت
0b6df7dbe9
@@ -198,6 +198,10 @@ static void action_oui_load_config(struct action_oui_psoc_priv *psoc_priv)
|
|||||||
cfg_get(psoc,
|
cfg_get(psoc,
|
||||||
CFG_ACTION_OUI_SEND_SMPS_FRAME_WITH_OMN),
|
CFG_ACTION_OUI_SEND_SMPS_FRAME_WITH_OMN),
|
||||||
ACTION_OUI_MAX_STR_LEN);
|
ACTION_OUI_MAX_STR_LEN);
|
||||||
|
qdf_str_lcopy(psoc_priv->action_oui_str
|
||||||
|
[ACTION_OUI_RESTRICT_MAX_MLO_LINKS],
|
||||||
|
cfg_get(psoc, CFG_ACTION_OUI_RESTRICT_MAX_MLO_LINKS),
|
||||||
|
ACTION_OUI_MAX_STR_LEN);
|
||||||
qdf_str_lcopy(psoc_priv->action_oui_str
|
qdf_str_lcopy(psoc_priv->action_oui_str
|
||||||
[ACTION_OUI_AUTH_ASSOC_6MBPS_2GHZ],
|
[ACTION_OUI_AUTH_ASSOC_6MBPS_2GHZ],
|
||||||
cfg_get(psoc, CFG_ACTION_OUI_AUTH_ASSOC_6MBPS_2GHZ),
|
cfg_get(psoc, CFG_ACTION_OUI_AUTH_ASSOC_6MBPS_2GHZ),
|
||||||
|
@@ -172,8 +172,8 @@ validate_and_convert_data_length(uint8_t *token,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((uint32_t)len > ACTION_OUI_MAX_DATA_LENGTH) {
|
if ((uint32_t)len > ACTION_OUI_MAX_DATA_LENGTH) {
|
||||||
action_oui_err("action OUI data len is more than %u",
|
action_oui_err("action OUI data len %d is more than %u",
|
||||||
ACTION_OUI_MAX_DATA_LENGTH);
|
len, ACTION_OUI_MAX_DATA_LENGTH);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -844,6 +844,36 @@
|
|||||||
"", \
|
"", \
|
||||||
"Used to send SMPS frame along with OMN for specified APs")
|
"Used to send SMPS frame along with OMN for specified APs")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gActionOUIRestrictMaxMLOLinks - Used to downgrade 3 link to 2 link ML
|
||||||
|
* connection for specific AP build version.
|
||||||
|
*
|
||||||
|
* Sample OUIs: (All values in Hex)
|
||||||
|
* OUI 3 : 8CFDF0
|
||||||
|
* OUI data Len : 13
|
||||||
|
* OUI Data : 040000494c510302097201cb17000009110000
|
||||||
|
* OUI data Mask: FFFFE0 - 1111 1111 1111 1111 1110 0000
|
||||||
|
* Info Mask : 01 - only OUI present in Info mask
|
||||||
|
*
|
||||||
|
* gActionOUIRestrictMaxMLOLinks=8CFDF0 13 040000494c510c00203000cb17000009110000 FFFFE0 01
|
||||||
|
* Refer to gEnableActionOUI for more detail about the format.
|
||||||
|
*
|
||||||
|
* Related: gEnableActionOUI
|
||||||
|
*
|
||||||
|
* Supported Feature: Action OUIs
|
||||||
|
*
|
||||||
|
* Usage: External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_ACTION_OUI_RESTRICT_MAX_MLO_LINKS CFG_INI_STRING( \
|
||||||
|
"gActionOUIRestrictMaxMLOLinks", \
|
||||||
|
0, \
|
||||||
|
ACTION_OUI_MAX_STR_LEN, \
|
||||||
|
"8CFDF0 13 040000494c510302097201cb17000009110000 FFFFE0 01", \
|
||||||
|
"To restrict matching OUI APs to two link connection at max")
|
||||||
|
|
||||||
#define CFG_ACTION_OUI \
|
#define CFG_ACTION_OUI \
|
||||||
CFG(CFG_ACTION_OUI_CCKM_1X1) \
|
CFG(CFG_ACTION_OUI_CCKM_1X1) \
|
||||||
CFG(CFG_ACTION_OUI_CONNECT_1X1) \
|
CFG(CFG_ACTION_OUI_CONNECT_1X1) \
|
||||||
@@ -861,6 +891,7 @@
|
|||||||
CFG(CFG_ACTION_OUI_DISABLE_DYNAMIC_QOS_NULL_TX_RATE) \
|
CFG(CFG_ACTION_OUI_DISABLE_DYNAMIC_QOS_NULL_TX_RATE) \
|
||||||
CFG(CFG_ACTION_OUI_ENABLE_CTS2SELF) \
|
CFG(CFG_ACTION_OUI_ENABLE_CTS2SELF) \
|
||||||
CFG(CFG_ACTION_OUI_ENABLE_CTS2SELF_WITH_QOS_NULL) \
|
CFG(CFG_ACTION_OUI_ENABLE_CTS2SELF_WITH_QOS_NULL) \
|
||||||
|
CFG(CFG_ACTION_OUI_RESTRICT_MAX_MLO_LINKS) \
|
||||||
CFG(CFG_ACTION_OUI_SEND_SMPS_FRAME_WITH_OMN) \
|
CFG(CFG_ACTION_OUI_SEND_SMPS_FRAME_WITH_OMN) \
|
||||||
CFG(CFG_ACTION_OUI_AUTH_ASSOC_6MBPS_2GHZ) \
|
CFG(CFG_ACTION_OUI_AUTH_ASSOC_6MBPS_2GHZ) \
|
||||||
CFG(CFG_ACTION_OUI_DISABLE_BFORMEE) \
|
CFG(CFG_ACTION_OUI_DISABLE_BFORMEE) \
|
||||||
|
@@ -125,6 +125,8 @@
|
|||||||
* @ACTION_OUI_DISABLE_BFORMEE: disable SU/MU beam formee capability for
|
* @ACTION_OUI_DISABLE_BFORMEE: disable SU/MU beam formee capability for
|
||||||
* specified AP
|
* specified AP
|
||||||
* @ACTION_OUI_ENABLE_CTS2SELF: enable cts to self for specified AP's
|
* @ACTION_OUI_ENABLE_CTS2SELF: enable cts to self for specified AP's
|
||||||
|
* @ACTION_OUI_RESTRICT_MAX_MLO_LINKS: Downgrade MLO if particular AP
|
||||||
|
* build present.
|
||||||
* @ACTION_OUI_MAXIMUM_ID: maximum number of action oui types
|
* @ACTION_OUI_MAXIMUM_ID: maximum number of action oui types
|
||||||
*/
|
*/
|
||||||
enum action_oui_id {
|
enum action_oui_id {
|
||||||
@@ -150,6 +152,7 @@ enum action_oui_id {
|
|||||||
ACTION_OUI_DISABLE_BFORMEE,
|
ACTION_OUI_DISABLE_BFORMEE,
|
||||||
ACTION_OUI_DISABLE_AGGRESSIVE_EDCA,
|
ACTION_OUI_DISABLE_AGGRESSIVE_EDCA,
|
||||||
ACTION_OUI_ENABLE_CTS2SELF,
|
ACTION_OUI_ENABLE_CTS2SELF,
|
||||||
|
ACTION_OUI_RESTRICT_MAX_MLO_LINKS,
|
||||||
ACTION_OUI_MAXIMUM_ID
|
ACTION_OUI_MAXIMUM_ID
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -38,6 +38,8 @@
|
|||||||
#include "wlan_mlo_mgr_roam.h"
|
#include "wlan_mlo_mgr_roam.h"
|
||||||
#include "wlan_mlo_mgr_sta.h"
|
#include "wlan_mlo_mgr_sta.h"
|
||||||
#include "wlan_mlo_mgr_link_switch.h"
|
#include "wlan_mlo_mgr_link_switch.h"
|
||||||
|
#include <wlan_action_oui_main.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
static inline bool
|
static inline bool
|
||||||
@@ -799,22 +801,51 @@ static void if_mgr_update_candidate(struct wlan_objmgr_psoc *psoc,
|
|||||||
struct validate_bss_data *candidate_info)
|
struct validate_bss_data *candidate_info)
|
||||||
{
|
{
|
||||||
struct scan_cache_entry *scan_entry = candidate_info->scan_entry;
|
struct scan_cache_entry *scan_entry = candidate_info->scan_entry;
|
||||||
|
struct action_oui_search_attr attr;
|
||||||
|
int8_t i, allowed_partner_links = 0;
|
||||||
|
uint8_t mlo_support_link_num;
|
||||||
|
|
||||||
if (!(scan_entry->ie_list.multi_link_bv || scan_entry->ie_list.ehtcap ||
|
if (!(scan_entry->ie_list.multi_link_bv || scan_entry->ie_list.ehtcap ||
|
||||||
scan_entry->ie_list.ehtop))
|
scan_entry->ie_list.ehtop))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mlme_get_bss_11be_allowed(psoc, &candidate_info->peer_addr,
|
attr.ie_data = util_scan_entry_ie_data(scan_entry);
|
||||||
util_scan_entry_ie_data(scan_entry),
|
attr.ie_length = util_scan_entry_ie_len(scan_entry);
|
||||||
util_scan_entry_ie_len(scan_entry)) &&
|
|
||||||
(!wlan_vdev_mlme_get_user_dis_eht_flag(vdev)))
|
if (!mlme_get_bss_11be_allowed(psoc, &candidate_info->peer_addr,
|
||||||
|
attr.ie_data, attr.ie_length) ||
|
||||||
|
wlan_vdev_mlme_get_user_dis_eht_flag(vdev)) {
|
||||||
|
scan_entry->ie_list.multi_link_bv = NULL;
|
||||||
|
scan_entry->ie_list.ehtcap = NULL;
|
||||||
|
scan_entry->ie_list.ehtop = NULL;
|
||||||
|
qdf_mem_zero(&scan_entry->ml_info, sizeof(scan_entry->ml_info));
|
||||||
|
candidate_info->is_mlo = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mlo_support_link_num = wlan_mlme_get_sta_mlo_conn_max_num(psoc);
|
||||||
|
|
||||||
|
if (mlo_support_link_num <= WLAN_MAX_ML_DEFAULT_LINK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
scan_entry->ie_list.multi_link_bv = NULL;
|
if (!wlan_action_oui_search(psoc, &attr,
|
||||||
scan_entry->ie_list.ehtcap = NULL;
|
ACTION_OUI_RESTRICT_MAX_MLO_LINKS))
|
||||||
scan_entry->ie_list.ehtop = NULL;
|
return;
|
||||||
qdf_mem_zero(&scan_entry->ml_info, sizeof(scan_entry->ml_info));
|
|
||||||
candidate_info->is_mlo = false;
|
for (i = 0; i < scan_entry->ml_info.num_links; i++) {
|
||||||
|
if (i < WLAN_MAX_ML_DEFAULT_LINK - 1) {
|
||||||
|
allowed_partner_links++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
scan_entry->ml_info.link_info[i].is_valid_link = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allowed_partner_links != scan_entry->ml_info.num_links)
|
||||||
|
ifmgr_nofl_debug("Downgrade " QDF_MAC_ADDR_FMT " partner links from %d to %d",
|
||||||
|
QDF_MAC_ADDR_REF(scan_entry->ml_info.mld_mac_addr.bytes),
|
||||||
|
scan_entry->ml_info.num_links,
|
||||||
|
allowed_partner_links);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline uint32_t
|
static inline uint32_t
|
||||||
|
مرجع در شماره جدید
Block a user