qcacld-3.0: Introduce support for STA info logging

Add support for STA info logging via api
wlan_connectivity_sta_info_event()

STA info logs is sent immediately after the
connect request initiated from userspace.

Change-Id: I92c42c9ca27f90acae23452e8fba1f2b20396214
CRs-Fixed: 3597543
このコミットが含まれているのは:
Vijay Raj
2023-08-24 05:09:47 -07:00
committed by Rahul Choudhary
コミット 8255bcee81
3個のファイルの変更117行の追加0行の削除

ファイルの表示

@@ -1187,6 +1187,15 @@ wlan_connectivity_mgmt_event(struct wlan_objmgr_psoc *psoc,
static inline void wlan_connectivity_logging_stop(void) static inline void wlan_connectivity_logging_stop(void)
{} {}
/**
* wlan_connectivity_sta_info_event() - APi to send STA info event
* @psoc: Pointer to global psoc object
* @vdev_id: Vdev id
*/
void
wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
#elif defined(WLAN_FEATURE_CONNECTIVITY_LOGGING) #elif defined(WLAN_FEATURE_CONNECTIVITY_LOGGING)
/** /**
* wlan_connectivity_logging_start() - Initialize the connectivity/roaming * wlan_connectivity_logging_start() - Initialize the connectivity/roaming
@@ -1255,6 +1264,15 @@ wlan_connectivity_mgmt_event(struct wlan_objmgr_psoc *psoc,
uint8_t auth_algo, uint8_t auth_type, uint8_t auth_algo, uint8_t auth_type,
uint8_t auth_seq, uint16_t aid, uint8_t auth_seq, uint16_t aid,
enum wlan_main_tag tag); enum wlan_main_tag tag);
/**
* wlan_connectivity_sta_info_event() - APi to send STA info event
* @psoc: Pointer to global psoc object
* @vdev_id: Vdev id
*/
void
wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
#else #else
static inline static inline
void wlan_connectivity_logging_start(struct wlan_objmgr_psoc *psoc, void wlan_connectivity_logging_start(struct wlan_objmgr_psoc *psoc,
@@ -1286,5 +1304,10 @@ wlan_connectivity_mgmt_event(struct wlan_objmgr_psoc *psoc,
uint8_t auth_seq, uint16_t aid, uint8_t auth_seq, uint16_t aid,
enum wlan_main_tag tag) enum wlan_main_tag tag)
{} {}
static inline void
wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
}
#endif #endif
#endif /* _WLAN_CONNECTIVITY_LOGGING_H_ */ #endif /* _WLAN_CONNECTIVITY_LOGGING_H_ */

ファイルの表示

@@ -23,6 +23,7 @@
#include "wlan_connectivity_logging.h" #include "wlan_connectivity_logging.h"
#include "wlan_cm_api.h" #include "wlan_cm_api.h"
#include "wlan_mlme_main.h" #include "wlan_mlme_main.h"
#include "wlan_mlo_mgr_sta.h"
#ifdef WLAN_FEATURE_CONNECTIVITY_LOGGING #ifdef WLAN_FEATURE_CONNECTIVITY_LOGGING
static struct wlan_connectivity_log_buf_data global_cl; static struct wlan_connectivity_log_buf_data global_cl;
@@ -299,6 +300,95 @@ wlan_cache_connectivity_log(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
#define WLAN_SAE_AUTH_ALGO_NUMBER 3 #define WLAN_SAE_AUTH_ALGO_NUMBER 3
#ifdef CONNECTIVITY_DIAG_EVENT #ifdef CONNECTIVITY_DIAG_EVENT
#ifdef WLAN_FEATURE_11BE_MLO
static QDF_STATUS
wlan_populate_link_addr(struct wlan_objmgr_vdev *vdev,
struct wlan_diag_sta_info *wlan_diag_event)
{
uint i = 0;
struct mlo_link_switch_context *link_ctx = vdev->mlo_dev_ctx->link_ctx;
struct wlan_channel *link_chan_info;
if (!link_ctx)
return QDF_STATUS_E_FAILURE;
for (i = 0; i < WLAN_MAX_ML_BSS_LINKS; i++) {
link_chan_info = link_ctx->links_info[i].link_chan_info;
if (wlan_reg_is_24ghz_ch_freq(
(qdf_freq_t)link_chan_info->ch_freq)) {
qdf_mem_copy(wlan_diag_event->mac_2g,
link_ctx->links_info[i].link_addr.bytes,
QDF_MAC_ADDR_SIZE);
} else if (wlan_reg_is_5ghz_ch_freq(
(qdf_freq_t)link_chan_info->ch_freq)) {
qdf_mem_copy(wlan_diag_event->mac_5g,
link_ctx->links_info[i].link_addr.bytes,
QDF_MAC_ADDR_SIZE);
} else if (wlan_reg_is_6ghz_chan_freq(
link_chan_info->ch_freq)) {
qdf_mem_copy(wlan_diag_event->mac_6g,
link_ctx->links_info[i].link_addr.bytes,
QDF_MAC_ADDR_SIZE);
}
}
return QDF_STATUS_SUCCESS;
}
#else
static QDF_STATUS
wlan_populate_link_addr(struct wlan_objmgr_vdev *vdev,
struct wlan_diag_sta_info *wlan_diag_event)
{
return QDF_STATUS_SUCCESS;
}
#endif
void
wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
{
QDF_STATUS status;
struct wlan_objmgr_vdev *vdev = NULL;
WLAN_HOST_DIAG_EVENT_DEF(wlan_diag_event, struct wlan_diag_sta_info);
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_OBJMGR_ID);
if (!vdev) {
logging_err_rl("Invalid vdev:%d", vdev_id);
return;
}
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE)
goto out;
wlan_diag_event.diag_cmn.timestamp_us = qdf_get_time_of_the_day_us();
wlan_diag_event.diag_cmn.ktime_us = qdf_ktime_to_us(qdf_ktime_get());
wlan_diag_event.diag_cmn.vdev_id = vdev_id;
wlan_diag_event.is_mlo = mlo_is_mld_sta(vdev);
if (wlan_diag_event.is_mlo) {
qdf_mem_copy(wlan_diag_event.diag_cmn.bssid,
wlan_vdev_mlme_get_mldaddr(vdev),
QDF_MAC_ADDR_SIZE);
status = wlan_populate_link_addr(vdev, &wlan_diag_event);
if (QDF_IS_STATUS_ERROR(status)) {
logging_err_rl("wlan_populate_link_addr failed");
goto out;
}
} else {
qdf_mem_copy(wlan_diag_event.diag_cmn.bssid,
wlan_vdev_mlme_get_macaddr(vdev),
QDF_MAC_ADDR_SIZE);
}
WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event, EVENT_WLAN_STA_INFO);
out:
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
}
void void
wlan_connectivity_mgmt_event(struct wlan_objmgr_psoc *psoc, wlan_connectivity_mgmt_event(struct wlan_objmgr_psoc *psoc,
struct wlan_frame_hdr *mac_hdr, struct wlan_frame_hdr *mac_hdr,

ファイルの表示

@@ -326,6 +326,8 @@ lim_process_probe_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_Packet_info
if (session_entry->limMlmState == if (session_entry->limMlmState ==
eLIM_MLM_WT_JOIN_BEACON_STATE) { eLIM_MLM_WT_JOIN_BEACON_STATE) {
uint8_t vdev_id = wlan_vdev_get_id(session_entry->vdev);
/* /*
* Either Beacon/probe response is required. * Either Beacon/probe response is required.
* Hence store it in same buffer. * Hence store it in same buffer.
@@ -355,6 +357,8 @@ lim_process_probe_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_Packet_info
lim_check_and_announce_join_success(mac_ctx, probe_rsp, lim_check_and_announce_join_success(mac_ctx, probe_rsp,
header, header,
session_entry); session_entry);
wlan_connectivity_sta_info_event(mac_ctx->psoc, vdev_id);
} else if (session_entry->limMlmState == } else if (session_entry->limMlmState ==
eLIM_MLM_LINK_ESTABLISHED_STATE) { eLIM_MLM_LINK_ESTABLISHED_STATE) {
/* /*