qcacld-3.0: Add support to inject disassoc frames
Add support to inject disassoc frames with user configured pmf options. Change-Id: I40df805f8d6ef62dab48477c26cb9b0fc6b17929 CRs-Fixed: 2665042
This commit is contained in:
parent
1b4b46f32f
commit
222d174cdd
@ -6902,6 +6902,10 @@ wlan_hdd_wifi_test_config_policy[
|
||||
.type = NLA_NESTED},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TWT_REQ_SUPPORT] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_PMF_PROTECTION] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_DISASSOC_TX] = {
|
||||
.type = NLA_FLAG},
|
||||
};
|
||||
|
||||
/**
|
||||
@ -9304,6 +9308,8 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
||||
uint8_t value = 0;
|
||||
uint8_t wmm_mode = 0;
|
||||
uint32_t cmd_id;
|
||||
struct hdd_station_ctx *hdd_sta_ctx =
|
||||
WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
|
||||
@ -9901,8 +9907,6 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
||||
|
||||
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_TWT_TERMINATE]) {
|
||||
struct wmi_twt_del_dialog_param params = {0};
|
||||
struct hdd_station_ctx *hdd_sta_ctx =
|
||||
WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
|
||||
if ((adapter->device_mode != QDF_STA_MODE &&
|
||||
adapter->device_mode != QDF_P2P_CLIENT_MODE) ||
|
||||
@ -9934,6 +9938,21 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
||||
cfg_val);
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_PMF_PROTECTION;
|
||||
if (tb[cmd_id]) {
|
||||
cfg_val = nla_get_u8(tb[cmd_id]);
|
||||
hdd_debug("pmf cfg: val %d", cfg_val);
|
||||
sme_set_pmf_wep_cfg(hdd_ctx->mac_handle, cfg_val);
|
||||
}
|
||||
|
||||
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_DISASSOC_TX;
|
||||
if (tb[cmd_id]) {
|
||||
hdd_info("Send disassoc mgmt frame");
|
||||
sme_send_disassoc_req_frame(hdd_ctx->mac_handle,
|
||||
adapter->vdev_id,
|
||||
hdd_sta_ctx->conn_info.bssid.bytes,
|
||||
1, false);
|
||||
}
|
||||
if (update_sme_cfg)
|
||||
sme_update_config(mac_handle, sme_config);
|
||||
|
||||
|
@ -104,6 +104,10 @@ static inline mac_handle_t MAC_HANDLE(struct mac_context *mac)
|
||||
#define HIGH_SEQ_NUM_OFFSET 4
|
||||
#define DEF_HE_AUTO_SGI_LTF 0x0F07
|
||||
|
||||
#define PMF_WEP_DISABLE 2
|
||||
#define PMF_INCORRECT_KEY 1
|
||||
#define PMF_CORRECT_KEY 0
|
||||
|
||||
/**
|
||||
* enum log_event_type - Type of event initiating bug report
|
||||
* @WLAN_LOG_TYPE_NON_FATAL: Non fatal event
|
||||
@ -797,6 +801,7 @@ struct mac_context {
|
||||
bool he_om_ctrl_cfg_tx_nsts_set;
|
||||
uint8_t he_om_ctrl_cfg_tx_nsts;
|
||||
bool he_om_ctrl_ul_mu_data_dis;
|
||||
uint8_t is_usr_cfg_pmf_wep;
|
||||
#ifdef WLAN_FEATURE_11AX
|
||||
tDot11fIEhe_cap he_cap_2g;
|
||||
tDot11fIEhe_cap he_cap_5g;
|
||||
|
@ -3354,7 +3354,13 @@ lim_send_disassoc_mgmt_frame(struct mac_context *mac,
|
||||
/* Prepare the BSSID */
|
||||
sir_copy_mac_addr(pMacHdr->bssId, pe_session->bssId);
|
||||
|
||||
if (mac->is_usr_cfg_pmf_wep != PMF_WEP_DISABLE)
|
||||
lim_set_protected_bit(mac, pe_session, peer, pMacHdr);
|
||||
else
|
||||
pe_debug("Skip WEP bit setting per usr cfg");
|
||||
|
||||
if (mac->is_usr_cfg_pmf_wep == PMF_INCORRECT_KEY)
|
||||
txFlag |= HAL_USE_INCORRECT_KEY_PMF;
|
||||
|
||||
nStatus = dot11f_pack_disassociation(mac, &frm, pFrame +
|
||||
sizeof(tSirMacMgmtHdr),
|
||||
|
@ -113,6 +113,9 @@
|
||||
#define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 /* Bit 6 will be used to control BD rate for Management frames */
|
||||
#define HAL_USE_PEER_STA_REQUESTED_MASK 0x80 /* bit 7 will be used to control frames for p2p interface */
|
||||
#define HAL_USE_PMF 0x20
|
||||
#define HAL_USE_INCORRECT_KEY_PMF 0x10
|
||||
|
||||
#define MGMT_TX_USE_INCORRECT_KEY BIT(0)
|
||||
|
||||
#define LIM_DOS_PROTECTION_TIME 1000 //1000ms
|
||||
#define LIM_MIN_RSSI 0 /* 0dbm */
|
||||
|
@ -3584,6 +3584,15 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
|
||||
*/
|
||||
void sme_set_amsdu(mac_handle_t mac_handle, bool enable);
|
||||
|
||||
/**
|
||||
* sme_set_pmf_wep_cfg() - set user cfg for PMF setting
|
||||
* @mac_handle: Opaque handle to the global MAC context
|
||||
* @pmf_wep_cfg: PMF configuration
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void sme_set_pmf_wep_cfg(mac_handle_t mac_handle, uint8_t pmf_wep_cfg);
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX
|
||||
void sme_set_he_testbed_def(mac_handle_t mac_handle, uint8_t vdev_id);
|
||||
void sme_reset_he_caps(mac_handle_t mac_handle, uint8_t vdev_id);
|
||||
|
@ -15147,6 +15147,13 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
|
||||
return true;
|
||||
}
|
||||
|
||||
void sme_set_pmf_wep_cfg(mac_handle_t mac_handle, uint8_t pmf_wep)
|
||||
{
|
||||
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
|
||||
|
||||
mac_ctx->is_usr_cfg_pmf_wep = pmf_wep;
|
||||
}
|
||||
|
||||
void sme_set_amsdu(mac_handle_t mac_handle, bool enable)
|
||||
{
|
||||
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
|
||||
@ -15257,6 +15264,7 @@ void sme_reset_he_caps(mac_handle_t mac_handle, uint8_t vdev_id)
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
sme_err("Failed to set enable bcast probe resp in FW, %d",
|
||||
status);
|
||||
mac_ctx->is_usr_cfg_pmf_wep = PMF_CORRECT_KEY;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2606,6 +2606,8 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
||||
mgmt_param.qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
|
||||
mgmt_param.use_6mbps = use_6mbps;
|
||||
mgmt_param.tx_type = tx_frm_index;
|
||||
if (tx_flag & HAL_USE_INCORRECT_KEY_PMF)
|
||||
mgmt_param.tx_flags |= MGMT_TX_USE_INCORRECT_KEY;
|
||||
|
||||
/*
|
||||
* Update the tx_params TLV only for rates
|
||||
|
Loading…
Reference in New Issue
Block a user