qcacld-3.0: Log SAE authentication frames as part of roam logs

SAE authentication logging events are sent from host
driver during connection as well as during roaming.
But the other roaming frame related stats are printed
as part of the WMI_ROAM_STATS_EVENTID handling.
Since this roam stats event is received after preauth
frame related logs are queued to userspace, the order
of the logs are not correct.

Cache the SAE preauth logs in mlme and print them
upon receiving ROAM stats event. Read the firmware
service capability to decide if new caching needs
to be used or legacy behavior needs to be followed

Change-Id: I76381b9deef222f1481325974e2b5d9730eb2b67
CRs-Fixed: 3154147
This commit is contained in:
Pragaspathi Thilagaraj
2022-04-12 17:29:22 +05:30
committed by Madan Koyyalamudi
parent bdb2216a0f
commit 2bbd4b2892
7 changed files with 353 additions and 13 deletions

View File

@@ -1993,7 +1993,13 @@ wmi_get_converted_tx_status(
return QDF_TX_RX_STATUS_INVALID;
}
#define WLAN_FC0_SUBTYPE_SHIFT 4
#define WLAN_FC0_SUBTYPE_SHIFT 4
#define WLAN_FRAME_INFO_TYPE_OFFSET 0
#define WLAN_FRAME_INFO_SUBTYPE_OFFSET 2
#define WLAN_FRAME_INFO_RESP_OFFSET 6
#define WLAN_FRAME_INFO_AUTH_ALG_OFFSET 7
#define WLAN_FRAME_INFO_SEQ_NUM_OFFSET 16
/**
* extract_roam_frame_info_tlv() - Extract the frame exchanges during roaming
* info from the WMI_ROAM_STATS_EVENTID
@@ -2032,9 +2038,13 @@ extract_roam_frame_info_tlv(wmi_unified_t wmi_handle, void *evt_buf,
dst_buf = dst->frame_info;
for (i = 0; i < num_frames; i++) {
dst_buf->timestamp = src_data->timestamp;
dst_buf->type = WMI_GET_BITS(src_data->frame_info, 0, 2);
WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_data->bssid,
dst_buf->bssid.bytes);
dst_buf->type = WMI_GET_BITS(src_data->frame_info,
WLAN_FRAME_INFO_TYPE_OFFSET, 2);
subtype = WMI_GET_BITS(src_data->frame_info, 2, 4);
subtype = WMI_GET_BITS(src_data->frame_info,
WLAN_FRAME_INFO_SUBTYPE_OFFSET, 4);
if (dst_buf->type == WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT) {
dst_buf->type = ROAM_FRAME_INFO_FRAME_TYPE_EXT;
dst_buf->subtype =
@@ -2043,12 +2053,23 @@ extract_roam_frame_info_tlv(wmi_unified_t wmi_handle, void *evt_buf,
dst_buf->subtype = subtype << WLAN_FC0_SUBTYPE_SHIFT;
}
dst_buf->is_rsp = WMI_GET_BITS(src_data->frame_info, 6, 1);
dst_buf->is_rsp = WMI_GET_BITS(src_data->frame_info,
WLAN_FRAME_INFO_RESP_OFFSET, 1);
dst_buf->is_rsp &=
(dst_buf->type != WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT &&
dst_buf->subtype == MGMT_SUBTYPE_AUTH);
dst_buf->seq_num = WMI_GET_BITS(src_data->frame_info, 7, 16);
dst_buf->seq_num = WMI_GET_BITS(src_data->frame_info,
WLAN_FRAME_INFO_SEQ_NUM_OFFSET,
16);
dst_buf->status_code = src_data->status_code;
if (dst_buf->type != WMI_ROAM_FRAME_INFO_FRAME_TYPE_EXT &&
dst_buf->subtype == MGMT_SUBTYPE_AUTH)
dst_buf->auth_algo =
WMI_GET_BITS(src_data->frame_info,
WLAN_FRAME_INFO_AUTH_ALG_OFFSET,
4);
if (!dst_buf->is_rsp)
dst_buf->tx_status = wmi_get_converted_tx_status(
src_data->status_code);