Browse Source

qcacld-3.0: Fix missing attributes in connectivity logging events

Fix few missing attribute in below connectivity events:
QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_RESPONSE
QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCORE_CURR_AP

Also send the roam candidate info properly to userspace.

Change-Id: Ia9c4f095316adf8f40294f1e119cad648749bb72
CRs-Fixed: 3037650
Pragaspathi Thilagaraj 3 years ago
parent
commit
7e90b8b5f5

+ 11 - 9
Kbuild

@@ -1497,15 +1497,6 @@ MLME_OBJS +=    $(CM_DIR)/dispatcher/src/wlan_cm_tgt_if_tx_api.o \
 		$(CM_DIR)/core/src/wlan_cm_vdev_connect.o \
 		$(CM_DIR)/core/src/wlan_cm_vdev_disconnect.o
 
-LOGGING_DIR := components/cmn_services/logging
-LOGGING_INC := -I$(WLAN_ROOT)/$(LOGGING_DIR)/inc
-
-MLME_INC += $(LOGGING_INC)
-
-ifeq ($(CONFIG_QCACLD_WLAN_CONNECTIVITY_LOGGING), y)
-MLME_OBJS += $(LOGGING_DIR)/src/wlan_connectivity_logging.o
-endif
-
 ifeq ($(CONFIG_CM_UTF_ENABLE), y)
 MLME_OBJS +=    $(CM_DIR)/utf/src/cm_utf.o
 endif
@@ -1551,6 +1542,16 @@ endif
 
 $(call add-wlan-objs,blm,$(BLM_OBJS))
 
+######### CONNECTIVITY_LOGGING #########
+CONN_LOGGING_DIR := components/cmn_services/logging
+CONN_LOGGING_INC := -I$(WLAN_ROOT)/$(CONN_LOGGING_DIR)/inc
+
+ifeq ($(CONFIG_QCACLD_WLAN_CONNECTIVITY_LOGGING), y)
+CONN_LOGGING_OBJS := $(CONN_LOGGING_DIR)/src/wlan_connectivity_logging.o
+endif
+
+$(call add-wlan-objs,conn_logging,$(CONN_LOGGING_OBJS))
+
 ########## ACTION OUI ##########
 
 ACTION_OUI_DIR := components/action_oui
@@ -2808,6 +2809,7 @@ INCS +=		$(UMAC_MLME_INC)
 INCS +=		$(MLME_INC)
 INCS +=		$(FWOL_INC)
 INCS +=		$(BLM_INC)
+INCS +=		$(CONN_LOGGING_INC)
 
 ifeq ($(CONFIG_REMOVE_PKT_LOG), n)
 INCS +=		$(PKTLOG_INC)

+ 69 - 48
components/cmn_services/logging/inc/wlan_connectivity_logging.h

@@ -23,9 +23,6 @@
 #ifndef _WLAN_CONNECTIVITY_LOGGING_H_
 #define _WLAN_CONNECTIVITY_LOGGING_H_
 
-#include "wlan_policy_mgr_api.h"
-#include <wmi_unified_priv.h>
-#include "wlan_crypto_global_api.h"
 #include <wlan_cm_api.h>
 #include "wlan_cm_roam_api.h"
 #include "wlan_logging_sock_svc.h"
@@ -122,10 +119,10 @@ enum wlan_main_tag {
  * @cand_bssid: BSSID of the candidate AP
  * @is_current_ap: Is the entry candidate AP or connected AP
  * @idx: Entry index
- * @cu_load: Channel utilization load of the AP
- * @freq: Candidate AP channel frequency
+ * @cu_load: Channel utilization load of the AP in percentage
+ * @freq: Candidate AP channel frequency in MHz
  * @total_score: Total candidate AP score
- * @rssi: Candidate AP RSSI
+ * @rssi: Candidate AP RSSI in dBm
  * @etp: Estimated throughput value of the AP in Kbps
  */
 struct wlan_roam_candidate_info {
@@ -133,7 +130,7 @@ struct wlan_roam_candidate_info {
 	bool is_current_ap;
 	uint8_t idx;
 	uint8_t cu_load;
-	uint16_t freq;
+	qdf_freq_t freq;
 	uint16_t total_score;
 	int32_t rssi;
 	uint32_t etp;
@@ -143,22 +140,23 @@ struct wlan_roam_candidate_info {
  * struct wlan_roam_scan_info  - Roam scan related information
  * @cand_ap_count: Roam candidate AP count
  * @num_scanned_frequencies: Number of scanned frequencies
- * @scan_freq: Scanned frequencies
+ * @scan_freq: Array of scanned frequencies value in MHz
  */
 struct wlan_roam_scan_info {
 	uint8_t cand_ap_count;
 	uint16_t num_scanned_freq;
-	uint16_t scan_freq[WLAN_MAX_LOGGING_FREQ];
+	qdf_freq_t scan_freq[WLAN_MAX_LOGGING_FREQ];
 };
 
 /**
  * struct wlan_roam_result_info  - Roam result data
- * @roam_fail_reason: Roam failure reason code
- * @roam_status: Roam success or failure
+ * @roam_fail_reason: Roam failure reason code defined in enum
+ * wlan_roam_failure_reason_code
+ * @is_roam_successful: True if roamed successfully or false if roaming failed
  */
 struct wlan_roam_result_info {
-	uint8_t roam_fail_reason;
-	uint8_t roam_status;
+	enum wlan_roam_failure_reason_code roam_fail_reason;
+	bool is_roam_successful;
 };
 
 /**
@@ -166,16 +164,17 @@ struct wlan_roam_result_info {
  * related data.
  * @is_full_scan: True if the scan is Full scan. False if the roam scan is
  * partial channel map scan
- * @trigger_reason: Roam trigger reason
- * @trigger_sub_reason: Roam trigger sub reason defined by enum
+ * @trigger_reason: Roam trigger reason defined by enum roam_trigger_reason
+ * @trigger_sub_reason: Roam scan trigger sub reason indicating if
+ * periodic/inactivity scan timer initiated roam. Defined by enum
  * roam_trigger_sub_reason
  * @cu_load:  Current connected channel load in percentage
- * @current_rssi: Connected AP RSSI
- * @rssi_threshold: Roam scan trigger threshold
+ * @current_rssi: Connected AP RSSI in dBm
+ * @rssi_threshold: Roam scan trigger threshold in dBm
  */
 struct wlan_roam_trigger_info {
 	bool is_full_scan;
-	uint8_t trigger_reason;
+	enum roam_trigger_reason trigger_reason;
 	enum roam_trigger_sub_reason trigger_sub_reason;
 	uint8_t cu_load;
 	int32_t current_rssi;
@@ -194,9 +193,10 @@ struct wlan_btm_cand_info {
 
 /**
  * struct wlan_roam_btm_info - BTM frame related logging data
- * @reason: Query Reason field
+ * @reason: Query Reason field. Contains one of the values defined in IEEE
+ * Std 802.11‐2020 Table 9-198—Transition and Transition Query reasons
  * @mode: BTM Request Mode field
- * @sub_reason: WTC sub reason
+ * @sub_reason: WTC sub reason code field in the BTM WTC vendor specific IE
  * @candidate_list_count: Candidates list in the BTM frame
  * @btm_status_code: BSS Transition management status codes defined in
  * 802.11‐2020 Table 9-428—BTM status code definitions
@@ -205,9 +205,10 @@ struct wlan_btm_cand_info {
  * @token: dialog token. Dialog Token is a nonzero value chosen by the STA
  * while sending the BTM frame to identify the query/request/response
  * transaction
- * @validity_timer: Validity interval
- * @disassoc_timer: Disassoc timer
- * @wtc_duration: WTC duration field
+ * @validity_timer: Validity interval in TBTT
+ * @disassoc_timer: Time after which the AP disassociates the STA, defined
+ * in TBTT.
+ * @wtc_duration: WTC duration field in minutes
  * @target_bssid: BTM response target bssid field
  */
 struct wlan_roam_btm_info {
@@ -227,21 +228,27 @@ struct wlan_roam_btm_info {
 
 /**
  * struct wlan_packet_info  - Data packets related info
- * @tx_status: Packet TX status
- * @eap_type: EAP type
+ * @tx_status: Frame TX status defined by enum qdf_dp_tx_rx_status
+ * @eap_type: EAP type. Values defined by IANA at:
+ * https://www.iana.org/assignments/eap-numbers
  * @eap_len: EAP data length
- * @auth_algo: Authentication algorithm
+ * @auth_algo: authentication algorithm number defined in IEEE Std 802.11‐2020
+ * Section 9.4.1.1 Authentication Algorithm Number field.
  * @auth_seq_num: Authentication frame transaction sequence number
- * @auth_type: Authentication frame sub-type for SAE authentication
- * @frame_status_code: Frame status code/reason code
+ * @auth_type: Authentication frame sub-type for SAE authentication. Possible
+ * values:
+ * 1 - SAE commit frame
+ * 2 - SAE confirm frame
+ * @frame_status_code: Frame status code as defined in IEEE Std
+ * 802.11‐2020 Table 9-50—Status codes.
  * @seq_num: Frame sequence number
- * @rssi: Peer rssi
+ * @rssi: Peer RSSI in dBm
  * @is_retry_frame: is frame retried
  */
 struct wlan_packet_info {
 	uint8_t tx_status;
 	uint8_t eap_type;
-	uint8_t eap_len;
+	uint16_t eap_len;
 	uint8_t auth_algo;
 	uint8_t auth_seq_num;
 	uint8_t auth_type;
@@ -256,13 +263,18 @@ struct wlan_packet_info {
  * @ssid: SSID
  * @ssid_len: Length of the SSID
  * @bssid_hint: BSSID hint provided in the connect request
- * @freq: Frequency
- * @freq_hint: Frequency Hint
- * @akm: Akm suite
- * @pairwise: Pairwise suite
- * @group: Group cipher suite
- * @group_mgmt: Group manangement cipher suite
- * @auth_type: Authentication Algo
+ * @freq: Frequency in MHz
+ * @freq_hint: Frequency Hint in MHz
+ * @akm: Auth key management suite defined in IEEE Std 802.11‐2020
+ * Table 9-151—AKM suite selectors.
+ * @pairwise: Pairwise suite value as defined in IEEE 802.11 2020
+ * Table 12-10—Integrity and key wrap algorithms.
+ * @group: Group cipher suite value as defined in
+ * Table 12-10—Integrity and key wrap algorithms.
+ * @group_mgmt: Group manangement cipher suite as defined in
+ * Table 12-10—Integrity and key wrap algorithms.
+ * @auth_type: Authentication algorithm number field as defined in
+ * IEEE 802.11 - 2020 standard section 9.4.1.1
  * @conn_status: Connection failure status defined by enum
  * wlan_cm_connect_fail_reason
  * @is_bt_coex_active: Is there active bluetooth connection
@@ -271,8 +283,8 @@ struct wlan_connect_info {
 	char ssid[WLAN_SSID_MAX_LEN];
 	uint8_t ssid_len;
 	struct qdf_mac_addr bssid_hint;
-	uint32_t freq;
-	uint32_t freq_hint;
+	qdf_freq_t freq;
+	qdf_freq_t freq_hint;
 	uint32_t akm;
 	uint32_t pairwise;
 	uint32_t group;
@@ -325,19 +337,23 @@ struct wlan_log_record {
 };
 
 /**
- * struct wlan_cl_hdd_cbks  - HDD callbacks to be invoked for connectivity
+ * struct wlan_cl_osif_cbks  - OSIF callbacks to be invoked for connectivity
  * logging
  * @wlan_connectivity_log_send_to_usr: Send the log buffer to user space
  */
-struct wlan_cl_hdd_cbks {
-	QDF_STATUS (*wlan_connectivity_log_send_to_usr)
-			(struct wlan_log_record *rec, uint8_t num_records);
+struct wlan_cl_osif_cbks {
+	QDF_STATUS
+	(*wlan_connectivity_log_send_to_usr) (struct wlan_log_record *rec,
+					      void *context,
+					      uint8_t num_records);
 };
 
 /**
  * struct wlan_connectivity_log_buf_data  - Master structure to hold the
  * pointers to the ring buffers.
- * @hdd_cbks: Hdd callbacks
+ * @osif_cbks: OSIF callbacks
+ * @osif_cb_context: Pointer to the context to be passed to OSIF
+ * callback
  * @first_record_timestamp_in_last_sec: First record timestamp
  * @sent_msgs_count: Total sent messages counter in the last 1 sec
  * @head: Pointer to the 1st record allocated in the ring buffer.
@@ -351,7 +367,8 @@ struct wlan_cl_hdd_cbks {
  * @is_active: If the global buffer is initialized or not
  */
 struct wlan_connectivity_log_buf_data {
-	struct wlan_cl_hdd_cbks hdd_cbks;
+	struct wlan_cl_osif_cbks osif_cbks;
+	void *osif_cb_context;
 	uint64_t first_record_timestamp_in_last_sec;
 	uint64_t sent_msgs_count;
 	struct wlan_log_record *head;
@@ -380,11 +397,13 @@ struct wlan_connectivity_log_buf_data {
 /**
  * wlan_connectivity_logging_start()  - Initialize the connectivity/roaming
  * logging buffer
- * @hdd_cbks: Hdd callbacks
+ * @osif_cbks: OSIF callbacks
+ * @osif_cbk_context: OSIF callback context argument
  *
  * Return: None
  */
-void wlan_connectivity_logging_start(struct wlan_cl_hdd_cbks *hdd_cbks);
+void wlan_connectivity_logging_start(struct wlan_cl_osif_cbks *osif_cbks,
+				     void *osif_cb_context);
 
 /**
  * wlan_connectivity_logging_stop() - Deinitialize the connectivity logging
@@ -438,7 +457,9 @@ wlan_connectivity_mgmt_event(struct wlan_frame_hdr *mac_hdr,
 			     uint8_t auth_seq,
 			     enum wlan_main_tag tag);
 #else
-static inline void wlan_connectivity_logging_start(void)
+static inline
+void wlan_connectivity_logging_start(struct wlan_cl_osif_cbks *osif_cbks,
+				     void *osif_cb_context)
 {}
 
 static inline void wlan_connectivity_logging_stop(void)

+ 37 - 14
components/cmn_services/logging/src/wlan_connectivity_logging.c

@@ -27,16 +27,20 @@
 static struct wlan_connectivity_log_buf_data global_cl;
 
 static void
-wlan_connectivity_logging_register_callbacks(struct wlan_cl_hdd_cbks *hdd_cbks)
+wlan_connectivity_logging_register_callbacks(
+				struct wlan_cl_osif_cbks *osif_cbks,
+				void *osif_cb_context)
 {
-	global_cl.hdd_cbks.wlan_connectivity_log_send_to_usr =
-			hdd_cbks->wlan_connectivity_log_send_to_usr;
+	global_cl.osif_cbks.wlan_connectivity_log_send_to_usr =
+			osif_cbks->wlan_connectivity_log_send_to_usr;
+	global_cl.osif_cb_context = osif_cb_context;
 }
 
-void wlan_connectivity_logging_start(struct wlan_cl_hdd_cbks *hdd_cbks)
+void wlan_connectivity_logging_start(struct wlan_cl_osif_cbks *osif_cbks,
+				     void *osif_cb_context)
 {
-	global_cl.head = vzalloc(sizeof(*global_cl.head) *
-					 WLAN_MAX_LOG_RECORDS);
+	global_cl.head = qdf_mem_valloc(sizeof(*global_cl.head) *
+					WLAN_MAX_LOG_RECORDS);
 	if (!global_cl.head) {
 		QDF_BUG(0);
 		return;
@@ -52,7 +56,8 @@ void wlan_connectivity_logging_start(struct wlan_cl_hdd_cbks *hdd_cbks)
 	global_cl.write_ptr = global_cl.head;
 	global_cl.max_records = WLAN_MAX_LOG_RECORDS;
 
-	wlan_connectivity_logging_register_callbacks(hdd_cbks);
+	wlan_connectivity_logging_register_callbacks(osif_cbks,
+						     osif_cb_context);
 	qdf_atomic_set(&global_cl.is_active, 1);
 }
 
@@ -61,6 +66,9 @@ void wlan_connectivity_logging_stop(void)
 	if (!qdf_atomic_read(&global_cl.is_active))
 		return;
 
+	global_cl.osif_cb_context = NULL;
+	global_cl.osif_cbks.wlan_connectivity_log_send_to_usr = NULL;
+
 	qdf_atomic_set(&global_cl.is_active, 0);
 	global_cl.read_ptr = NULL;
 	global_cl.write_ptr = NULL;
@@ -68,7 +76,7 @@ void wlan_connectivity_logging_stop(void)
 	global_cl.read_idx = 0;
 	global_cl.write_idx = 0;
 
-	vfree(global_cl.head);
+	qdf_mem_vfree(global_cl.head);
 	global_cl.head = NULL;
 }
 
@@ -143,7 +151,7 @@ wlan_connectivity_log_enqueue(struct wlan_log_record *new_record)
 	}
 
 	/*
-	 * This API writes to the logging buffer if the buffer is empty.
+	 * This API writes to the logging buffer if the buffer is not full.
 	 * 1. Acquire the write spinlock.
 	 * 2. Copy the record to the write block.
 	 * 3. Update the write pointer
@@ -152,14 +160,14 @@ wlan_connectivity_log_enqueue(struct wlan_log_record *new_record)
 	qdf_spin_lock_bh(&global_cl.write_ptr_lock);
 
 	write_block = global_cl.write_ptr;
-	/* If the buffer is not empty, increment the dropped msgs counter and
+	/* If the buffer is full, increment the dropped msgs counter and
 	 * return
 	 */
 	if (global_cl.read_ptr == global_cl.write_ptr &&
 	    write_block->is_record_filled) {
 		qdf_spin_unlock_bh(&global_cl.write_ptr_lock);
 		qdf_atomic_inc(&global_cl.dropped_msgs);
-		logging_debug("vdev:%d dropping msg sub-type:%d total drpd:%d",
+		logging_debug("vdev:%d dropping msg sub-type:%d total dropped:%d",
 			      new_record->vdev_id, new_record->log_subtype,
 			      qdf_atomic_read(&global_cl.dropped_msgs));
 		wlan_logging_set_connectivity_log();
@@ -187,6 +195,8 @@ QDF_STATUS
 wlan_connectivity_log_dequeue(void)
 {
 	struct wlan_log_record *data;
+	struct wlan_cl_osif_cbks *osif_cbk;
+	void *osif_cb_context;
 	uint8_t idx = 0;
 	uint64_t current_timestamp, time_delta;
 
@@ -221,6 +231,12 @@ wlan_connectivity_log_dequeue(void)
 		global_cl.sent_msgs_count %= WLAN_RECORDS_PER_SEC;
 		data[idx] = *global_cl.read_ptr;
 
+		/*
+		 * Reset the read block after copy. This will set the
+		 * is_record_filled to false.
+		 */
+		qdf_mem_zero(global_cl.read_ptr, sizeof(*global_cl.read_ptr));
+
 		global_cl.read_idx++;
 		global_cl.read_idx %= global_cl.max_records;
 
@@ -229,12 +245,19 @@ wlan_connectivity_log_dequeue(void)
 
 		global_cl.sent_msgs_count++;
 		idx++;
-		if (idx >= MAX_RECORD_IN_SINGLE_EVT)
+
+		if (idx >= MAX_RECORD_IN_SINGLE_EVT) {
+			wlan_logging_set_connectivity_log();
 			break;
+		}
 	}
 
-	if (global_cl.hdd_cbks.wlan_connectivity_log_send_to_usr)
-		global_cl.hdd_cbks.wlan_connectivity_log_send_to_usr(data, idx);
+	osif_cbk = &global_cl.osif_cbks;
+	osif_cb_context = global_cl.osif_cb_context;
+	if (osif_cbk->wlan_connectivity_log_send_to_usr)
+		osif_cbk->wlan_connectivity_log_send_to_usr(data,
+							   osif_cb_context,
+							   idx);
 
 	qdf_mem_free(data);
 

+ 33 - 33
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -4142,72 +4142,72 @@ void wlan_mlme_clear_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
 }
 #endif
 
-char *mlme_get_roam_fail_reason_str(uint32_t result)
+char *mlme_get_roam_fail_reason_str(enum wlan_roam_failure_reason_code result)
 {
 	switch (result) {
-	case WMI_ROAM_FAIL_REASON_NO_SCAN_START:
+	case ROAM_FAIL_REASON_NO_SCAN_START:
 		return "SCAN NOT STARTED";
-	case WMI_ROAM_FAIL_REASON_NO_AP_FOUND:
+	case ROAM_FAIL_REASON_NO_AP_FOUND:
 		return "NO AP FOUND";
-	case WMI_ROAM_FAIL_REASON_NO_CAND_AP_FOUND:
+	case ROAM_FAIL_REASON_NO_CAND_AP_FOUND:
 		return "NO CANDIDATE FOUND";
-	case WMI_ROAM_FAIL_REASON_HOST:
+	case ROAM_FAIL_REASON_HOST:
 		return "HOST ABORTED";
-	case WMI_ROAM_FAIL_REASON_AUTH_SEND:
+	case ROAM_FAIL_REASON_AUTH_SEND:
 		return "Send AUTH Failed";
-	case WMI_ROAM_FAIL_REASON_AUTH_RECV:
+	case ROAM_FAIL_REASON_AUTH_RECV:
 		return "Received AUTH with FAILURE Status";
-	case WMI_ROAM_FAIL_REASON_NO_AUTH_RESP:
+	case ROAM_FAIL_REASON_NO_AUTH_RESP:
 		return "No Auth response from AP";
-	case WMI_ROAM_FAIL_REASON_REASSOC_SEND:
+	case ROAM_FAIL_REASON_REASSOC_SEND:
 		return "Send Re-assoc request failed";
-	case WMI_ROAM_FAIL_REASON_REASSOC_RECV:
+	case ROAM_FAIL_REASON_REASSOC_RECV:
 		return "Received Re-Assoc resp with Failure status";
-	case WMI_ROAM_FAIL_REASON_NO_REASSOC_RESP:
+	case ROAM_FAIL_REASON_NO_REASSOC_RESP:
 		return "No Re-assoc response from AP";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M1_TIMEOUT:
+	case ROAM_FAIL_REASON_EAPOL_TIMEOUT:
 		return "EAPOL M1 timed out";
-	case WMI_ROAM_FAIL_REASON_MLME:
+	case ROAM_FAIL_REASON_MLME:
 		return "MLME error";
-	case WMI_ROAM_FAIL_REASON_INTERNAL_ABORT:
+	case ROAM_FAIL_REASON_INTERNAL_ABORT:
 		return "Fw aborted roam";
-	case WMI_ROAM_FAIL_REASON_SCAN_START:
+	case ROAM_FAIL_REASON_SCAN_START:
 		return "Unable to start roam scan";
-	case WMI_ROAM_FAIL_REASON_AUTH_NO_ACK:
+	case ROAM_FAIL_REASON_AUTH_NO_ACK:
 		return "No ACK for Auth req";
-	case WMI_ROAM_FAIL_REASON_AUTH_INTERNAL_DROP:
+	case ROAM_FAIL_REASON_AUTH_INTERNAL_DROP:
 		return "Auth req dropped internally";
-	case WMI_ROAM_FAIL_REASON_REASSOC_NO_ACK:
+	case ROAM_FAIL_REASON_REASSOC_NO_ACK:
 		return "No ACK for Re-assoc req";
-	case WMI_ROAM_FAIL_REASON_REASSOC_INTERNAL_DROP:
+	case ROAM_FAIL_REASON_REASSOC_INTERNAL_DROP:
 		return "Re-assoc dropped internally";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M2_SEND:
+	case ROAM_FAIL_REASON_EAPOL_M2_SEND:
 		return "Unable to send M2 frame";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M2_INTERNAL_DROP:
+	case ROAM_FAIL_REASON_EAPOL_M2_INTERNAL_DROP:
 		return "M2 Frame dropped internally";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M2_NO_ACK:
+	case ROAM_FAIL_REASON_EAPOL_M2_NO_ACK:
 		return "No ACK for M2 frame";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M3_TIMEOUT:
+	case ROAM_FAIL_REASON_EAPOL_M3_TIMEOUT:
 		return "EAPOL M3 timed out";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M4_SEND:
+	case ROAM_FAIL_REASON_EAPOL_M4_SEND:
 		return "Unable to send M4 frame";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M4_INTERNAL_DROP:
+	case ROAM_FAIL_REASON_EAPOL_M4_INTERNAL_DROP:
 		return "M4 frame dropped internally";
-	case WMI_ROAM_FAIL_REASON_EAPOL_M4_NO_ACK:
+	case ROAM_FAIL_REASON_EAPOL_M4_NO_ACK:
 		return "No ACK for M4 frame";
-	case WMI_ROAM_FAIL_REASON_NO_SCAN_FOR_FINAL_BMISS:
+	case ROAM_FAIL_REASON_NO_SCAN_FOR_FINAL_BMISS:
 		return "No scan on final BMISS";
-	case WMI_ROAM_FAIL_REASON_DISCONNECT:
+	case ROAM_FAIL_REASON_DISCONNECT:
 		return "Disconnect received during handoff";
-	case WMI_ROAM_FAIL_REASON_SYNC:
+	case ROAM_FAIL_REASON_SYNC:
 		return "Previous roam sync pending";
-	case WMI_ROAM_FAIL_REASON_SAE_INVALID_PMKID:
+	case ROAM_FAIL_REASON_SAE_INVALID_PMKID:
 		return "Reason assoc reject - invalid PMKID";
-	case WMI_ROAM_FAIL_REASON_SAE_PREAUTH_TIMEOUT:
+	case ROAM_FAIL_REASON_SAE_PREAUTH_TIMEOUT:
 		return "SAE preauth timed out";
-	case WMI_ROAM_FAIL_REASON_SAE_PREAUTH_FAIL:
+	case ROAM_FAIL_REASON_SAE_PREAUTH_FAIL:
 		return "SAE preauth failed";
-	case WMI_ROAM_FAIL_REASON_UNABLE_TO_START_ROAM_HO:
+	case ROAM_FAIL_REASON_UNABLE_TO_START_ROAM_HO:
 		return "Start handoff failed- internal error";
 	default:
 		return "UNKNOWN";

+ 29 - 25
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -4759,18 +4759,19 @@ void cm_roam_scan_info_event(struct wmi_roam_scan_data *scan, uint8_t vdev_id)
 		return;
 
 	log_record->vdev_id = vdev_id;
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
-	log_record->fw_timestamp_us = scan->ap->timestamp;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
+	log_record->fw_timestamp_us = scan->ap->timestamp * 1000;
 	log_record->log_subtype = WLAN_ROAM_SCAN_DONE;
 
 	qdf_copy_macaddr(&log_record->bssid, &ap->bssid);
 
 	log_record->roam_scan.cand_ap_count = scan->num_ap;
-	if (scan->num_chan > WLAN_MAX_LOGGING_FREQ)
-		scan->num_chan = WLAN_MAX_LOGGING_FREQ;
+	if (scan->num_chan > MAX_ROAM_SCAN_CHAN)
+		scan->num_chan = MAX_ROAM_SCAN_CHAN;
+
 	log_record->roam_scan.num_scanned_freq = scan->num_chan;
-	qdf_mem_copy(&log_record->roam_scan.scan_freq, &scan->chan_freq,
-		     scan->num_chan);
+	qdf_mem_copy(&log_record->roam_scan.scan_freq, &scan->chan_freq[0],
+		     scan->num_chan * sizeof(scan->chan_freq[0]));
 
 	wlan_connectivity_log_enqueue(log_record);
 	qdf_mem_free(log_record);
@@ -4786,12 +4787,12 @@ void cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data,
 		return;
 
 	log_record->vdev_id = vdev_id;
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	log_record->log_subtype = WLAN_ROAM_SCAN_START;
 
 	log_record->roam_trig.trigger_reason  = data->trigger_reason;
 	log_record->roam_trig.trigger_sub_reason = data->trigger_sub_reason;
-	log_record->roam_trig.current_rssi = data->current_rssi;
+	log_record->roam_trig.current_rssi = (-1) * data->current_rssi;
 	log_record->roam_trig.cu_load = data->cu_trig_data.cu_load;
 	log_record->roam_trig.rssi_threshold = data->rssi_trig_data.threshold;
 
@@ -4799,7 +4800,8 @@ void cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data,
 	qdf_mem_free(log_record);
 }
 
-void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap)
+void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap,
+				  uint8_t cand_ap_idx)
 {
 	struct wlan_log_record *log_record = NULL;
 
@@ -4807,20 +4809,22 @@ void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap)
 	if (!log_record)
 		return;
 
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
-	log_record->fw_timestamp_us = ap->timestamp;
-	if (!ap->type)
-		log_record->log_subtype = WLAN_ROAM_SCORE_CAND_AP;
-	else
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
+	log_record->fw_timestamp_us = ap->timestamp * 1000;
+
+	log_record->ap.is_current_ap = (ap->type == 2);
+	if (log_record->ap.is_current_ap)
 		log_record->log_subtype = WLAN_ROAM_SCORE_CURR_AP;
+	else
+		log_record->log_subtype = WLAN_ROAM_SCORE_CAND_AP;
 
-	log_record->ap.is_current_ap = ap->type;
 	qdf_copy_macaddr(&log_record->ap.cand_bssid, &ap->bssid);
 
-	log_record->ap.rssi  = ap->rssi;
+	log_record->ap.rssi  = (-1) * ap->rssi;
 	log_record->ap.cu_load = ap->cu_load;
 	log_record->ap.total_score = ap->total_score;
 	log_record->ap.etp = ap->etp;
+	log_record->ap.idx = cand_ap_idx;
 
 	wlan_connectivity_log_enqueue(log_record);
 	qdf_mem_free(log_record);
@@ -4836,15 +4840,15 @@ void cm_roam_result_info_event(struct wmi_roam_result *res, uint8_t vdev_id,
 		return;
 
 	log_record->vdev_id = vdev_id;
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	if (roam_abort) {
 		log_record->log_subtype = WLAN_ROAM_CANCEL;
 		log_record->fw_timestamp_us = log_record->timestamp_us;
 	} else {
 		log_record->log_subtype = WLAN_ROAM_RESULT;
-		log_record->fw_timestamp_us = res->timestamp;
+		log_record->fw_timestamp_us = res->timestamp * 1000;
 		log_record->roam_result.roam_fail_reason = res->fail_reason;
-		log_record->roam_result.roam_status = res->status;
+		log_record->roam_result.is_roam_successful = res->status;
 	}
 
 	wlan_connectivity_log_enqueue(log_record);
@@ -5107,7 +5111,7 @@ cm_roam_btm_query_event(struct wmi_neighbor_report_data *btm_data,
 		return QDF_STATUS_E_NOMEM;
 
 	log_record->log_subtype = WLAN_BTM_QUERY;
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	log_record->fw_timestamp_us = btm_data->timestamp * 1000;
 	log_record->vdev_id = vdev_id;
 
@@ -5133,7 +5137,7 @@ cm_roam_btm_resp_event(struct roam_btm_response_data *btm_data,
 	else
 		log_record->log_subtype = WLAN_BTM_RESP;
 
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	log_record->fw_timestamp_us = btm_data->timestamp * 1000;
 	log_record->vdev_id = vdev_id;
 
@@ -5171,7 +5175,7 @@ cm_roam_btm_candidate_event(struct wmi_btm_req_candidate_info *btm_data,
 		return QDF_STATUS_E_NOMEM;
 
 	log_record->log_subtype = WLAN_BTM_REQ_CANDI;
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	log_record->fw_timestamp_us = btm_data->timestamp * 1000;
 	log_record->vdev_id = vdev_id;
 	log_record->btm_cand.preference = btm_data->preference;
@@ -5196,7 +5200,7 @@ cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data,
 		return QDF_STATUS_E_NOMEM;
 
 	log_record->log_subtype = WLAN_BTM_REQ;
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	log_record->fw_timestamp_us = btm_data->timestamp * 1000;
 	log_record->vdev_id = vdev_id;
 
@@ -5226,12 +5230,12 @@ cm_roam_mgmt_frame_event(struct roam_frame_info *frame_data, uint8_t vdev_id)
 	if (!log_record)
 		return QDF_STATUS_E_NOMEM;
 
-	log_record->timestamp_us = qdf_get_time_of_the_day_ms() * 1000;
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
 	log_record->fw_timestamp_us = frame_data->timestamp * 1000;
 	log_record->vdev_id = vdev_id;
 
 	log_record->pkt_info.seq_num = frame_data->seq_num;
-	log_record->pkt_info.rssi = frame_data->rssi;
+	log_record->pkt_info.rssi = (-1) * frame_data->rssi;
 	log_record->pkt_info.tx_status = frame_data->tx_status;
 	log_record->pkt_info.frame_status_code = frame_data->status_code;
 

+ 5 - 2
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h

@@ -52,10 +52,12 @@ void cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data,
 /**
  * cm_roam_candidate_info_event() - send trigger info to userspace
  * @ap: roam candidate info
+ * @cand_ap_idx: Candidate AP index
  *
  * Return: void
  */
-void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap);
+void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap,
+				  uint8_t cand_ap_idx);
 
 /**
  * cm_roam_result_info_event() - send scan results info to userspace
@@ -80,7 +82,8 @@ cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data, uint8_t vdev_id,
 }
 
 static inline void
-cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap)
+cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap,
+			     uint8_t cand_idx)
 {
 }
 

+ 0 - 1
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload_event.c

@@ -324,7 +324,6 @@ QDF_STATUS cm_fw_roam_abort_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 	if (roam_req)
 		cm_id = roam_req->cm_id;
 
-	cm_roam_result_info_event(NULL, vdev_id, true);
 	/* continue even if no roam command is found */
 	status = wlan_cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_ENABLED,
 					   REASON_ROAM_ABORT);

+ 82 - 0
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h

@@ -318,6 +318,88 @@ enum roam_fail_params {
 	ROAM_FAIL_REASON,
 };
 
+/**
+ * enum wlan_roam_failure_reason_code - Roaming failure reason codes
+ * @ROAM_FAIL_REASON_NO_SCAN_START: Scan start failed
+ * @ROAM_FAIL_REASON_NO_AP_FOUND: No roamable AP found
+ * @ROAM_FAIL_REASON_NO_CAND_AP_FOUND: No candidate AP found
+ * @ROAM_FAIL_REASON_HOST: Host aborted roaming due to vdev stop from
+ * host
+ * @ROAM_FAIL_REASON_AUTH_SEND: Auth TX failure
+ * @ROAM_FAIL_REASON_NO_AUTH_RESP: No Authentication response received
+ * @ROAM_FAIL_REASON_AUTH_RECV: Authentication response received with
+ * error status code
+ * @ROAM_FAIL_REASON_REASSOC_SEND: Reassoc request TX failed
+ * @ROAM_FAIL_REASON_REASSOC_RECV: Reassoc response frame not received
+ * @ROAM_FAIL_REASON_NO_REASSOC_RESP: No reassociation response received
+ * @ROAM_FAIL_REASON_EAPOL_TIMEOUT: EAPoL timedout
+ * @ROAM_FAIL_REASON_MLME: MLME internal error
+ * @ROAM_FAIL_REASON_INTERNAL_ABORT: Abort due to internal firmware error
+ * @ROAM_FAIL_REASON_SCAN_START: Not able to start roam scan
+ * @ROAM_FAIL_REASON_AUTH_NO_ACK: No ack received for Auth request frame
+ * @ROAM_FAIL_REASON_AUTH_INTERNAL_DROP: Auth request dropped internally
+ * @ROAM_FAIL_REASON_REASSOC_NO_ACK: No ack received for reassoc request frame
+ * @ROAM_FAIL_REASON_REASSOC_INTERNAL_DROP: Reassoc frame dropped internally
+ * at firmware
+ * @ROAM_FAIL_REASON_EAPOL_M2_SEND: EAPoL M2 send failed
+ * @ROAM_FAIL_REASON_EAPOL_M2_INTERNAL_DROP: EAPoL M2 frame dropped internally
+ * at firmware
+ * @ROAM_FAIL_REASON_EAPOL_M2_NO_ACK: No ack received for EAPoL M2 frame
+ * @ROAM_FAIL_REASON_EAPOL_M3_TIMEOUT: EAPoL M3 not received from AP
+ * @ROAM_FAIL_REASON_EAPOL_M4_SEND: EAPoL M4 frame TX failed
+ * @ROAM_FAIL_REASON_EAPOL_M4_INTERNAL_DROP: EAPoL M4 frame dropped internally
+ * @ROAM_FAIL_REASON_EAPOL_M4_NO_ACK: No ack received for EAPoL M4 frame
+ * @ROAM_FAIL_REASON_NO_SCAN_FOR_FINAL_BMISS: Roam scan start failed for final
+ * bmiss case
+ * @ROAM_FAIL_REASON_DISCONNECT: Deauth/Disassoc frame received from AP during
+ * roaming
+ * @ROAM_FAIL_REASON_SYNC: Roam failure due to host wake-up during roaming in
+ * progress
+ * @ROAM_FAIL_REASON_SAE_INVALID_PMKID: Invalid PMKID during SAE roaming
+ * @ROAM_FAIL_REASON_SAE_PREAUTH_TIMEOUT: SAE roaming preauthentication
+ * timedout
+ * @ROAM_FAIL_REASON_SAE_PREAUTH_FAIL: SAE preauthentication failure
+ * @ROAM_FAIL_REASON_UNABLE_TO_START_ROAM_HO: Start handoff failed
+ * @ROAM_FAIL_REASON_UNKNOWN: Default reason
+ */
+enum wlan_roam_failure_reason_code {
+	ROAM_FAIL_REASON_NO_SCAN_START = 1,
+	ROAM_FAIL_REASON_NO_AP_FOUND,
+	ROAM_FAIL_REASON_NO_CAND_AP_FOUND,
+
+	/* Failure reasons after roam scan is complete */
+	ROAM_FAIL_REASON_HOST,
+	ROAM_FAIL_REASON_AUTH_SEND,
+	ROAM_FAIL_REASON_NO_AUTH_RESP,
+	ROAM_FAIL_REASON_AUTH_RECV,
+	ROAM_FAIL_REASON_REASSOC_SEND,
+	ROAM_FAIL_REASON_REASSOC_RECV,
+	ROAM_FAIL_REASON_NO_REASSOC_RESP,
+	ROAM_FAIL_REASON_EAPOL_TIMEOUT,
+	ROAM_FAIL_REASON_MLME,
+	ROAM_FAIL_REASON_INTERNAL_ABORT,
+	ROAM_FAIL_REASON_SCAN_START,
+	ROAM_FAIL_REASON_AUTH_NO_ACK,
+	ROAM_FAIL_REASON_AUTH_INTERNAL_DROP,
+	ROAM_FAIL_REASON_REASSOC_NO_ACK,
+	ROAM_FAIL_REASON_REASSOC_INTERNAL_DROP,
+	ROAM_FAIL_REASON_EAPOL_M2_SEND,
+	ROAM_FAIL_REASON_EAPOL_M2_INTERNAL_DROP,
+	ROAM_FAIL_REASON_EAPOL_M2_NO_ACK,
+	ROAM_FAIL_REASON_EAPOL_M3_TIMEOUT,
+	ROAM_FAIL_REASON_EAPOL_M4_SEND,
+	ROAM_FAIL_REASON_EAPOL_M4_INTERNAL_DROP,
+	ROAM_FAIL_REASON_EAPOL_M4_NO_ACK,
+	ROAM_FAIL_REASON_NO_SCAN_FOR_FINAL_BMISS,
+	ROAM_FAIL_REASON_DISCONNECT,
+	ROAM_FAIL_REASON_SYNC,
+	ROAM_FAIL_REASON_SAE_INVALID_PMKID,
+	ROAM_FAIL_REASON_SAE_PREAUTH_TIMEOUT,
+	ROAM_FAIL_REASON_SAE_PREAUTH_FAIL,
+	ROAM_FAIL_REASON_UNABLE_TO_START_ROAM_HO,
+	ROAM_FAIL_REASON_UNKNOWN = 255,
+};
+
 #ifdef WLAN_FEATURE_HOST_ROAM
 /**
  * srtuct reassoc_timer_ctx - reassoc timer context

+ 2 - 2
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -2774,8 +2774,6 @@ cm_stats_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap,
 	uint16_t i;
 	char time[TIME_STRING_LEN], time2[TIME_STRING_LEN];
 
-	/* Update roam candidates info to userspace */
-	cm_roam_candidate_info_event(ap);
 
 	mlme_nofl_info("%62s%62s", LINE_STR, LINE_STR);
 	mlme_nofl_info("%13s %16s %8s %4s %4s %5s/%3s %3s/%3s %7s %7s %6s %12s %20s",
@@ -2798,6 +2796,8 @@ cm_stats_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap,
 			  ap->etp, ap->rssi, ap->rssi_score, ap->cu_load,
 			  ap->cu_score, ap->total_score, ap->bl_reason,
 			  ap->bl_source, time2, ap->bl_original_timeout);
+		/* Update roam candidates info to userspace */
+		cm_roam_candidate_info_event(ap, i);
 		ap++;
 	}
 }

+ 2 - 0
configs/default_defconfig

@@ -1451,3 +1451,5 @@ CONFIG_WLAN_FEATURE_11BE := n
 CONFIG_WLAN_FEATURE_11BE_MLO := n
 
 CONFIG_WLAN_DEBUG_LINK_VOTE := y
+
+CONFIG_QCACLD_WLAN_CONNECTIVITY_LOGGING := y

+ 3 - 2
core/hdd/inc/wlan_hdd_connectivity_logging.h

@@ -39,10 +39,11 @@
 /**
  * wlan_hdd_start_connectivity_logging()  - Initialize logging callbacks
  * and allocate global buffers
+ * @hdd_ctx: Pointer to hdd context
  *
  * Return: None
  */
-void wlan_hdd_start_connectivity_logging(void);
+void wlan_hdd_start_connectivity_logging(struct hdd_context *hdd_ctx);
 
 /**
  * wlan_hdd_connectivity_event_connecting() - Queue the connecting event to
@@ -66,7 +67,7 @@ void wlan_hdd_connectivity_fail_event(struct wlan_objmgr_vdev *vdev,
 				      struct wlan_cm_connect_resp *rsp);
 #else
 static inline
-void wlan_hdd_start_connectivity_logging(void)
+void wlan_hdd_start_connectivity_logging(struct hdd_context *hdd_ctx)
 {}
 
 static inline

+ 175 - 98
core/hdd/src/wlan_hdd_connectivity_logging.c

@@ -93,9 +93,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,    sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,    sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP, NLA_U64, sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID, NLA_U8, sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_SSID, NLA_BINARY,
 	 GET_ATTR_OFFSET(conn_info.ssid_len), GET_ATTR_OFFSET(conn_info.ssid)},
@@ -125,9 +125,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING_FAIL] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32, sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8, sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,      NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -139,17 +139,17 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_AUTH_REQ] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,       NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_RSSI,        NLA_U16,  sizeof(uint16_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_RSSI,        NLA_S32,  sizeof(int32_t),
 	 GET_ATTR_OFFSET(pkt_info.rssi)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_AUTH_ALGO,   NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.auth_algo)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_AUTH_FRAME_TYPE, NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_SAE_AUTH_FRAME_TYPE, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.auth_type)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_SEQUENCE_NUMBER, NLA_U16,  sizeof(uint16_t),
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
@@ -167,15 +167,15 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_AUTH_RESP] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32, sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8, sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,      NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_AUTH_ALGO,  NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.auth_algo)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_AUTH_FRAME_TYPE, NLA_U8,  sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_SAE_AUTH_FRAME_TYPE, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.auth_type)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_SEQUENCE_NUMBER,   NLA_U16, sizeof(uint16_t),
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
@@ -189,9 +189,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ASSOC_REQ] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,       NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -211,9 +211,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ASSOC_RESP] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,       NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -227,9 +227,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DEAUTH_RX] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,       NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -245,9 +245,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DEAUTH_TX] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,       NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -263,9 +263,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DISASSOC_RX] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID, NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX, NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID, NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -281,9 +281,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DISASSOC_TX] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP, NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP, NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID, NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX, NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID, NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -299,9 +299,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BEACON_LOSS_DISCONN] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,       NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(bssid)},
@@ -315,9 +315,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCAN_START] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_TRIGGER_REASON,  NLA_U8,
 	 sizeof(uint8_t), GET_ATTR_OFFSET(roam_trig.trigger_reason)},
@@ -327,7 +327,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(roam_trig.current_rssi)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_CU,  NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(roam_trig.cu_load)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_SCAN_TYPE, NLA_FLAG, sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_SCAN_TYPE, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(roam_trig.is_full_scan)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_RSSI_THRESHOLD, NLA_U32,
 	 sizeof(uint8_t), GET_ATTR_OFFSET(roam_trig.rssi_threshold)},
@@ -339,9 +339,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCAN_DONE] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_AP_COUNT,  NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(roam_scan.cand_ap_count)},
@@ -355,9 +355,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCORE_CURR_AP] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8, sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,  NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(ap.cand_bssid)},
@@ -377,9 +377,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCORE_CAND_AP] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_AP_RANK, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(ap.idx)},
@@ -403,10 +403,12 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_RESULT] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
+	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,  NLA_BINARY, QDF_MAC_ADDR_SIZE,
+	 GET_ATTR_OFFSET(bssid)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
@@ -415,9 +417,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_CANCEL] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
@@ -427,9 +429,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_QUERY] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BTM_TOKEN,  NLA_U16, sizeof(uint16_t),
 	 GET_ATTR_OFFSET(btm_info.token)},
@@ -443,9 +445,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_REQ] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32, sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,  sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BTM_TOKEN,  NLA_U16, sizeof(uint16_t),
 	 GET_ATTR_OFFSET(btm_info.token)},
@@ -465,9 +467,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_WTC] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(btm_info.reason)},
@@ -483,9 +485,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_REQ_CANDI] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,  NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,   NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,     NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,     NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BSSID,  NLA_BINARY, QDF_MAC_ADDR_SIZE,
 	 GET_ATTR_OFFSET(btm_cand.bssid)},
@@ -499,9 +501,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_RESP] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32, sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64, sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,  sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BTM_TOKEN,  NLA_U16, sizeof(uint16_t),
 	 GET_ATTR_OFFSET(btm_info.token)},
@@ -519,9 +521,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_DISCOVER] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
@@ -531,9 +533,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_OFFER] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
@@ -541,9 +543,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_REQUEST] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
@@ -553,9 +555,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_ACK] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
@@ -563,9 +565,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_NACK] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
@@ -573,9 +575,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M1] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
@@ -585,9 +587,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M2] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS,   NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
@@ -599,9 +601,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M3] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
@@ -611,9 +613,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M4] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
@@ -625,9 +627,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_GTK_M1] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
@@ -637,9 +639,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_GTK_M2] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
@@ -651,13 +653,13 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_REQUEST] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_TYPE,   NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.eap_type)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_LEN,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_LEN,    NLA_U16,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.eap_len)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
@@ -665,23 +667,25 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_RESPONSE] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_TYPE,   NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.eap_type)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_LEN,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_LEN,    NLA_U16,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.eap_len)},
+	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
+	 GET_ATTR_OFFSET(pkt_info.tx_status)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_SUCCESS] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
@@ -689,9 +693,9 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_FAILURE] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,  sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_HOST_TIMESTAMP,  NLA_U64,  sizeof(uint64_t),
 	 GET_ATTR_OFFSET(timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_VDEV_ID,    NLA_U8,   sizeof(uint8_t),
+	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
 	},
@@ -797,20 +801,27 @@ wlan_hdd_get_converted_tx_status(uint8_t tx_status)
 static uint16_t
 wlan_hdd_get_connectivity_log_tlv_len(struct wlan_log_record *rec)
 {
-	uint16_t j, attr_id, log_event_type, len = 0;
+	uint16_t j, attr_id, log_evt_type, len = 0;
+
+	log_evt_type = hdd_connectivity_log_attr_table[rec->log_subtype];
+	if (log_evt_type >= (QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1))
+			return 0;
 
-	log_event_type = hdd_connectivity_log_attr_table[rec->log_subtype];
 	for (j = 0; j < QCA_WLAN_VENDOR_ATTR_DIAG_MAX; j++) {
 		attr_id =
-			connectivity_attr_table[log_event_type][j].attribute_id;
+			connectivity_attr_table[log_evt_type][j].attribute_id;
 		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_MAX)
 			break;
 
-		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ &&
+		if (log_evt_type ==
+		    QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING &&
+		    attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ &&
 		    !rec->conn_info.freq)
 			continue;
 
-		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ_HINT &&
+		if (log_evt_type ==
+		    QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING &&
+		    attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ_HINT &&
 		    !rec->conn_info.freq_hint)
 			continue;
 
@@ -818,7 +829,15 @@ wlan_hdd_get_connectivity_log_tlv_len(struct wlan_log_record *rec)
 		    !rec->fw_timestamp_us)
 			continue;
 
-		len += connectivity_attr_table[log_event_type][j].attribute_length;
+		if (log_evt_type ==
+		    QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCAN_DONE &&
+		    attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_FREQ_LIST) {
+			len += NLMSG_HDRLEN +
+			       (rec->roam_scan.num_scanned_freq *
+				sizeof(rec->roam_scan.scan_freq[0]));
+		} else {
+			len += connectivity_attr_table[log_evt_type][j].attribute_length;
+		}
 	}
 
 	return len;
@@ -840,9 +859,13 @@ wlan_hdd_get_connectivity_log_event_len(struct wlan_log_record *rec,
 static QDF_STATUS
 wlan_hdd_put_connectivity_logging_data(struct sk_buff *skb,
 				       struct wlan_log_record *rec,
-				       uint8_t attribute_id)
+				       struct connectivity_log_attr *attribute)
 {
 	int errno = 0;
+	struct qdf_mac_addr bssid = {0};
+	enum  qca_vendor_attr_diag_event_type attribute_id =
+						attribute->attribute_id;
+	uint16_t field_offset = attribute->field_offset;
 
 	switch (attribute_id) {
 	case QCA_WLAN_VENDOR_ATTR_DIAG_SSID:
@@ -851,12 +874,13 @@ wlan_hdd_put_connectivity_logging_data(struct sk_buff *skb,
 
 		break;
 	case QCA_WLAN_VENDOR_ATTR_DIAG_BSSID:
-		if (qdf_is_macaddr_zero(&rec->bssid) ||
-		    qdf_is_macaddr_broadcast(&rec->bssid))
+		bssid = ATTR_GET_VALUE(struct qdf_mac_addr, rec, field_offset);
+		if (qdf_is_macaddr_zero(&bssid) ||
+		    qdf_is_macaddr_broadcast(&bssid))
 			break;
 
 		nla_put(skb, attribute_id, QDF_MAC_ADDR_SIZE,
-			rec->bssid.bytes);
+			bssid.bytes);
 		break;
 	case QCA_WLAN_VENDOR_ATTR_DIAG_BSSID_HINT:
 		if (qdf_is_macaddr_zero(&rec->bssid) ||
@@ -876,6 +900,42 @@ wlan_hdd_put_connectivity_logging_data(struct sk_buff *skb,
 	return QDF_STATUS_SUCCESS;
 }
 
+static QDF_STATUS
+wlan_hdd_fill_roam_scan_frequencies(struct sk_buff *skb,
+				    struct wlan_log_record *rec)
+{
+	int errno;
+	struct nlattr *attr, *attr1;
+	uint8_t i;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	attr = nla_nest_start(
+			skb, QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_FREQ_LIST);
+	if (!attr)
+		return QDF_STATUS_E_FAILURE;
+
+	for (i = 0; i < rec->roam_scan.num_scanned_freq; i++) {
+		attr1 = nla_nest_start(skb, i);
+		if (!attr1) {
+			status = QDF_STATUS_E_FAILURE;
+			break;
+		}
+
+		errno = nla_put_u16(skb, QCA_WLAN_VENDOR_ATTR_DIAG_FREQ,
+				    rec->roam_scan.scan_freq[i]);
+		if (errno) {
+			status = qdf_status_from_os_return(errno);
+			break;
+		}
+
+		nla_nest_end(skb, attr1);
+	}
+
+	nla_nest_end(skb, attr);
+
+	return status;
+}
+
 static QDF_STATUS
 wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 					struct wlan_log_record *rec)
@@ -887,7 +947,13 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 	QDF_STATUS status;
 	int errno;
 
+	/*
+	 * Continue to the next event if the Event type is invalid
+	 */
 	evt_type = hdd_connectivity_log_attr_table[rec->log_subtype];
+	if (evt_type >= (QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1))
+		return QDF_STATUS_SUCCESS;
+
 	errno = nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE,
 			    evt_type);
 	if (errno)
@@ -904,11 +970,13 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_MAX)
 			break;
 
-		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ &&
+		if (evt_type == QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING &&
+		    attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ &&
 		    !rec->conn_info.freq)
 			continue;
 
-		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ_HINT &&
+		if (evt_type == QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING &&
+		    attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_FREQ_HINT &&
 		    !rec->conn_info.freq_hint)
 			continue;
 
@@ -916,6 +984,14 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 		    !rec->fw_timestamp_us)
 			continue;
 
+		if (evt_type ==
+		    QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCAN_DONE &&
+		    attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_FREQ_LIST) {
+			status = wlan_hdd_fill_roam_scan_frequencies(skb, rec);
+			if (QDF_IS_STATUS_ERROR(status))
+				continue;
+		}
+
 		switch (attr.attribute_type) {
 		case NLA_U8:
 			val8 = ATTR_GET_VALUE(uint8_t, rec, attr.field_offset);
@@ -968,7 +1044,7 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 			break;
 		case NLA_BINARY:
 			status = wlan_hdd_put_connectivity_logging_data(
-						skb, rec, attr.attribute_id);
+						skb, rec, &attr);
 			if (QDF_IS_STATUS_ERROR(status))
 				return status;
 			break;
@@ -990,6 +1066,7 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
  */
 static QDF_STATUS
 wlan_hdd_send_connectivity_log_to_user(struct wlan_log_record *rec,
+				       void *hdd_context,
 				       uint8_t num_records)
 {
 	struct hdd_context *hdd_ctx;
@@ -1000,8 +1077,8 @@ wlan_hdd_send_connectivity_log_to_user(struct wlan_log_record *rec,
 
 	hdd_enter();
 
-	hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
-	if (!hdd_ctx)
+	hdd_ctx = hdd_context;
+	if (wlan_hdd_validate_context(hdd_ctx))
 		return QDF_STATUS_E_FAILURE;
 
 	len = wlan_hdd_get_connectivity_log_event_len(rec, num_records);
@@ -1046,13 +1123,13 @@ failure:
 	return QDF_STATUS_E_FAILURE;
 }
 
-void wlan_hdd_start_connectivity_logging(void)
+void wlan_hdd_start_connectivity_logging(struct hdd_context *hdd_ctx)
 {
-	struct wlan_cl_hdd_cbks hdd_cb;
+	struct wlan_cl_osif_cbks hdd_cb;
 
 	hdd_cb.wlan_connectivity_log_send_to_usr =
 			wlan_hdd_send_connectivity_log_to_user;
-	wlan_connectivity_logging_start(&hdd_cb);
+	wlan_connectivity_logging_start(&hdd_cb, hdd_ctx);
 }
 
 void wlan_hdd_connectivity_event_connecting(struct hdd_context *hdd_ctx,

+ 1 - 1
core/hdd/src/wlan_hdd_main.c

@@ -4468,7 +4468,7 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit)
 		hdd_set_hif_init_phase(hif_ctx, false);
 		hdd_hif_set_enable_detection(hif_ctx, true);
 
-		wlan_hdd_start_connectivity_logging();
+		wlan_hdd_start_connectivity_logging(hdd_ctx);
 
 		break;
 

+ 7 - 5
core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c

@@ -1082,11 +1082,13 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
 			      session_entry,
 			      (assoc_rsp->status_code ? QDF_STATUS_E_FAILURE :
 			       QDF_STATUS_SUCCESS), assoc_rsp->status_code);
-	wlan_connectivity_mgmt_event((struct wlan_frame_hdr *)hdr,
-				     session_entry->vdev_id,
-				     assoc_rsp->status_code, 0, rssi,
-				     0, 0, 0,
-				     WLAN_ASSOC_RSP);
+
+	if (subtype != LIM_REASSOC)
+		wlan_connectivity_mgmt_event((struct wlan_frame_hdr *)hdr,
+					     session_entry->vdev_id,
+					     assoc_rsp->status_code, 0, rssi,
+					     0, 0, 0,
+					     WLAN_ASSOC_RSP);
 
 	ap_nss = lim_get_nss_supported_by_ap(&assoc_rsp->VHTCaps,
 					     &assoc_rsp->HTCaps,

+ 2 - 1
core/mac/src/pe/lim/lim_process_auth_frame.c

@@ -1701,8 +1701,9 @@ bool lim_process_sae_preauth_frame(struct mac_context *mac, uint8_t *rx_pkt)
 	vdev = wlan_objmgr_get_vdev_by_macaddr_from_psoc(
 			mac->psoc, pdev_id, dot11_hdr->da, WLAN_LEGACY_SME_ID);
 	if (vdev) {
-		lim_sae_auth_cleanup_retry(mac, wlan_vdev_get_id(vdev));
 		vdev_id = wlan_vdev_get_id(vdev);
+
+		lim_sae_auth_cleanup_retry(mac, vdev_id);
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
 	}
 

+ 4 - 1
core/mac/src/pe/lim/lim_process_beacon_frame.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -137,6 +137,9 @@ lim_process_beacon_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
 			session->beacon = NULL;
 			session->bcnLen = 0;
 		}
+
+		mac_ctx->lim.bss_rssi =
+			(int8_t)WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info);
 		session->bcnLen = WMA_GET_RX_MPDU_LEN(rx_pkt_info);
 		session->beacon = qdf_mem_malloc(session->bcnLen);
 		if (session->beacon)

+ 41 - 5
core/mac/src/pe/lim/lim_send_management_frames.c

@@ -1958,6 +1958,7 @@ static QDF_STATUS lim_assoc_tx_complete_cnf(void *context,
 	uint16_t reason_code;
 	struct mac_context *mac_ctx = (struct mac_context *)context;
 	struct mgmt_frame_data *data;
+	enum qdf_dp_tx_rx_status qdf_tx_complete;
 
 	pe_nofl_rl_info("Assoc req TX: %s (%d)",
 			(tx_complete == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK) ?
@@ -1965,8 +1966,16 @@ static QDF_STATUS lim_assoc_tx_complete_cnf(void *context,
 
 	if (params) {
 		data = params;
+
+		if (tx_complete == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
+			qdf_tx_complete = QDF_TX_RX_STATUS_OK;
+		else if (tx_complete  == WMI_MGMT_TX_COMP_TYPE_DISCARD)
+			qdf_tx_complete = QDF_TX_RX_STATUS_FW_DISCARD;
+		else
+			qdf_tx_complete = QDF_TX_RX_STATUS_NO_ACK;
+
 		wlan_connectivity_mgmt_event(&data->mac_hdr, data->vdev_id,
-					     data->status_code, tx_complete,
+					     data->status_code, qdf_tx_complete,
 					     data->rssi, 0, 0, 0,
 					     WLAN_ASSOC_REQ);
 	}
@@ -2866,7 +2875,7 @@ static bool lim_is_ack_for_sae_auth(qdf_nbuf_t buf)
  * @context: pointer to global mac
  * @buf: buffer
  * @tx_complete : Sent status
- * @params; tx completion params
+ * @params: tx completion params
  *
  * Return: This returns QDF_STATUS
  */
@@ -2880,11 +2889,20 @@ static QDF_STATUS lim_auth_tx_complete_cnf(void *context,
 	uint16_t auth_ack_status;
 	uint16_t reason_code;
 	bool sae_auth_acked;
+	enum qdf_dp_tx_rx_status qdf_tx_complete;
 
 	if (params) {
 		data = params;
+
+		if (tx_complete == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
+			qdf_tx_complete = QDF_TX_RX_STATUS_OK;
+		else if (tx_complete  == WMI_MGMT_TX_COMP_TYPE_DISCARD)
+			qdf_tx_complete = QDF_TX_RX_STATUS_FW_DISCARD;
+		else
+			qdf_tx_complete = QDF_TX_RX_STATUS_NO_ACK;
+
 		wlan_connectivity_mgmt_event(&data->mac_hdr, data->vdev_id,
-					     data->status_code, tx_complete,
+					     data->status_code, qdf_tx_complete,
 					     data->rssi, data->auth_algo,
 					     data->auth_type, data->auth_seq,
 					     WLAN_AUTH_REQ);
@@ -3499,11 +3517,20 @@ static QDF_STATUS lim_disassoc_tx_complete_cnf_handler(void *context,
 	QDF_STATUS status_code;
 	struct scheduler_msg msg = {0};
 	struct mgmt_frame_data *data;
+	enum qdf_dp_tx_rx_status qdf_tx_complete;
 
 	if (params) {
 		data = params;
+
+		if (tx_success == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
+			qdf_tx_complete = QDF_TX_RX_STATUS_OK;
+		else if (tx_success  == WMI_MGMT_TX_COMP_TYPE_DISCARD)
+			qdf_tx_complete = QDF_TX_RX_STATUS_FW_DISCARD;
+		else
+			qdf_tx_complete = QDF_TX_RX_STATUS_NO_ACK;
+
 		wlan_connectivity_mgmt_event(&data->mac_hdr, data->vdev_id,
-					     data->status_code, tx_success,
+					     data->status_code, qdf_tx_complete,
 					     data->rssi, 0, 0, 0,
 					     WLAN_DISASSOC_TX);
 	}
@@ -3545,11 +3572,20 @@ static QDF_STATUS lim_deauth_tx_complete_cnf_handler(void *context,
 	tLimMlmDeauthReq *deauth_req;
 	struct pe_session *session = NULL;
 	struct mgmt_frame_data *data;
+	enum qdf_dp_tx_rx_status qdf_tx_complete;
 
 	if (params) {
 		data = params;
+
+		if (tx_success == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
+			qdf_tx_complete = QDF_TX_RX_STATUS_OK;
+		else if (tx_success  == WMI_MGMT_TX_COMP_TYPE_DISCARD)
+			qdf_tx_complete = QDF_TX_RX_STATUS_FW_DISCARD;
+		else
+			qdf_tx_complete = QDF_TX_RX_STATUS_NO_ACK;
+
 		wlan_connectivity_mgmt_event(&data->mac_hdr, data->vdev_id,
-					     data->status_code, tx_success,
+					     data->status_code, qdf_tx_complete,
 					     data->rssi, 0, 0, 0,
 					     WLAN_DEAUTH_TX);
 	}

+ 27 - 4
core/wma/src/wma_scan_roam.c

@@ -1824,8 +1824,6 @@ wma_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap,
 	uint16_t i;
 	char time[TIME_STRING_LEN], time2[TIME_STRING_LEN];
 
-	/* Update roam candidates info to userspace */
-	cm_roam_candidate_info_event(ap);
 
 	wma_nofl_info("%62s%62s", LINE_STR, LINE_STR);
 	wma_nofl_info("%13s %16s %8s %4s %4s %5s/%3s %3s/%3s %7s %7s %6s %12s %20s",
@@ -1848,6 +1846,10 @@ wma_log_roam_scan_candidates(struct wmi_roam_candidate_info *ap,
 			      ap->etp, ap->rssi, ap->rssi_score, ap->cu_load,
 			      ap->cu_score, ap->total_score, ap->bl_reason,
 			      ap->bl_source, time2, ap->bl_original_timeout);
+
+		/* Update roam candidates info to userspace */
+		cm_roam_candidate_info_event(ap, i);
+
 		ap++;
 	}
 }
@@ -1922,6 +1924,23 @@ wma_rso_print_scan_info(struct wmi_roam_scan_data *scan, uint8_t vdev_id,
 	qdf_mem_free(buf1);
 }
 
+static
+bool mlme_is_roam_aborted(enum wlan_roam_failure_reason_code reason)
+{
+	switch (reason) {
+	case ROAM_FAIL_REASON_UNABLE_TO_START_ROAM_HO:
+	case ROAM_FAIL_REASON_HOST:
+	case ROAM_FAIL_REASON_NO_CAND_AP_FOUND:
+	case ROAM_FAIL_REASON_INTERNAL_ABORT:
+	case ROAM_FAIL_REASON_SCAN_START:
+		return true;
+	default:
+		break;
+	}
+
+	return false;
+}
+
 /**
  * wma_rso_print_roam_result()  - Print roam result related info
  * @res:     Roam result strucure pointer
@@ -1938,8 +1957,12 @@ wma_rso_print_roam_result(struct wmi_roam_result *res,
 	char *buf;
 	char time[TIME_STRING_LEN];
 
-	/* Update roam result info to userspace */
-	cm_roam_result_info_event(res, vdev_id, 0);
+	/* Log the roam result event to userspace */
+	if (res->status == 1 &&
+	    mlme_is_roam_aborted(res->fail_reason))
+		cm_roam_result_info_event(NULL, vdev_id, true);
+	else
+		cm_roam_result_info_event(res, vdev_id, false);
 
 	buf = qdf_mem_malloc(ROAM_FAILURE_BUF_SIZE);
 	if (!buf)