qcacld-3.0: Add diag events for disconnect and connect complete

Add diag events for disconnect and connect complete for connection
manager.

Change-Id: I71cd968dd14e26cab9178c5bab892520b8d8af8c
CRs-Fixed: 2864507
This commit is contained in:
gaurank kathpalia
2021-01-27 22:45:13 +05:30
committed by snandini
parent 6683dbb655
commit ca5b8c897c
13 changed files with 891 additions and 737 deletions

View File

@@ -30,6 +30,7 @@
#include "wlan_cm_roam_public_struct.h"
#include "wlan_mlme_twt_public_struct.h"
#include "cfg_mlme_generic.h"
#include "host_diag_core_event.h"
#define OWE_TRANSITION_OUI_TYPE "\x50\x6f\x9a\x1c"
#define OWE_TRANSITION_OUI_SIZE 4
@@ -92,6 +93,23 @@
*/
#define AP_OFF_RSSI_OFFSET 20
enum diagwlan_status_eventsubtype {
DIAG_WLAN_STATUS_CONNECT = 0,
DIAG_WLAN_STATUS_DISCONNECT
};
enum diagwlan_status_eventreason {
DIAG_REASON_UNSPECIFIED = 0,
DIAG_REASON_USER_REQUESTED,
DIAG_REASON_MIC_ERROR,
DIAG_REASON_DISASSOC,
DIAG_REASON_DEAUTH,
DIAG_REASON_HANDOFF,
DIAG_REASON_ROAM_SYNCH_IND,
DIAG_REASON_ROAM_SYNCH_CNF,
DIAG_REASON_ROAM_HO_FAIL,
};
/**
* struct mlme_cfg_str - generic structure for all mlme CFG string items
*
@@ -1542,6 +1560,9 @@ struct wlan_mlme_sta_cfg {
bool allow_tpc_from_ap;
enum station_keepalive_method sta_keepalive_method;
bool usr_disabled_roaming;
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
host_event_wlan_status_payload_type event_payload;
#endif
};
/**

View File

@@ -149,6 +149,61 @@ static inline void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
{}
#endif
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
/**
* cm_get_diag_enc_type - get diag enc type
* @cipherset: enc type to convert
*
* Return: diag enc type
*/
enum mgmt_encrypt_type cm_get_diag_enc_type(uint32_t cipherset);
/**
* cm_diag_get_auth_type - get auth type
* @auth_type: diag auth type to fill
* @authmodeset: authmode to calculate diag auth type
* @akm: akm to calculate diag auth type
* @ucastcipherset: cipher to calculate diag auth type
*
* Return: none
*/
void cm_diag_get_auth_type(uint8_t *auth_type,
uint32_t authmodeset, uint32_t akm,
uint32_t ucastcipherset);
/**
* cm_connect_info - send connect info to diag
* @vdev: vdev ptr
* @connect_success: if connect was success
* @bssid: bssid
* @ssid: ssid
* @freq: freq
*
* Return: none
*/
void cm_connect_info(struct wlan_objmgr_vdev *vdev, bool connect_success,
struct qdf_mac_addr *bssid, struct wlan_ssid *ssid,
qdf_freq_t freq);
#ifdef WLAN_UNIT_TEST
/**
* cm_get_sta_cxn_info - fill sta context info in buffer
* @buf: buffer to fill
* @buf_sz: buf size
*
* Return: none
*/
void cm_get_sta_cxn_info(struct wlan_objmgr_vdev *vdev,
char *buf, uint32_t buf_sz);
#endif
#else
static inline void
cm_connect_info(struct wlan_objmgr_vdev *vdev, bool connect_success,
struct qdf_mac_addr *bssid, struct wlan_ssid *ssid,
qdf_freq_t freq)
{}
#endif
#ifdef FEATURE_CM_ENABLE
static inline QDF_STATUS cm_ext_hdl_create(struct cnx_mgr *cm_ctx)
{

View File

@@ -28,6 +28,8 @@
#include "wlan_tdls_api.h"
#include "wlan_mlme_vdev_mgr_interface.h"
#include "wni_api.h"
#include "wlan_crypto_global_api.h"
#include "wlan_scan_api.h"
#ifdef WLAN_FEATURE_FILS_SK
void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
@@ -71,6 +73,646 @@ void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
}
#endif
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
static const char *cm_diag_get_ch_width_str(uint8_t ch_width)
{
switch (ch_width) {
CASE_RETURN_STRING(BW_20MHZ);
CASE_RETURN_STRING(BW_40MHZ);
CASE_RETURN_STRING(BW_80MHZ);
CASE_RETURN_STRING(BW_160MHZ);
CASE_RETURN_STRING(BW_80P80MHZ);
CASE_RETURN_STRING(BW_5MHZ);
CASE_RETURN_STRING(BW_10MHZ);
default:
return "Unknown";
}
}
static const char *cm_diag_get_dot11_mode_str(enum mgmt_dot11_mode dot11mode)
{
switch (dot11mode) {
CASE_RETURN_STRING(DOT11_MODE_AUTO);
CASE_RETURN_STRING(DOT11_MODE_ABG);
CASE_RETURN_STRING(DOT11_MODE_11A);
CASE_RETURN_STRING(DOT11_MODE_11B);
CASE_RETURN_STRING(DOT11_MODE_11G);
CASE_RETURN_STRING(DOT11_MODE_11N);
CASE_RETURN_STRING(DOT11_MODE_11AC);
CASE_RETURN_STRING(DOT11_MODE_11G_ONLY);
CASE_RETURN_STRING(DOT11_MODE_11N_ONLY);
CASE_RETURN_STRING(DOT11_MODE_11AC_ONLY);
CASE_RETURN_STRING(DOT11_MODE_11AX);
CASE_RETURN_STRING(DOT11_MODE_11AX_ONLY);
default:
return "Unknown";
}
}
static const char *cm_diag_get_encr_type_str(uint8_t encr_type)
{
switch (encr_type) {
CASE_RETURN_STRING(ENC_MODE_OPEN);
CASE_RETURN_STRING(ENC_MODE_WEP40);
CASE_RETURN_STRING(ENC_MODE_WEP104);
CASE_RETURN_STRING(ENC_MODE_TKIP);
CASE_RETURN_STRING(ENC_MODE_AES);
CASE_RETURN_STRING(ENC_MODE_AES_GCMP);
CASE_RETURN_STRING(ENC_MODE_AES_GCMP_256);
CASE_RETURN_STRING(ENC_MODE_SMS4);
default:
return "Unknown";
}
}
static const uint8_t *cm_diag_get_akm_str(enum mgmt_auth_type auth_type,
uint32_t akm)
{
if (auth_type == AUTH_OPEN)
return "Open";
else if (auth_type == AUTH_SHARED)
return "Shared Key";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA384))
return "FT-FILS-SHA384";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA256))
return "FT-FILS-SHA256";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FILS_SHA384))
return "FILS-SHA384";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FILS_SHA256))
return "FILS-SHA256";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_SAE))
return "FT-SAE";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE))
return "SAE";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_DPP))
return "DPP";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_OSEN))
return "OSEN";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_OWE))
return "OWE";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X))
return "FT-802.1x";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_PSK))
return "FT-PSK";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X))
return "EAP 802.1x";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK))
return "WPA2-PSK";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_CCKM))
return "RSN-CCKM";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK_SHA256))
return "PSK-SHA256";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SHA256))
return "EAP 802.1x-SHA256";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B))
return "EAP Suite-B SHA256";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B_192))
return "EAP Suite-B SHA384";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X_SHA384))
return "FT-Suite-B SHA384";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X))
return "WPA";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK))
return "WPA-PSK";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_CCKM))
return "WPA-CCKM";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WPA_NONE))
return "WPA-NONE";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WAPI_CERT))
return "WAPI-CERT";
else if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WAPI_PSK))
return "WAPI-PSK";
else
return "NONE";
}
static enum mgmt_dot11_mode
cm_diag_dot11_mode_from_phy_mode(enum wlan_phymode phymode)
{
switch (phymode) {
case WLAN_PHYMODE_11A:
return DOT11_MODE_11A;
case WLAN_PHYMODE_11B:
return DOT11_MODE_11B;
case WLAN_PHYMODE_11G:
return DOT11_MODE_11G;
case WLAN_PHYMODE_11G_ONLY:
return DOT11_MODE_11G_ONLY;
case WLAN_PHYMODE_AUTO:
return DOT11_MODE_AUTO;
default:
if (IS_WLAN_PHYMODE_HT(phymode))
return DOT11_MODE_11N;
else if (IS_WLAN_PHYMODE_VHT(phymode))
return DOT11_MODE_11AC;
else if (IS_WLAN_PHYMODE_HE(phymode))
return DOT11_MODE_11AX;
else
return DOT11_MODE_MAX;
}
}
static enum mgmt_ch_width cm_get_diag_ch_width(enum phy_ch_width ch_width)
{
switch (ch_width) {
case CH_WIDTH_20MHZ:
return BW_20MHZ;
case CH_WIDTH_40MHZ:
return BW_40MHZ;
case CH_WIDTH_80MHZ:
return BW_80MHZ;
case CH_WIDTH_160MHZ:
return BW_160MHZ;
case CH_WIDTH_80P80MHZ:
return BW_80P80MHZ;
case CH_WIDTH_5MHZ:
return BW_5MHZ;
case CH_WIDTH_10MHZ:
return BW_10MHZ;
default:
return BW_MAX;
}
}
static enum mgmt_bss_type cm_get_diag_persona(enum QDF_OPMODE persona)
{
switch (persona) {
case QDF_STA_MODE:
return STA_PERSONA;
case QDF_SAP_MODE:
return SAP_PERSONA;
case QDF_P2P_CLIENT_MODE:
return P2P_CLIENT_PERSONA;
case QDF_P2P_GO_MODE:
return P2P_GO_PERSONA;
case QDF_FTM_MODE:
return FTM_PERSONA;
case QDF_MONITOR_MODE:
return MONITOR_PERSONA;
case QDF_P2P_DEVICE_MODE:
return P2P_DEVICE_PERSONA;
case QDF_OCB_MODE:
return OCB_PERSONA;
case QDF_EPPING_MODE:
return EPPING_PERSONA;
case QDF_QVIT_MODE:
return QVIT_PERSONA;
case QDF_NDI_MODE:
return NDI_PERSONA;
case QDF_WDS_MODE:
return WDS_PERSONA;
case QDF_BTAMP_MODE:
return BTAMP_PERSONA;
case QDF_AHDEMO_MODE:
return AHDEMO_PERSONA;
default:
return MAX_PERSONA;
}
}
enum mgmt_encrypt_type cm_get_diag_enc_type(uint32_t cipherset)
{
enum mgmt_encrypt_type n = ENC_MODE_OPEN;
if (!cipherset)
return n;
if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_GCM_256))
n = ENC_MODE_AES_GCMP_256;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_GCM))
n = ENC_MODE_AES_GCMP;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_CCM) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_OCB) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_CCM_256) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_CMAC) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_CMAC_256) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_GMAC) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_AES_GMAC_256))
n = ENC_MODE_AES;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_TKIP))
n = ENC_MODE_TKIP;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_WAPI_GCM4) ||
QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_WAPI_SMS4))
n = ENC_MODE_SMS4;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_WEP))
n = ENC_MODE_WEP40;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_WEP_40))
n = ENC_MODE_WEP40;
else if (QDF_HAS_PARAM(cipherset, WLAN_CRYPTO_CIPHER_WEP_104))
n = ENC_MODE_WEP104;
return n;
}
static void cm_diag_fill_rsn_auth_type(uint8_t *auth_type, uint32_t akm)
{
if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X) ||
QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X) ||
QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SHA256) ||
QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B) ||
QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B_192) ||
QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X_SHA384))
*auth_type = AUTH_WPA2_EAP;
else
*auth_type = AUTH_WPA2_PSK;
}
static void cm_diag_fill_wpa_auth_type(uint8_t *auth_type, uint32_t akm)
{
/* Try the more preferred ones first. */
if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X))
*auth_type = AUTH_WPA_EAP;
else
*auth_type = AUTH_WPA_PSK;
}
static void cm_diag_fill_wapi_auth_type(uint8_t *auth_type, uint32_t akm)
{
/* Try the more preferred ones first. */
if (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WAPI_CERT))
*auth_type = AUTH_WAPI_CERT;
else
*auth_type = AUTH_WAPI_PSK;
}
void cm_diag_get_auth_type(uint8_t *auth_type,
uint32_t authmodeset, uint32_t akm,
uint32_t ucastcipherset)
{
if (!authmodeset) {
*auth_type = AUTH_OPEN;
return;
}
if (QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_NONE) ||
QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_OPEN)) {
*auth_type = AUTH_OPEN;
return;
}
if (QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_AUTO)) {
if ((QDF_HAS_PARAM(ucastcipherset, WLAN_CRYPTO_CIPHER_WEP) ||
QDF_HAS_PARAM(ucastcipherset, WLAN_CRYPTO_CIPHER_WEP_40) ||
QDF_HAS_PARAM(ucastcipherset, WLAN_CRYPTO_CIPHER_WEP_104)))
*auth_type = AUTH_SHARED;
else
*auth_type = AUTH_OPEN;
return;
}
if (QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_SHARED)) {
*auth_type = AUTH_SHARED;
return;
}
if (QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_8021X) ||
QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_RSNA) ||
QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_CCKM) ||
QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_SAE) ||
QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_FILS_SK)) {
cm_diag_fill_rsn_auth_type(auth_type, akm);
return;
}
if (QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_WPA)) {
cm_diag_fill_wpa_auth_type(auth_type, akm);
return;
}
if (QDF_HAS_PARAM(authmodeset, WLAN_CRYPTO_AUTH_WAPI)) {
cm_diag_fill_wapi_auth_type(auth_type, akm);
return;
}
*auth_type = AUTH_OPEN;
}
static int8_t cm_get_rssi_by_bssid(struct wlan_objmgr_pdev *pdev,
struct qdf_mac_addr *bssid)
{
struct scan_filter *scan_filter;
int8_t rssi = 0;
qdf_list_t *list = NULL;
struct scan_cache_node *first_node = NULL;
scan_filter = qdf_mem_malloc(sizeof(*scan_filter));
if (!scan_filter)
return rssi;
scan_filter->num_of_bssid = 1;
qdf_mem_copy(scan_filter->bssid_list[0].bytes,
bssid, sizeof(struct qdf_mac_addr));
scan_filter->ignore_auth_enc_type = true;
list = wlan_scan_get_result(pdev, scan_filter);
qdf_mem_free(scan_filter);
if (!list || (list && !qdf_list_size(list))) {
mlme_debug("scan list empty");
goto error;
}
qdf_list_peek_front(list, (qdf_list_node_t **) &first_node);
if (first_node && first_node->entry)
rssi = first_node->entry->rssi_raw;
error:
if (list)
wlan_scan_purge_results(list);
return rssi;
}
static void
cm_connect_success_diag(struct wlan_mlme_psoc_ext_obj *mlme_obj,
struct host_event_wlan_connection_stats *stats)
{
WLAN_HOST_DIAG_EVENT_DEF(connect_status,
host_event_wlan_status_payload_type);
qdf_mem_zero(&connect_status,
sizeof(host_event_wlan_status_payload_type));
connect_status.eventId = DIAG_WLAN_STATUS_CONNECT;
connect_status.bssType = 0;
mlme_obj->cfg.sta.current_rssi = stats->rssi;
connect_status.qosCapability = stats->qos_capability;
connect_status.authType = stats->auth_type;
connect_status.encryptionType = stats->encryption_type;
qdf_mem_copy(connect_status.ssid, stats->ssid, stats->ssid_len);
connect_status.reason = DIAG_REASON_UNSPECIFIED;
qdf_mem_copy(&mlme_obj->cfg.sta.event_payload, &connect_status,
sizeof(host_event_wlan_status_payload_type));
WLAN_HOST_DIAG_EVENT_REPORT(&connect_status, EVENT_WLAN_STATUS_V2);
}
void cm_connect_info(struct wlan_objmgr_vdev *vdev, bool connect_success,
struct qdf_mac_addr *bssid, struct wlan_ssid *ssid,
qdf_freq_t freq)
{
struct wlan_channel *des_chan;
struct vdev_mlme_obj *vdev_mlme;
struct wlan_crypto_params *crypto_params;
uint8_t max_supported_nss;
enum QDF_OPMODE opmode;
struct wlan_objmgr_pdev *pdev;
struct wlan_objmgr_psoc *psoc;
struct wlan_mlme_psoc_ext_obj *mlme_obj;
WLAN_HOST_DIAG_EVENT_DEF(conn_stats,
struct host_event_wlan_connection_stats);
if (!ssid || !bssid)
return;
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev)
return;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc)
return;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return;
qdf_mem_zero(&conn_stats,
sizeof(struct host_event_wlan_connection_stats));
qdf_mem_copy(conn_stats.bssid, bssid->bytes,
QDF_MAC_ADDR_SIZE);
conn_stats.ssid_len = ssid->length;
if (conn_stats.ssid_len > WLAN_SSID_MAX_LEN)
conn_stats.ssid_len = WLAN_SSID_MAX_LEN;
qdf_mem_copy(conn_stats.ssid, ssid->ssid, conn_stats.ssid_len);
conn_stats.rssi = cm_get_rssi_by_bssid(pdev, bssid);
conn_stats.est_link_speed = 0;
des_chan = wlan_vdev_mlme_get_des_chan(vdev);
conn_stats.chnl_bw =
cm_get_diag_ch_width(des_chan->ch_width);
conn_stats.dot11mode =
cm_diag_dot11_mode_from_phy_mode(des_chan->ch_phymode);
opmode = wlan_vdev_mlme_get_opmode(vdev);
conn_stats.bss_type = cm_get_diag_persona(opmode);
if (freq)
conn_stats.operating_channel =
wlan_reg_freq_to_chan(pdev, freq);
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
if (!vdev_mlme) {
mlme_err("vdev component object is NULL");
return;
}
conn_stats.qos_capability =
vdev_mlme->ext_vdev_ptr->connect_info.qos_enabled;
crypto_params = wlan_crypto_vdev_get_crypto_params(vdev);
if (!crypto_params) {
mlme_err("crypto params is null");
return;
}
cm_diag_get_auth_type(&conn_stats.auth_type,
crypto_params->authmodeset,
crypto_params->key_mgmt,
crypto_params->ucastcipherset);
conn_stats.encryption_type =
cm_get_diag_enc_type(crypto_params->ucastcipherset);
conn_stats.result_code = connect_success;
conn_stats.reason_code = 0;
conn_stats.op_freq = freq;
max_supported_nss = mlme_obj->cfg.vht_caps.vht_cap_info.enable2x2 ?
MAX_VDEV_NSS : 1;
mlme_nofl_debug("+---------CONNECTION INFO START------------+");
mlme_nofl_debug("VDEV-ID: %d self_mac:"QDF_MAC_ADDR_FMT,
wlan_vdev_get_id(vdev),
QDF_MAC_ADDR_REF(wlan_vdev_mlme_get_macaddr(vdev)));
mlme_nofl_debug("ssid: %.*s bssid: "QDF_MAC_ADDR_FMT" RSSI: %d dBm",
conn_stats.ssid_len, conn_stats.ssid,
QDF_MAC_ADDR_REF(conn_stats.bssid), conn_stats.rssi);
mlme_nofl_debug("Channel Freq: %d channel_bw: %s dot11Mode: %s",
conn_stats.op_freq,
cm_diag_get_ch_width_str(conn_stats.chnl_bw),
cm_diag_get_dot11_mode_str(conn_stats.dot11mode));
mlme_nofl_debug("AKM: %s Encry-type: %s",
cm_diag_get_akm_str(conn_stats.auth_type,
crypto_params->key_mgmt),
cm_diag_get_encr_type_str(conn_stats.encryption_type));
mlme_nofl_debug("DUT_NSS: %d | Intersected NSS:%d",
max_supported_nss, wlan_vdev_mlme_get_nss(vdev));
mlme_nofl_debug("Qos enable: %d | Associated: %s",
conn_stats.qos_capability,
(conn_stats.result_code ? "yes" : "no"));
mlme_nofl_debug("+---------CONNECTION INFO END------------+");
WLAN_HOST_DIAG_EVENT_REPORT(&conn_stats, EVENT_WLAN_CONN_STATS_V2);
if (!connect_success)
return;
/* store connect info on success */
cm_connect_success_diag(mlme_obj, &conn_stats);
}
#ifdef WLAN_UNIT_TEST
static const char *cm_diag_get_persona(enum mgmt_bss_type persona)
{
switch (persona) {
CASE_RETURN_STRING(STA_PERSONA);
CASE_RETURN_STRING(SAP_PERSONA);
CASE_RETURN_STRING(P2P_CLIENT_PERSONA);
CASE_RETURN_STRING(P2P_GO_PERSONA);
CASE_RETURN_STRING(FTM_PERSONA);
CASE_RETURN_STRING(MONITOR_PERSONA);
CASE_RETURN_STRING(P2P_DEVICE_PERSONA);
CASE_RETURN_STRING(NDI_PERSONA);
CASE_RETURN_STRING(WDS_PERSONA);
default:
return "Unknown";
}
}
static const char *cm_diag_get_auth_type_str(uint8_t auth_type)
{
switch (auth_type) {
CASE_RETURN_STRING(AUTH_OPEN);
CASE_RETURN_STRING(AUTH_SHARED);
CASE_RETURN_STRING(AUTH_WPA_EAP);
CASE_RETURN_STRING(AUTH_WPA_PSK);
CASE_RETURN_STRING(AUTH_WPA2_EAP);
CASE_RETURN_STRING(AUTH_WPA2_PSK);
CASE_RETURN_STRING(AUTH_WAPI_CERT);
CASE_RETURN_STRING(AUTH_WAPI_PSK);
default:
return "Unknown";
}
}
void cm_get_sta_cxn_info(struct wlan_objmgr_vdev *vdev,
char *buf, uint32_t buf_sz)
{
struct qdf_mac_addr bss_peer_mac;
struct wlan_ssid ssid;
QDF_STATUS status;
struct wlan_channel *des_chan;
struct vdev_mlme_obj *vdev_mlme;
struct wlan_crypto_params *crypto_params;
qdf_freq_t oper_freq;
int8_t rssi = 0;
uint32_t nss, hw_mode;
struct policy_mgr_conc_connection_info *conn_info;
uint32_t i = 0, len = 0, max_cxn = 0;
enum mgmt_ch_width ch_width;
enum mgmt_dot11_mode dot11mode;
enum mgmt_bss_type type;
uint8_t authtype;
enum mgmt_encrypt_type enctype;
enum QDF_OPMODE opmode;
struct wlan_objmgr_pdev *pdev;
struct wlan_objmgr_psoc *psoc;
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev)
return;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc)
return;
qdf_mem_set(buf, buf_sz, '\0');
status = wlan_vdev_get_bss_peer_mac(vdev, &bss_peer_mac);
if (QDF_IS_STATUS_ERROR(status))
return;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tbssid: "QDF_MAC_ADDR_FMT,
QDF_MAC_ADDR_REF(bss_peer_mac.bytes));
status = wlan_vdev_mlme_get_ssid(vdev, ssid.ssid, &ssid.length);
if (QDF_IS_STATUS_ERROR(status))
return;
if (ssid.length > WLAN_SSID_MAX_LEN)
ssid.length = WLAN_SSID_MAX_LEN;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tssid: %.*s", ssid.length,
ssid.ssid);
rssi = cm_get_rssi_by_bssid(pdev, &bss_peer_mac);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\trssi: %d", rssi);
des_chan = wlan_vdev_mlme_get_des_chan(vdev);
ch_width = cm_get_diag_ch_width(des_chan->ch_width);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tbw: %s", cm_diag_get_ch_width_str(ch_width));
dot11mode = cm_diag_dot11_mode_from_phy_mode(des_chan->ch_phymode);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tdot11mode: %s",
cm_diag_get_dot11_mode_str(dot11mode));
opmode = wlan_vdev_mlme_get_opmode(vdev);
type = cm_get_diag_persona(opmode);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tbss_type: %s", cm_diag_get_persona(type));
oper_freq = wlan_get_operation_chan_freq(vdev);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tch_freq: %d", oper_freq);
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
if (!vdev_mlme) {
mlme_err("vdev component object is NULL");
return;
}
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tQoS: %d",
vdev_mlme->ext_vdev_ptr->connect_info.qos_enabled);
crypto_params = wlan_crypto_vdev_get_crypto_params(vdev);
if (!crypto_params) {
mlme_err("crypto params is null");
return;
}
cm_diag_get_auth_type(&authtype, crypto_params->authmodeset,
crypto_params->key_mgmt,
crypto_params->ucastcipherset);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tauth_type: %s",
cm_diag_get_auth_type_str(authtype));
enctype = cm_get_diag_enc_type(crypto_params->ucastcipherset);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tencry_type: %s",
cm_diag_get_encr_type_str(enctype));
conn_info = policy_mgr_get_conn_info(&max_cxn);
for (i = 0; i < max_cxn; i++)
if ((conn_info->vdev_id == wlan_vdev_get_id(vdev)) &&
(conn_info->in_use))
break;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tmac: %d", conn_info->mac);
nss = wlan_vdev_mlme_get_nss(vdev);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\torig_nss: %dx%d neg_nss: %dx%d",
conn_info->original_nss, conn_info->original_nss,
nss, nss);
hw_mode = policy_mgr_is_current_hwmode_dbs(psoc);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tis_current_hw_mode_dbs: %s",
((hw_mode != 0) ? "yes" : "no"));
}
#endif
#endif
#ifdef FEATURE_CM_ENABLE
QDF_STATUS cm_connect_start_ind(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_connect_req *req)
@@ -321,6 +963,9 @@ cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
wlan_cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_INIT,
REASON_CONNECT);
cm_csr_connect_done_ind(vdev, rsp);
cm_connect_info(vdev, QDF_IS_STATUS_SUCCESS(rsp->connect_status) ?
true : false, &rsp->bssid, &rsp->ssid,
rsp->freq);
if (QDF_IS_STATUS_SUCCESS(rsp->connect_status))
policy_mgr_incr_active_session(psoc, op_mode, vdev_id);

View File

@@ -117,6 +117,60 @@ cm_handle_disconnect_req(struct wlan_objmgr_vdev *vdev,
return status;
}
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
static void cm_disconnect_diag_event(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_discon_rsp *rsp)
{
struct wlan_objmgr_psoc *psoc;
struct wlan_mlme_psoc_ext_obj *mlme_obj;
WLAN_HOST_DIAG_EVENT_DEF(connect_status,
host_event_wlan_status_payload_type);
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc)
return;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return;
qdf_mem_zero(&connect_status,
sizeof(host_event_wlan_status_payload_type));
qdf_mem_copy(&connect_status,
&mlme_obj->cfg.sta.event_payload,
sizeof(host_event_wlan_status_payload_type));
connect_status.rssi = mlme_obj->cfg.sta.current_rssi;
connect_status.eventId = DIAG_WLAN_STATUS_DISCONNECT;
if (rsp->req.req.reason_code == REASON_MIC_FAILURE) {
connect_status.reason = DIAG_REASON_MIC_ERROR;
} else if (rsp->req.req.source == CM_PEER_DISCONNECT) {
switch (rsp->req.req.reason_code) {
case REASON_PREV_AUTH_NOT_VALID:
case REASON_CLASS2_FRAME_FROM_NON_AUTH_STA:
case REASON_DEAUTH_NETWORK_LEAVING:
connect_status.reason = DIAG_REASON_DEAUTH;
break;
default:
connect_status.reason = DIAG_REASON_DISASSOC;
break;
}
connect_status.reasonDisconnect = rsp->req.req.reason_code;
} else if (rsp->req.req.source == CM_SB_DISCONNECT) {
connect_status.reason = DIAG_REASON_DEAUTH;
connect_status.reasonDisconnect = rsp->req.req.reason_code;
} else {
connect_status.reason = DIAG_REASON_USER_REQUESTED;
}
WLAN_HOST_DIAG_EVENT_REPORT(&connect_status,
EVENT_WLAN_STATUS_V2);
}
#else
static inline void cm_disconnect_diag_event(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_discon_rsp *rsp)
{}
#endif
QDF_STATUS
cm_disconnect_complete_ind(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_discon_rsp *rsp)
@@ -138,7 +192,7 @@ cm_disconnect_complete_ind(struct wlan_objmgr_vdev *vdev,
mlme_err("vdev_id: %d psoc not found", vdev_id);
return QDF_STATUS_E_INVAL;
}
cm_disconnect_diag_event(vdev, rsp);
wlan_tdls_notify_sta_disconnect(vdev_id, false, false, vdev);
policy_mgr_decr_session_set_pcl(psoc, op_mode, vdev_id);

View File

@@ -1278,6 +1278,7 @@ struct switch_channel_ind {
struct ch_params chan_params;
struct qdf_mac_addr bssid; /* BSSID */
QDF_STATUS status;
enum wlan_phymode ch_phymode;
};
/* / Definition for MIC failure indication */

View File

@@ -2043,6 +2043,7 @@ void lim_switch_channel_cback(struct mac_context *mac, QDF_STATUS status,
pSirSmeSwitchChInd->chan_params.mhz_freq_seg1 =
des_chan->ch_cfreq2;
}
pSirSmeSwitchChInd->ch_phymode = des_chan->ch_phymode;
pSirSmeSwitchChInd->status = status;
qdf_mem_copy(pSirSmeSwitchChInd->bssid.bytes, pe_session->bssId,

View File

@@ -182,23 +182,6 @@ enum csr_roam_wmstatus_changetypes {
eCsrDeauthenticated
};
enum csr_diagwlan_status_eventsubtype {
eCSR_WLAN_STATUS_CONNECT = 0,
eCSR_WLAN_STATUS_DISCONNECT
};
enum csr_diagwlan_status_eventreason {
eCSR_REASON_UNSPECIFIED = 0,
eCSR_REASON_USER_REQUESTED,
eCSR_REASON_MIC_ERROR,
eCSR_REASON_DISASSOC,
eCSR_REASON_DEAUTH,
eCSR_REASON_HANDOFF,
eCSR_REASON_ROAM_SYNCH_IND,
eCSR_REASON_ROAM_SYNCH_CNF,
eCSR_REASON_ROAM_HO_FAIL,
};
struct csr_channel {
uint8_t numChannels;
uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN];
@@ -963,12 +946,12 @@ void csr_process_ho_fail_ind(struct mac_context *mac, void *msg_buf);
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
void csr_roaming_report_diag_event(struct mac_context *mac_ctx,
struct roam_offload_synch_ind *roam_synch_ind_ptr,
enum csr_diagwlan_status_eventreason reason);
enum diagwlan_status_eventreason reason);
#else
static inline void csr_roaming_report_diag_event(
struct mac_context *mac_ctx,
struct roam_offload_synch_ind *roam_synch_ind_ptr,
enum csr_diagwlan_status_eventreason reason)
enum diagwlan_status_eventreason reason)
{}
#endif

View File

@@ -3792,6 +3792,7 @@ sme_test_config_twt_terminate(struct wmi_twt_del_dialog_param *params)
}
#endif
#ifdef WLAN_UNIT_TEST
/**
* sme_get_sta_cxn_info() - This function populates all the connection
* information which is formed by DUT-STA to AP
@@ -3817,6 +3818,7 @@ sme_get_sta_cxn_info(mac_handle_t mac_handle, uint32_t session_id,
return QDF_STATUS_SUCCESS;
}
#endif
#endif
#if defined(FEATURE_WLAN_ESE) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**

View File

@@ -378,9 +378,6 @@ struct sme_context {
void **sme_cmd_buf_addr;
tDblLinkList sme_cmd_freelist; /* preallocated roam cmd list */
enum QDF_OPMODE curr_device_mode;
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
host_event_wlan_status_payload_type eventPayload;
#endif
void *ll_stats_context;
link_layer_stats_cb link_layer_stats_cb;
void (*link_layer_stats_ext_cb)(hdd_handle_t callback_ctx,

View File

@@ -15183,6 +15183,7 @@ uint8_t sme_get_mcs_idx(uint16_t raw_rate, enum tx_rate_info rate_flags,
nss, dcm, guard_interval, mcs_rate_flags);
}
#ifdef WLAN_UNIT_TEST
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
QDF_STATUS sme_get_sta_cxn_info(mac_handle_t mac_handle, uint32_t session_id,
char *buf, uint32_t buf_sz)
@@ -15197,6 +15198,8 @@ QDF_STATUS sme_get_sta_cxn_info(mac_handle_t mac_handle, uint32_t session_id,
return status;
}
#endif
#endif
QDF_STATUS
sme_get_roam_scan_stats(mac_handle_t mac_handle,
roam_scan_stats_cb cb, void *context,

View File

@@ -172,178 +172,6 @@ static inline QDF_STATUS csr_sae_callback(struct mac_context *mac_ctx,
}
#endif
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
enum mgmt_auth_type diag_auth_type_from_csr_type(enum csr_akm_type authtype)
{
int n = AUTH_OPEN;
switch (authtype) {
case eCSR_AUTH_TYPE_SHARED_KEY:
n = AUTH_SHARED;
break;
case eCSR_AUTH_TYPE_WPA:
n = AUTH_WPA_EAP;
break;
case eCSR_AUTH_TYPE_WPA_PSK:
n = AUTH_WPA_PSK;
break;
case eCSR_AUTH_TYPE_RSN:
case eCSR_AUTH_TYPE_SUITEB_EAP_SHA256:
case eCSR_AUTH_TYPE_SUITEB_EAP_SHA384:
#ifdef WLAN_FEATURE_11W
case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
#endif
n = AUTH_WPA2_EAP;
break;
case eCSR_AUTH_TYPE_RSN_PSK:
#ifdef WLAN_FEATURE_11W
case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
#endif
n = AUTH_WPA2_PSK;
break;
#ifdef FEATURE_WLAN_WAPI
case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
n = AUTH_WAPI_CERT;
break;
case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
n = AUTH_WAPI_PSK;
break;
#endif /* FEATURE_WLAN_WAPI */
default:
break;
}
return n;
}
enum mgmt_encrypt_type diag_enc_type_from_csr_type(eCsrEncryptionType enctype)
{
int n = ENC_MODE_OPEN;
switch (enctype) {
case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
case eCSR_ENCRYPT_TYPE_WEP40:
n = ENC_MODE_WEP40;
break;
case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
case eCSR_ENCRYPT_TYPE_WEP104:
n = ENC_MODE_WEP104;
break;
case eCSR_ENCRYPT_TYPE_TKIP:
n = ENC_MODE_TKIP;
break;
case eCSR_ENCRYPT_TYPE_AES:
n = ENC_MODE_AES;
break;
case eCSR_ENCRYPT_TYPE_AES_GCMP:
n = ENC_MODE_AES_GCMP;
break;
case eCSR_ENCRYPT_TYPE_AES_GCMP_256:
n = ENC_MODE_AES_GCMP_256;
break;
#ifdef FEATURE_WLAN_WAPI
case eCSR_ENCRYPT_TYPE_WPI:
n = ENC_MODE_SMS4;
break;
#endif /* FEATURE_WLAN_WAPI */
default:
break;
}
return n;
}
enum mgmt_dot11_mode
diag_dot11_mode_from_csr_type(enum csr_cfgdot11mode dot11mode)
{
switch (dot11mode) {
case eCSR_CFG_DOT11_MODE_ABG:
return DOT11_MODE_ABG;
case eCSR_CFG_DOT11_MODE_11A:
return DOT11_MODE_11A;
case eCSR_CFG_DOT11_MODE_11B:
return DOT11_MODE_11B;
case eCSR_CFG_DOT11_MODE_11G:
return DOT11_MODE_11G;
case eCSR_CFG_DOT11_MODE_11N:
return DOT11_MODE_11N;
case eCSR_CFG_DOT11_MODE_11AC:
return DOT11_MODE_11AC;
case eCSR_CFG_DOT11_MODE_11G_ONLY:
return DOT11_MODE_11G_ONLY;
case eCSR_CFG_DOT11_MODE_11N_ONLY:
return DOT11_MODE_11N_ONLY;
case eCSR_CFG_DOT11_MODE_11AC_ONLY:
return DOT11_MODE_11AC_ONLY;
case eCSR_CFG_DOT11_MODE_AUTO:
return DOT11_MODE_AUTO;
case eCSR_CFG_DOT11_MODE_11AX:
return DOT11_MODE_11AX;
case eCSR_CFG_DOT11_MODE_11AX_ONLY:
return DOT11_MODE_11AX_ONLY;
default:
return DOT11_MODE_MAX;
}
}
enum mgmt_ch_width diag_ch_width_from_csr_type(enum phy_ch_width ch_width)
{
switch (ch_width) {
case CH_WIDTH_20MHZ:
return BW_20MHZ;
case CH_WIDTH_40MHZ:
return BW_40MHZ;
case CH_WIDTH_80MHZ:
return BW_80MHZ;
case CH_WIDTH_160MHZ:
return BW_160MHZ;
case CH_WIDTH_80P80MHZ:
return BW_80P80MHZ;
case CH_WIDTH_5MHZ:
return BW_5MHZ;
case CH_WIDTH_10MHZ:
return BW_10MHZ;
default:
return BW_MAX;
}
}
enum mgmt_bss_type diag_persona_from_csr_type(enum QDF_OPMODE persona)
{
switch (persona) {
case QDF_STA_MODE:
return STA_PERSONA;
case QDF_SAP_MODE:
return SAP_PERSONA;
case QDF_P2P_CLIENT_MODE:
return P2P_CLIENT_PERSONA;
case QDF_P2P_GO_MODE:
return P2P_GO_PERSONA;
case QDF_FTM_MODE:
return FTM_PERSONA;
case QDF_MONITOR_MODE:
return MONITOR_PERSONA;
case QDF_P2P_DEVICE_MODE:
return P2P_DEVICE_PERSONA;
case QDF_OCB_MODE:
return OCB_PERSONA;
case QDF_EPPING_MODE:
return EPPING_PERSONA;
case QDF_QVIT_MODE:
return QVIT_PERSONA;
case QDF_NDI_MODE:
return NDI_PERSONA;
case QDF_WDS_MODE:
return WDS_PERSONA;
case QDF_BTAMP_MODE:
return BTAMP_PERSONA;
case QDF_AHDEMO_MODE:
return AHDEMO_PERSONA;
default:
return MAX_PERSONA;
}
}
#endif /* #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR */
static const uint32_t
social_channel_freq[MAX_SOCIAL_CHANNELS] = { 2412, 2437, 2462 };
@@ -2783,194 +2611,51 @@ static void csr_roam_populate_channels(tDot11fBeaconIEs *beacon_ies,
#endif
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
static const char *csr_get_ch_width_str(uint8_t ch_width)
{
switch (ch_width) {
CASE_RETURN_STRING(BW_20MHZ);
CASE_RETURN_STRING(BW_40MHZ);
CASE_RETURN_STRING(BW_80MHZ);
CASE_RETURN_STRING(BW_160MHZ);
CASE_RETURN_STRING(BW_80P80MHZ);
CASE_RETURN_STRING(BW_5MHZ);
CASE_RETURN_STRING(BW_10MHZ);
default:
return "Unknown";
}
}
static const char *csr_get_persona(enum mgmt_bss_type persona)
{
switch (persona) {
CASE_RETURN_STRING(STA_PERSONA);
CASE_RETURN_STRING(SAP_PERSONA);
CASE_RETURN_STRING(P2P_CLIENT_PERSONA);
CASE_RETURN_STRING(P2P_GO_PERSONA);
CASE_RETURN_STRING(FTM_PERSONA);
CASE_RETURN_STRING(MONITOR_PERSONA);
CASE_RETURN_STRING(P2P_DEVICE_PERSONA);
CASE_RETURN_STRING(NDI_PERSONA);
CASE_RETURN_STRING(WDS_PERSONA);
default:
return "Unknown";
}
}
static const char *csr_get_dot11_mode_str(enum mgmt_dot11_mode dot11mode)
{
switch (dot11mode) {
CASE_RETURN_STRING(DOT11_MODE_AUTO);
CASE_RETURN_STRING(DOT11_MODE_ABG);
CASE_RETURN_STRING(DOT11_MODE_11A);
CASE_RETURN_STRING(DOT11_MODE_11B);
CASE_RETURN_STRING(DOT11_MODE_11G);
CASE_RETURN_STRING(DOT11_MODE_11N);
CASE_RETURN_STRING(DOT11_MODE_11AC);
CASE_RETURN_STRING(DOT11_MODE_11G_ONLY);
CASE_RETURN_STRING(DOT11_MODE_11N_ONLY);
CASE_RETURN_STRING(DOT11_MODE_11AC_ONLY);
CASE_RETURN_STRING(DOT11_MODE_11AX);
CASE_RETURN_STRING(DOT11_MODE_11AX_ONLY);
default:
return "Unknown";
}
}
static const char *csr_get_auth_type_str(uint8_t auth_type)
{
switch (auth_type) {
CASE_RETURN_STRING(AUTH_OPEN);
CASE_RETURN_STRING(AUTH_SHARED);
CASE_RETURN_STRING(AUTH_WPA_EAP);
CASE_RETURN_STRING(AUTH_WPA_PSK);
CASE_RETURN_STRING(AUTH_WPA2_EAP);
CASE_RETURN_STRING(AUTH_WPA2_PSK);
CASE_RETURN_STRING(AUTH_WAPI_CERT);
CASE_RETURN_STRING(AUTH_WAPI_PSK);
default:
return "Unknown";
}
}
static const char *csr_get_encr_type_str(uint8_t encr_type)
{
switch (encr_type) {
CASE_RETURN_STRING(ENC_MODE_OPEN);
CASE_RETURN_STRING(ENC_MODE_WEP40);
CASE_RETURN_STRING(ENC_MODE_WEP104);
CASE_RETURN_STRING(ENC_MODE_TKIP);
CASE_RETURN_STRING(ENC_MODE_AES);
CASE_RETURN_STRING(ENC_MODE_AES_GCMP);
CASE_RETURN_STRING(ENC_MODE_AES_GCMP_256);
CASE_RETURN_STRING(ENC_MODE_SMS4);
default:
return "Unknown";
}
}
static const uint8_t *csr_get_akm_str(uint8_t akm)
{
switch (akm) {
case eCSR_AUTH_TYPE_OPEN_SYSTEM:
return "Open";
case eCSR_AUTH_TYPE_SHARED_KEY:
return "Shared Key";
case eCSR_AUTH_TYPE_SAE:
return "SAE";
case eCSR_AUTH_TYPE_WPA:
return "WPA";
case eCSR_AUTH_TYPE_WPA_PSK:
return "WPA-PSK";
case eCSR_AUTH_TYPE_WPA_NONE:
return "WPA-NONE";
case eCSR_AUTH_TYPE_RSN:
return "EAP 802.1x";
case eCSR_AUTH_TYPE_RSN_PSK:
return "WPA2-PSK";
case eCSR_AUTH_TYPE_FT_RSN:
return "FT-802.1x";
case eCSR_AUTH_TYPE_FT_RSN_PSK:
return "FT-PSK";
case eCSR_AUTH_TYPE_CCKM_WPA:
return "WPA-CCKM";
case eCSR_AUTH_TYPE_CCKM_RSN:
return "RSN-CCKM";
case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
return "PSK-SHA256";
case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
return "EAP 802.1x-SHA256";
case eCSR_AUTH_TYPE_FILS_SHA256:
return "FILS-SHA256";
case eCSR_AUTH_TYPE_FILS_SHA384:
return "FILS-SHA384";
case eCSR_AUTH_TYPE_FT_FILS_SHA256:
return "FILS-SHA256";
case eCSR_AUTH_TYPE_FT_FILS_SHA384:
return "FILS-SHA384";
case eCSR_AUTH_TYPE_DPP_RSN:
return "DPP";
case eCSR_AUTH_TYPE_OWE:
return "OWE";
case eCSR_AUTH_TYPE_SUITEB_EAP_SHA256:
return "EAP Suite-B SHA256";
case eCSR_AUTH_TYPE_SUITEB_EAP_SHA384:
return "EAP Suite-B SHA384";
case eCSR_AUTH_TYPE_OSEN:
return "OSEN";
case eCSR_AUTH_TYPE_FT_SAE:
return "FT-SAE";
case eCSR_AUTH_TYPE_FT_SUITEB_EAP_SHA384:
return "FT-Suite-B SHA384";
default:
return "NONE";
}
}
/**
* csr_get_sta_ap_intersected_nss - Get the intersected NSS capability between
* sta and connected AP.
* @mac_ctx: Pointer to mac context
* @vdev_id: Vdev id
*
* Return: NSS value
*/
static uint8_t
csr_get_sta_ap_intersected_nss(struct mac_context *mac_ctx, uint8_t vdev_id)
void cm_diag_get_auth_enc_type_vdev_id(struct wlan_objmgr_psoc *psoc,
uint8_t *auth_type,
uint8_t *ucast_cipher,
uint8_t *mcast_cipher,
uint8_t vdev_id)
{
struct wlan_objmgr_vdev *vdev;
uint8_t intrsct_nss;
struct wlan_crypto_params *crypto_params;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, vdev_id,
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_LEGACY_MAC_ID);
if (!vdev) {
pe_warn("vdev not found for id: %d", vdev_id);
return 0;
mlme_err("vdev object is NULL for vdev %d", vdev_id);
return;
}
wlan_vdev_obj_lock(vdev);
intrsct_nss = wlan_vdev_mlme_get_nss(vdev);
wlan_vdev_obj_unlock(vdev);
crypto_params = wlan_crypto_vdev_get_crypto_params(vdev);
if (!crypto_params) {
mlme_err("crypto params is null");
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
return;
}
if (auth_type)
cm_diag_get_auth_type(auth_type,
crypto_params->authmodeset,
crypto_params->key_mgmt,
crypto_params->ucastcipherset);
if (ucast_cipher)
*ucast_cipher =
cm_get_diag_enc_type(crypto_params->ucastcipherset);
if (mcast_cipher)
*mcast_cipher =
cm_get_diag_enc_type(crypto_params->ucastcipherset);
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
return intrsct_nss;
}
#ifndef FEATURE_CM_ENABLE
static void
csr_cm_connect_info(struct mac_context *mac_ctx, uint8_t vdev_id,
bool connect_success)
bool connect_success, struct qdf_mac_addr *bssid,
tSirMacSSid *connect_ssid, qdf_freq_t freq)
{
struct wlan_objmgr_vdev *vdev;
struct qdf_mac_addr bss_peer_mac;
struct sSirMacSSid ssid;
qdf_freq_t oper_freq;
QDF_STATUS status;
struct wlan_channel *des_chan;
struct vdev_mlme_obj *vdev_mlme;
struct wlan_crypto_params *crypto_params;
eCsrEncryptionType uc_encrypt_type;
enum csr_akm_type auth_type;
uint8_t max_supported_nss;
enum QDF_OPMODE opmode;
WLAN_HOST_DIAG_EVENT_DEF(conn_stats,
struct host_event_wlan_connection_stats);
struct wlan_ssid ssid;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, vdev_id,
WLAN_LEGACY_MAC_ID);
@@ -2978,127 +2663,17 @@ csr_cm_connect_info(struct mac_context *mac_ctx, uint8_t vdev_id,
sme_err("vdev object is NULL for vdev %d", vdev_id);
return;
}
qdf_mem_zero(&conn_stats,
sizeof(struct host_event_wlan_connection_stats));
status = wlan_vdev_get_bss_peer_mac(vdev, &bss_peer_mac);
if (QDF_IS_STATUS_ERROR(status))
goto connect_info_failed;
qdf_mem_copy(conn_stats.bssid, bss_peer_mac.bytes,
QDF_MAC_ADDR_SIZE);
status = wlan_vdev_mlme_get_ssid(vdev, ssid.ssId, &ssid.length);
if (QDF_IS_STATUS_ERROR(status))
goto connect_info_failed;
conn_stats.ssid_len = ssid.length;
if (conn_stats.ssid_len > WLAN_SSID_MAX_LEN)
conn_stats.ssid_len = WLAN_SSID_MAX_LEN;
qdf_mem_copy(conn_stats.ssid, ssid.ssId,
conn_stats.ssid_len);
sme_get_rssi_snr_by_bssid(MAC_HANDLE(mac_ctx),
&conn_stats.bssid[0], &conn_stats.rssi, NULL);
conn_stats.est_link_speed = 0;
des_chan = wlan_vdev_mlme_get_des_chan(vdev);
conn_stats.chnl_bw =
diag_ch_width_from_csr_type(des_chan->ch_width);
conn_stats.dot11mode =
diag_dot11_mode_from_csr_type(
sme_phy_mode_to_dot11mode(des_chan->ch_phymode));
opmode = wlan_vdev_mlme_get_opmode(vdev);
conn_stats.bss_type = diag_persona_from_csr_type(opmode);
oper_freq = wlan_get_operation_chan_freq(vdev);
if (oper_freq)
conn_stats.operating_channel =
wlan_reg_freq_to_chan(mac_ctx->pdev, oper_freq);
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
if (!vdev_mlme) {
sme_err("vdev component object is NULL");
goto connect_info_failed;
}
conn_stats.qos_capability =
vdev_mlme->ext_vdev_ptr->connect_info.qos_enabled;
crypto_params = wlan_crypto_vdev_get_crypto_params(vdev);
if (!crypto_params) {
sme_err("crypto params is null");
goto connect_info_failed;
}
csr_fill_auth_type(&auth_type,
crypto_params->authmodeset,
crypto_params->key_mgmt,
crypto_params->ucastcipherset);
conn_stats.auth_type =
diag_auth_type_from_csr_type(auth_type);
csr_fill_enc_type(&uc_encrypt_type, crypto_params->ucastcipherset);
conn_stats.encryption_type =
diag_enc_type_from_csr_type(uc_encrypt_type);
conn_stats.result_code = connect_success;
conn_stats.reason_code = 0;
conn_stats.op_freq = oper_freq;
max_supported_nss = mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable2x2 ?
MAX_VDEV_NSS : 1;
sme_nofl_debug("+---------CONNECTION INFO START------------+");
sme_nofl_debug("VDEV-ID: %d self_mac:"QDF_MAC_ADDR_FMT, vdev_id,
QDF_MAC_ADDR_REF(wlan_vdev_mlme_get_macaddr(vdev)));
sme_nofl_debug("ssid: %.*s bssid: "QDF_MAC_ADDR_FMT" RSSI: %d dBm",
conn_stats.ssid_len, conn_stats.ssid,
QDF_MAC_ADDR_REF(conn_stats.bssid), conn_stats.rssi);
sme_nofl_debug("Channel Freq: %d channel_bw: %s dot11Mode: %s", conn_stats.op_freq,
csr_get_ch_width_str(conn_stats.chnl_bw),
csr_get_dot11_mode_str(conn_stats.dot11mode));
sme_nofl_debug("AKM: %s Encry-type: %s",
csr_get_akm_str(auth_type),
csr_get_encr_type_str(conn_stats.encryption_type));
sme_nofl_debug("DUT_NSS: %d | Intersected NSS:%d",
max_supported_nss,
csr_get_sta_ap_intersected_nss(mac_ctx, vdev_id));
sme_nofl_debug("Qos enable: %d | Associated: %s",
conn_stats.qos_capability,
(conn_stats.result_code ? "yes" : "no"));
sme_nofl_debug("+---------CONNECTION INFO END------------+");
WLAN_HOST_DIAG_EVENT_REPORT(&conn_stats, EVENT_WLAN_CONN_STATS_V2);
connect_info_failed:
ssid.length = connect_ssid->length;
qdf_mem_copy(ssid.ssid, connect_ssid->ssId, WLAN_SSID_MAX_LEN);
cm_connect_info(vdev, connect_success, bssid, &ssid, freq);
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
}
#endif
#ifdef WLAN_UNIT_TEST
void csr_cm_get_sta_cxn_info(struct mac_context *mac_ctx, uint8_t vdev_id,
char *buf, uint32_t buf_sz)
{
struct wlan_objmgr_vdev *vdev;
struct qdf_mac_addr bss_peer_mac;
struct sSirMacSSid ssid;
QDF_STATUS status;
struct wlan_channel *des_chan;
struct vdev_mlme_obj *vdev_mlme;
struct wlan_crypto_params *crypto_params;
eCsrEncryptionType uc_encrypt_type;
enum csr_akm_type auth_type;
qdf_freq_t oper_freq;
int8_t rssi = 0;
uint32_t nss, hw_mode;
struct policy_mgr_conc_connection_info *conn_info;
struct wma_txrx_node *wma_conn_table_entry = NULL;
uint32_t i = 0, len = 0, max_cxn = 0;
enum mgmt_ch_width ch_width;
enum mgmt_dot11_mode dot11mode;
enum mgmt_bss_type type;
enum mgmt_auth_type authtype;
enum mgmt_encrypt_type enctype;
enum QDF_OPMODE opmode;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, vdev_id,
WLAN_LEGACY_MAC_ID);
@@ -3107,111 +2682,21 @@ void csr_cm_get_sta_cxn_info(struct mac_context *mac_ctx, uint8_t vdev_id,
return;
}
qdf_mem_set(buf, buf_sz, '\0');
status = wlan_vdev_get_bss_peer_mac(vdev, &bss_peer_mac);
if (QDF_IS_STATUS_ERROR(status))
goto cm_get_sta_cxn_info_failed;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tbssid: "QDF_MAC_ADDR_FMT,
QDF_MAC_ADDR_REF(bss_peer_mac.bytes));
status = wlan_vdev_mlme_get_ssid(vdev, ssid.ssId, &ssid.length);
if (QDF_IS_STATUS_ERROR(status))
goto cm_get_sta_cxn_info_failed;
if (ssid.length > WLAN_SSID_MAX_LEN)
ssid.length = WLAN_SSID_MAX_LEN;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tssid: %.*s", ssid.length,
ssid.ssId);
sme_get_rssi_snr_by_bssid(MAC_HANDLE(mac_ctx),
bss_peer_mac.bytes, &rssi, NULL);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\trssi: %d", rssi);
des_chan = wlan_vdev_mlme_get_des_chan(vdev);
ch_width = diag_ch_width_from_csr_type(des_chan->ch_width);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tbw: %s", csr_get_ch_width_str(ch_width));
dot11mode = diag_dot11_mode_from_csr_type(
sme_phy_mode_to_dot11mode(des_chan->ch_phymode));
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tdot11mode: %s",
csr_get_dot11_mode_str(dot11mode));
opmode = wlan_vdev_mlme_get_opmode(vdev);
type = diag_persona_from_csr_type(opmode);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tbss_type: %s", csr_get_persona(type));
oper_freq = wlan_get_operation_chan_freq(vdev);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tch_freq: %d", oper_freq);
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
if (!vdev_mlme) {
sme_err("vdev component object is NULL");
goto cm_get_sta_cxn_info_failed;
}
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tQoS: %d",
vdev_mlme->ext_vdev_ptr->connect_info.qos_enabled);
crypto_params = wlan_crypto_vdev_get_crypto_params(vdev);
if (!crypto_params) {
sme_err("crypto params is null");
goto cm_get_sta_cxn_info_failed;
}
csr_fill_auth_type(&auth_type, crypto_params->authmodeset,
crypto_params->key_mgmt,
crypto_params->ucastcipherset);
authtype = diag_auth_type_from_csr_type(auth_type);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tauth_type: %s",
csr_get_auth_type_str(authtype));
csr_fill_enc_type(&uc_encrypt_type, crypto_params->ucastcipherset);
enctype = diag_enc_type_from_csr_type(uc_encrypt_type);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tencry_type: %s",
csr_get_encr_type_str(enctype));
conn_info = policy_mgr_get_conn_info(&max_cxn);
for (i = 0; i < max_cxn; i++)
if ((conn_info->vdev_id == vdev_id) &&
(conn_info->in_use))
break;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tmac: %d", conn_info->mac);
wma_conn_table_entry = wma_get_interface_by_vdev_id(vdev_id);
if (wma_conn_table_entry)
nss = wma_conn_table_entry->nss;
else
nss = 0;
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\torig_nss: %dx%d neg_nss: %dx%d",
conn_info->original_nss, conn_info->original_nss,
nss, nss);
hw_mode = policy_mgr_is_current_hwmode_dbs(mac_ctx->psoc);
len += qdf_scnprintf(buf + len, buf_sz - len,
"\n\tis_current_hw_mode_dbs: %s",
((hw_mode != 0) ? "yes" : "no"));
cm_get_sta_cxn_info_failed:
cm_get_sta_cxn_info(vdev, buf, buf_sz);
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
}
#endif
#else
static void
#ifndef FEATURE_CM_ENABLE
static inline void
csr_cm_connect_info(struct mac_context *mac_ctx, uint8_t vdev_id,
bool connect_success)
bool connect_success, struct qdf_mac_addr *bssid,
tSirMacSSid *connect_ssid, qdf_freq_t freq)
{
}
#endif
#endif
QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
struct csr_roam_info *roam_info,
@@ -3219,14 +2704,13 @@ QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
eRoamCmdStatus u1, eCsrRoamResult u2)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
WLAN_HOST_DIAG_EVENT_DEF(connectionStatus,
host_event_wlan_status_payload_type);
#endif
struct csr_roam_session *pSession;
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
WLAN_HOST_DIAG_EVENT_DEF(connectionStatus,
host_event_wlan_status_payload_type);
#endif
tDot11fBeaconIEs *beacon_ies = NULL;
uint8_t chan1, chan2;
uint32_t chan_freq;
@@ -3302,10 +2786,13 @@ QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
if (eCSR_ROAM_ASSOCIATION_COMPLETION == u1)
csr_cm_connect_info(
mac, sessionId,
(u2 == eCSR_ROAM_RESULT_ASSOCIATED) ? true : false);
if (eCSR_ROAM_ASSOCIATION_COMPLETION == u1 && roam_info &&
roam_info->u.pConnectedProfile)
csr_cm_connect_info(mac, sessionId,
(u2 == eCSR_ROAM_RESULT_ASSOCIATED) ? true : false,
&roam_info->bssid,
&roam_info->u.pConnectedProfile->SSID,
roam_info->u.pConnectedProfile->op_freq);
#endif
if (mac->session_roam_complete_cb) {
@@ -3314,6 +2801,8 @@ QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
status = mac->session_roam_complete_cb(mac->psoc, sessionId, roam_info,
roamId, u1, u2);
}
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
/*
* EVENT_WLAN_STATUS_V2: eCSR_ROAM_ASSOCIATION_COMPLETION,
* eCSR_ROAM_LOSTLINK,
@@ -3323,68 +2812,32 @@ QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
qdf_mem_zero(&connectionStatus,
sizeof(host_event_wlan_status_payload_type));
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
if ((eCSR_ROAM_ASSOCIATION_COMPLETION == u1)
&& (eCSR_ROAM_RESULT_ASSOCIATED == u2) && roam_info) {
connectionStatus.eventId = eCSR_WLAN_STATUS_CONNECT;
connectionStatus.bssType =
roam_info->u.pConnectedProfile->BSSType;
if (roam_info->bss_desc) {
connectionStatus.rssi =
roam_info->bss_desc->rssi * (-1);
connectionStatus.channel =
wlan_reg_freq_to_chan(
mac->pdev,
roam_info->bss_desc->chan_freq);
}
mac->mlme_cfg->sta.current_rssi = connectionStatus.rssi;
connectionStatus.qosCapability =
roam_info->u.pConnectedProfile->qosConnection;
connectionStatus.authType =
(uint8_t) diag_auth_type_from_csr_type(
roam_info->u.pConnectedProfile->AuthType);
connectionStatus.encryptionType =
(uint8_t) diag_enc_type_from_csr_type(
roam_info->u.pConnectedProfile->EncryptionType);
qdf_mem_copy(connectionStatus.ssid,
roam_info->u.pConnectedProfile->SSID.ssId,
roam_info->u.pConnectedProfile->SSID.length);
connectionStatus.reason = eCSR_REASON_UNSPECIFIED;
qdf_mem_copy(&mac->sme.eventPayload, &connectionStatus,
sizeof(host_event_wlan_status_payload_type));
WLAN_HOST_DIAG_EVENT_REPORT(&connectionStatus,
EVENT_WLAN_STATUS_V2);
}
#endif
if ((eCSR_ROAM_MIC_ERROR_IND == u1)
|| (eCSR_ROAM_RESULT_MIC_FAILURE == u2)) {
qdf_mem_copy(&connectionStatus, &mac->sme.eventPayload,
sizeof(host_event_wlan_status_payload_type));
qdf_mem_copy(&connectionStatus,
&mac->mlme_cfg->sta.event_payload,
sizeof(host_event_wlan_status_payload_type));
connectionStatus.rssi = mac->mlme_cfg->sta.current_rssi;
connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = eCSR_REASON_MIC_ERROR;
connectionStatus.eventId = DIAG_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = DIAG_REASON_MIC_ERROR;
WLAN_HOST_DIAG_EVENT_REPORT(&connectionStatus,
EVENT_WLAN_STATUS_V2);
}
if (eCSR_ROAM_RESULT_FORCED == u2) {
qdf_mem_copy(&connectionStatus, &mac->sme.eventPayload,
qdf_mem_copy(&connectionStatus, &mac->mlme_cfg->sta.event_payload,
sizeof(host_event_wlan_status_payload_type));
connectionStatus.rssi = mac->mlme_cfg->sta.current_rssi;
connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = eCSR_REASON_USER_REQUESTED;
connectionStatus.eventId = DIAG_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = DIAG_REASON_USER_REQUESTED;
WLAN_HOST_DIAG_EVENT_REPORT(&connectionStatus,
EVENT_WLAN_STATUS_V2);
}
if (eCSR_ROAM_RESULT_DISASSOC_IND == u2) {
qdf_mem_copy(&connectionStatus, &mac->sme.eventPayload,
qdf_mem_copy(&connectionStatus, &mac->mlme_cfg->sta.event_payload,
sizeof(host_event_wlan_status_payload_type));
connectionStatus.rssi = mac->mlme_cfg->sta.current_rssi;
connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = eCSR_REASON_DISASSOC;
connectionStatus.eventId = DIAG_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = DIAG_REASON_DISASSOC;
if (roam_info)
connectionStatus.reasonDisconnect =
roam_info->reasonCode;
@@ -3393,11 +2846,11 @@ QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
EVENT_WLAN_STATUS_V2);
}
if (eCSR_ROAM_RESULT_DEAUTH_IND == u2) {
qdf_mem_copy(&connectionStatus, &mac->sme.eventPayload,
qdf_mem_copy(&connectionStatus, &mac->mlme_cfg->sta.event_payload,
sizeof(host_event_wlan_status_payload_type));
connectionStatus.rssi = mac->mlme_cfg->sta.current_rssi;
connectionStatus.eventId = eCSR_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = eCSR_REASON_DEAUTH;
connectionStatus.eventId = DIAG_WLAN_STATUS_DISCONNECT;
connectionStatus.reason = DIAG_REASON_DEAUTH;
if (roam_info)
connectionStatus.reasonDisconnect =
roam_info->reasonCode;
@@ -3405,6 +2858,7 @@ QDF_STATUS csr_roam_call_callback(struct mac_context *mac, uint32_t sessionId,
EVENT_WLAN_STATUS_V2);
}
#endif /* FEATURE_WLAN_DIAG_SUPPORT_CSR */
#endif
return status;
}
@@ -9997,17 +9451,13 @@ csr_roam_diag_set_ctx_rsp(struct mac_context *mac_ctx,
else
setKeyEvent.eventId =
WLAN_SECURITY_EVENT_SET_UNICAST_RSP;
setKeyEvent.encryptionModeMulticast =
(uint8_t) diag_enc_type_from_csr_type(
session->connectedProfile.mcEncryptionType);
setKeyEvent.encryptionModeUnicast =
(uint8_t) diag_enc_type_from_csr_type(
session->connectedProfile.EncryptionType);
cm_diag_get_auth_enc_type_vdev_id(mac_ctx->psoc,
&setKeyEvent.authMode,
&setKeyEvent.encryptionModeUnicast,
&setKeyEvent.encryptionModeMulticast,
session->vdev_id);
qdf_mem_copy(setKeyEvent.bssid, session->connectedProfile.bssid.bytes,
QDF_MAC_ADDR_SIZE);
setKeyEvent.authMode =
(uint8_t) diag_auth_type_from_csr_type(
session->connectedProfile.AuthType);
if (eSIR_SME_SUCCESS != pRsp->status_code)
setKeyEvent.status = WLAN_SECURITY_STATUS_FAILURE;
WLAN_HOST_DIAG_EVENT_REPORT(&setKeyEvent, EVENT_WLAN_SECURITY);
@@ -11448,21 +10898,13 @@ csr_roam_chk_lnk_swt_ch_ind(struct mac_context *mac_ctx, tSirSmeRsp *msg_ptr)
roam_info->chan_info.band_center_freq2 =
pSwitchChnInd->chan_params.mhz_freq_seg1;
switch (session->bssParams.uCfgDot11Mode) {
case eCSR_CFG_DOT11_MODE_11N:
case eCSR_CFG_DOT11_MODE_11N_ONLY:
if (IS_WLAN_PHYMODE_HT(pSwitchChnInd->ch_phymode))
roam_info->mode = SIR_SME_PHY_MODE_HT;
break;
case eCSR_CFG_DOT11_MODE_11AC:
case eCSR_CFG_DOT11_MODE_11AC_ONLY:
case eCSR_CFG_DOT11_MODE_11AX:
case eCSR_CFG_DOT11_MODE_11AX_ONLY:
else if (IS_WLAN_PHYMODE_VHT(pSwitchChnInd->ch_phymode) ||
IS_WLAN_PHYMODE_HE(pSwitchChnInd->ch_phymode))
roam_info->mode = SIR_SME_PHY_MODE_VHT;
break;
default:
else
roam_info->mode = SIR_SME_PHY_MODE_LEGACY;
break;
}
status = csr_roam_call_callback(mac_ctx, sessionId, roam_info, 0,
eCSR_ROAM_STA_CHANNEL_SWITCH,
@@ -11554,15 +10996,11 @@ csr_roam_diag_mic_fail(struct mac_context *mac_ctx, uint32_t sessionId)
}
qdf_mem_zero(&secEvent, sizeof(host_event_wlan_security_payload_type));
secEvent.eventId = WLAN_SECURITY_EVENT_MIC_ERROR;
secEvent.encryptionModeMulticast =
(uint8_t) diag_enc_type_from_csr_type(
session->connectedProfile.mcEncryptionType);
secEvent.encryptionModeUnicast =
(uint8_t) diag_enc_type_from_csr_type(
session->connectedProfile.EncryptionType);
secEvent.authMode =
(uint8_t) diag_auth_type_from_csr_type(
session->connectedProfile.AuthType);
cm_diag_get_auth_enc_type_vdev_id(mac_ctx->psoc,
&secEvent.authMode,
&secEvent.encryptionModeUnicast,
&secEvent.encryptionModeMulticast,
sessionId);
qdf_mem_copy(secEvent.bssid, session->connectedProfile.bssid.bytes,
QDF_MAC_ADDR_SIZE);
WLAN_HOST_DIAG_EVENT_REPORT(&secEvent, EVENT_WLAN_SECURITY);
@@ -14220,7 +13658,7 @@ cm_csr_connect_done_ind(struct wlan_objmgr_vdev *vdev,
SME_QOS_CSR_DISCONNECT_IND, NULL);
/* Fill legacy structures from resp for failure */
goto cm_connect_info;
return QDF_STATUS_SUCCESS;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (mlme_priv)
@@ -14273,11 +13711,6 @@ cm_csr_connect_done_ind(struct wlan_objmgr_vdev *vdev,
vdev_id);
}
cm_connect_info:
csr_cm_connect_info(
mac_ctx, vdev_id,
rsp->connect_status == STATUS_SUCCESS ? true : false);
return QDF_STATUS_SUCCESS;
}
@@ -17383,26 +16816,26 @@ QDF_STATUS csr_sta_continue_csa(struct mac_context *mac_ctx, uint8_t vdev_id)
*/
void csr_roaming_report_diag_event(struct mac_context *mac_ctx,
struct roam_offload_synch_ind *roam_synch_ind_ptr,
enum csr_diagwlan_status_eventreason reason)
enum diagwlan_status_eventreason reason)
{
WLAN_HOST_DIAG_EVENT_DEF(roam_connection,
host_event_wlan_status_payload_type);
qdf_mem_zero(&roam_connection,
sizeof(host_event_wlan_status_payload_type));
switch (reason) {
case eCSR_REASON_ROAM_SYNCH_IND:
roam_connection.eventId = eCSR_WLAN_STATUS_CONNECT;
case DIAG_REASON_ROAM_SYNCH_IND:
roam_connection.eventId = DIAG_WLAN_STATUS_CONNECT;
if (roam_synch_ind_ptr) {
roam_connection.rssi = roam_synch_ind_ptr->rssi;
roam_connection.channel =
cds_freq_to_chan(roam_synch_ind_ptr->chan_freq);
}
break;
case eCSR_REASON_ROAM_SYNCH_CNF:
roam_connection.eventId = eCSR_WLAN_STATUS_CONNECT;
case DIAG_REASON_ROAM_SYNCH_CNF:
roam_connection.eventId = DIAG_WLAN_STATUS_CONNECT;
break;
case eCSR_REASON_ROAM_HO_FAIL:
roam_connection.eventId = eCSR_WLAN_STATUS_DISCONNECT;
case DIAG_REASON_ROAM_HO_FAIL:
roam_connection.eventId = DIAG_WLAN_STATUS_DISCONNECT;
break;
default:
sme_err("LFR3: Unsupported reason %d", reason);
@@ -17457,7 +16890,7 @@ void csr_process_ho_fail_ind(struct mac_context *mac_ctx, void *msg_buf)
eCSR_ROAM_NAPI_OFF, eCSR_ROAM_RESULT_FAILURE);
csr_roam_synch_clean_up(mac_ctx, sessionId);
csr_roaming_report_diag_event(mac_ctx, NULL,
eCSR_REASON_ROAM_HO_FAIL);
DIAG_REASON_ROAM_HO_FAIL);
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
cm_disconnect(mac_ctx->psoc, sessionId,

View File

@@ -2165,6 +2165,7 @@ static QDF_STATUS csr_parse_scan_list(struct mac_context *mac_ctx,
return QDF_STATUS_SUCCESS;
}
#ifndef FEATURE_CM_ENABLE
static void csr_get_pcl_chan_weigtage_for_sta(struct mac_context *mac_ctx,
struct pcl_freq_weight_list *pcl_lst)
{
@@ -2206,6 +2207,7 @@ static void csr_calculate_scores(struct mac_context *mac_ctx,
if (pcl_lst)
qdf_mem_free(pcl_lst);
}
#endif
QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
struct scan_filter *filter,
@@ -2234,9 +2236,10 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
sme_debug("num_entries %d", num_bss);
}
#ifndef FEATURE_CM_ENABLE
if (num_bss && filter && scoring_required)
csr_calculate_scores(mac_ctx, filter, list);
#endif
if (!list || (list && !qdf_list_size(list))) {
sme_debug("scan list empty");
if (num_bss)

View File

@@ -603,58 +603,11 @@ void csr_get_vdev_type_nss(enum QDF_OPMODE dev_mode, uint8_t *nss_2g,
#define WLAN_80211D_SUPPORT_MULTI_DOMAIN 1
#define WLAN_80211D_NOT_SUPPORT_MULTI_DOMAIN 2
/**
* diag_auth_type_from_csr_type() - to convert CSR auth type to DIAG auth type
* @authtype: CSR auth type
*
* DIAG tool understands its own ENUMs, so this API can be used to convert
* CSR defined auth type ENUMs to DIAG defined auth type ENUMs
*
*
* Return: DIAG auth type
*/
enum mgmt_auth_type diag_auth_type_from_csr_type(enum csr_akm_type authtype);
/**
* diag_enc_type_from_csr_type() - to convert CSR encr type to DIAG encr type
* @enctype: CSR encryption type
*
* DIAG tool understands its own ENUMs, so this API can be used to convert
* CSR defined encr type ENUMs to DIAG defined encr type ENUMs
*
* Return: DIAG encryption type
*/
enum mgmt_encrypt_type diag_enc_type_from_csr_type(eCsrEncryptionType enctype);
/**
* diag_dot11_mode_from_csr_type() - to convert CSR .11 mode to DIAG .11 mode
* @dot11mode: CSR 80211 mode
*
* DIAG tool understands its own ENUMs, so this API can be used to convert
* CSR defined 80211 mode ENUMs to DIAG defined 80211 mode ENUMs
*
* Return: DIAG 80211mode
*/
enum mgmt_dot11_mode
diag_dot11_mode_from_csr_type(enum csr_cfgdot11mode dot11mode);
/**
* diag_ch_width_from_csr_type() - to convert CSR ch width to DIAG ch width
* @ch_width: CSR channel width
*
* DIAG tool understands its own ENUMs, so this API can be used to convert
* CSR defined ch width ENUMs to DIAG defined ch width ENUMs
*
* Return: DIAG channel width
*/
enum mgmt_ch_width diag_ch_width_from_csr_type(enum phy_ch_width ch_width);
/**
* diag_persona_from_csr_type() - to convert QDF persona to DIAG persona
* @persona: QDF persona
*
* DIAG tool understands its own ENUMs, so this API can be used to convert
* QDF defined persona type ENUMs to DIAG defined persona type ENUMs
*
* Return: DIAG persona
*/
enum mgmt_bss_type diag_persona_from_csr_type(enum QDF_OPMODE persona);
void cm_diag_get_auth_enc_type_vdev_id(struct wlan_objmgr_psoc *psoc,
uint8_t *auth_type,
uint8_t *ucast_cipher,
uint8_t *mcast_cipher,
uint8_t vdev_id);
#endif /* #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR */
/*
* csr_scan_result_purge() -
@@ -1127,6 +1080,7 @@ csr_scan_get_channel_for_hw_mode_change(
QDF_STATUS csr_setup_vdev_session(struct vdev_mlme_obj *vdev_mlme);
#ifdef WLAN_UNIT_TEST
#ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
/**
* csr_cm_get_sta_cxn_info() - This function populates all the connection
@@ -1142,4 +1096,6 @@ void csr_cm_get_sta_cxn_info(struct mac_context *mac_ctx, uint8_t vdev_id,
char *buf, uint32_t buf_sz);
#endif
#endif
#endif /* CSR_INSIDE_API_H__ */