diff options
-rw-r--r-- | qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c | 100 | ||||
-rw-r--r-- | qcwcn/wpa_supplicant_8_lib/qca-vendor_copy.h | 133 | ||||
-rw-r--r-- | qcwcn/wpa_supplicant_8_lib/wpa_driver_common_lib.h | 33 |
3 files changed, 262 insertions, 4 deletions
diff --git a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c index 4cbfda8..4e44d8d 100644 --- a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c +++ b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c @@ -1016,7 +1016,7 @@ static int fill_sta_info(struct remote_sta_info *sta_info, if (sta_info->num_sta == 1) { if (sta_info->show_band) ret = snprintf(buf, buf_len, - "%02x:%02x:%02x:%02x:%02x:%02x %d %d %04x %02x:%02x:%02x %d %d %d %d %d %d %d %d %d %s", + "%02x:%02x:%02x:%02x:%02x:%02x %d %d %04x %02x:%02x:%02x %d %d %d %d %d %d %d %d %d %s %d %d %d %d %d %d %d %d %d %d %d %d %d", sta_info->mac_addr[0], sta_info->mac_addr[1], sta_info->mac_addr[2], sta_info->mac_addr[3], sta_info->mac_addr[4], sta_info->mac_addr[5], @@ -1032,10 +1032,23 @@ static int fill_sta_info(struct remote_sta_info *sta_info, -1, sta_info->reason, sta_info->supported_mode, - sta_info->country); + sta_info->country, + sta_info->ani_level, + -1, + -1, + -1, + sta_info->roam_trigger_reason, + sta_info->roam_fail_reason, + sta_info->roam_invoke_fail_reason, + sta_info->tsf_out_of_sync_count, + sta_info->latest_tx_power, + sta_info->latest_tx_rate, + sta_info->target_power_24g_1mbps, + sta_info->target_power_24g_6mbps, + sta_info->target_power_5g_6mbps); else ret = snprintf(buf, buf_len, - "%02x:%02x:%02x:%02x:%02x:%02x %d %d %04x %02x:%02x:%02x %d %d %d %d %d %d %d %d %u %s", + "%02x:%02x:%02x:%02x:%02x:%02x %d %d %04x %02x:%02x:%02x %d %d %d %d %d %d %d %d %u %s %d %d %d %d %d %d %d %d %d %d %d %d %d", sta_info->mac_addr[0], sta_info->mac_addr[1], sta_info->mac_addr[2], sta_info->mac_addr[3], sta_info->mac_addr[4], sta_info->mac_addr[5], @@ -1051,7 +1064,20 @@ static int fill_sta_info(struct remote_sta_info *sta_info, -1, sta_info->reason, sta_info->supported_band, - sta_info->country); + sta_info->country, + sta_info->ani_level, + -1, + -1, + -1, + sta_info->roam_trigger_reason, + sta_info->roam_fail_reason, + sta_info->roam_invoke_fail_reason, + sta_info->tsf_out_of_sync_count, + sta_info->latest_tx_power, + sta_info->latest_tx_rate, + sta_info->target_power_24g_1mbps, + sta_info->target_power_24g_6mbps, + sta_info->target_power_5g_6mbps); } else { ret = snprintf(buf, buf_len, "%d %d %04x %d %d %d %d %d %d %d %d %d %s", @@ -1361,6 +1387,72 @@ static int get_sta_info_handler(struct nl_msg *msg, void *arg) wpa_printf(MSG_INFO,"tx_pkts_fw_retry_exhausted %d", g_sta_info.tx_pkts_fw_retry_exhausted); } + if (tb_vendor[GET_STA_INFO_ANI_LEVEL]) { + g_sta_info.ani_level = + nla_get_u32(tb_vendor[GET_STA_INFO_ANI_LEVEL]); + wpa_printf(MSG_INFO,"ani_level %d", g_sta_info.ani_level); + } + + if (tb_vendor[GET_STA_INFO_ROAM_TRIGGER_REASON]) { + g_sta_info.roam_trigger_reason = + nla_get_u32(tb_vendor[GET_STA_INFO_ROAM_TRIGGER_REASON]); + wpa_printf(MSG_INFO,"roam_trigger_reason %d", g_sta_info.roam_trigger_reason); + } + + if (tb_vendor[GET_STA_INFO_ROAM_FAIL_REASON]) { + g_sta_info.roam_fail_reason = + nla_get_u32(tb_vendor[GET_STA_INFO_ROAM_FAIL_REASON]); + wpa_printf(MSG_INFO,"roam_fail_reason %d", g_sta_info.roam_fail_reason); + } + + if (tb_vendor[GET_STA_INFO_ROAM_INVOKE_FAIL_REASON]) { + g_sta_info.roam_invoke_fail_reason = + nla_get_u32(tb_vendor[GET_STA_INFO_ROAM_INVOKE_FAIL_REASON]); + wpa_printf(MSG_INFO,"roam_invoke_fail_reason %d", g_sta_info.roam_invoke_fail_reason); + } + + if (tb_vendor[GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT]) { + g_sta_info.tsf_out_of_sync_count = + nla_get_u32(tb_vendor[GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT]); + wpa_printf(MSG_INFO,"tsf_out_of_sync_count %d", g_sta_info.tsf_out_of_sync_count); + } + + if (tb_vendor[GET_STA_INFO_LATEST_TX_POWER]) { + g_sta_info.latest_tx_power = + nla_get_u32(tb_vendor[GET_STA_INFO_LATEST_TX_POWER]); + wpa_printf(MSG_INFO,"latest_tx_power %d", g_sta_info.latest_tx_power); + } + + if (tb_vendor[GET_STA_INFO_LATEST_TX_RATE]) { + g_sta_info.latest_tx_rate = + nla_get_u32(tb_vendor[GET_STA_INFO_LATEST_TX_RATE]); + wpa_printf(MSG_INFO,"latest_tx_rate %d", g_sta_info.latest_tx_rate); + } + + if (tb_vendor[GET_STA_INFO_TARGET_POWER_24G_1MBPS]) { + g_sta_info.target_power_24g_1mbps = + nla_get_u32(tb_vendor[GET_STA_INFO_TARGET_POWER_24G_1MBPS]); + wpa_printf(MSG_INFO,"target_power_24g_1mbps %d", g_sta_info.target_power_24g_1mbps); + } + + if (tb_vendor[GET_STA_INFO_TARGET_POWER_24G_6MBPS]) { + g_sta_info.target_power_24g_6mbps = + nla_get_u32(tb_vendor[GET_STA_INFO_TARGET_POWER_24G_6MBPS]); + wpa_printf(MSG_INFO,"target_power_24g_6mbps %d", g_sta_info.target_power_24g_6mbps); + } + + if (tb_vendor[GET_STA_INFO_TARGET_POWER_5G_6MBPS]) { + g_sta_info.target_power_5g_6mbps = + nla_get_u32(tb_vendor[GET_STA_INFO_TARGET_POWER_5G_6MBPS]); + wpa_printf(MSG_INFO,"target_power_5g_6mbps %d", g_sta_info.target_power_5g_6mbps); + } + + if (tb_vendor[GET_STA_INFO_LATEST_RIX]) { + g_sta_info.latest_rix = + nla_get_u32(tb_vendor[GET_STA_INFO_LATEST_RIX]); + wpa_printf(MSG_INFO,"latest_rix %d", g_sta_info.latest_rix); + } + g_sta_info.num_received_vendor_sta_info++; diff --git a/qcwcn/wpa_supplicant_8_lib/qca-vendor_copy.h b/qcwcn/wpa_supplicant_8_lib/qca-vendor_copy.h index 0545cf4..8487f0d 100644 --- a/qcwcn/wpa_supplicant_8_lib/qca-vendor_copy.h +++ b/qcwcn/wpa_supplicant_8_lib/qca-vendor_copy.h @@ -4428,6 +4428,139 @@ enum qca_vendor_roam_invoke_fail_reasons { }; +/* + * enum qca_vendor_roam_fail_reasons: Defines the various roam + * fail reasons. This enum value is used in + * @QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_FAIL_REASON attribute. + * + * @QCA_ROAM_FAIL_REASON_SCAN_NOT_ALLOWED: Roam module in the firmware is not + * able to trigger the scan. + * @QCA_ROAM_FAIL_REASON_NO_AP_FOUND: No roamable APs found during roam scan. + * @QCA_ROAM_FAIL_REASON_NO_CAND_AP_FOUND: No candidate APs found during roam + * scan. + * @QCA_ROAM_FAIL_REASON_HOST: Roam fail due to disconnect issued from host. + * @QCA_ROAM_FAIL_REASON_AUTH_SEND: Unable to send Authentication frame. + * @QCA_ROAM_FAIL_REASON_AUTH_RECV: Received Authentication frame with error + * status code. + * @QCA_ROAM_FAIL_REASON_NO_AUTH_RESP: Authentication frame not received. + * @QCA_ROAM_FAIL_REASON_REASSOC_SEND: Unable to send Reassociation Request + * frame. + * @QCA_ROAM_FAIL_REASON_REASSOC_RECV: Received Reassociation Response frame + * with error status code. + * @QCA_ROAM_FAIL_REASON_NO_REASSOC_RESP: Reassociation Response frame not + * received. + * @QCA_ROAM_FAIL_REASON_SCAN_FAIL: Scan module not able to start scan. + * @QCA_ROAM_FAIL_REASON_AUTH_NO_ACK: No ACK is received for Authentication + * frame. + * @QCA_ROAM_FAIL_REASON_AUTH_INTERNAL_DROP: Authentication frame is dropped + * internally before transmission. + * @QCA_ROAM_FAIL_REASON_REASSOC_NO_ACK: No ACK is received for Reassociation + * Request frame. + * @QCA_ROAM_FAIL_REASON_REASSOC_INTERNAL_DROP: Reassociation Request frame is + * dropped internally. + * @QCA_ROAM_FAIL_REASON_EAPOL_M1_TIMEOUT: EAPOL-Key M1 is not received and + * times out. + * @QCA_ROAM_FAIL_REASON_EAPOL_M2_SEND: Unable to send EAPOL-Key M2 frame. + * @QCA_ROAM_FAIL_REASON_EAPOL_M2_INTERNAL_DROP: EAPOL-Key M2 frame dropped + * internally. + * @QCA_ROAM_FAIL_REASON_EAPOL_M2_NO_ACK: No ACK is received for EAPOL-Key + * M2 frame. + * @QCA_ROAM_FAIL_REASON_EAPOL_M3_TIMEOUT: EAPOL-Key M3 frame is not received. + * @QCA_ROAM_FAIL_REASON_EAPOL_M4_SEND: Unable to send EAPOL-Key M4 frame. + * @QCA_ROAM_FAIL_REASON_EAPOL_M4_INTERNAL_DROP: EAPOL-Key M4 frame dropped + * internally. + * @QCA_ROAM_FAIL_REASON_EAPOL_M4_NO_ACK: No ACK is received for EAPOL-Key M4 + * frame. + * @QCA_ROAM_FAIL_REASON_NO_SCAN_FOR_FINAL_BEACON_MISS: Roam scan is not + * started for final beacon miss case. + * @QCA_ROAM_FAIL_REASON_DISCONNECT: Deauthentication or Disassociation frame + * received from the AP during roaming handoff. + * @QCA_ROAM_FAIL_REASON_RESUME_ABORT: Firmware roams to the AP when the Apps + * or host is suspended and gives the indication of the last roamed AP only + * when the Apps is resumed. If the Apps is resumed while the roaming is in + * progress, this ongoing roaming is aborted and the last roamed AP is + * indicated to host. + * @QCA_ROAM_FAIL_REASON_SAE_INVALID_PMKID: WPA3-SAE invalid PMKID. + * @QCA_ROAM_FAIL_REASON_SAE_PREAUTH_TIMEOUT: WPA3-SAE pre-authentication times + * out. + * @QCA_ROAM_FAIL_REASON_SAE_PREAUTH_FAIL: WPA3-SAE pre-authentication fails. + */ +enum qca_vendor_roam_fail_reasons { + QCA_ROAM_FAIL_REASON_NONE = 0, + QCA_ROAM_FAIL_REASON_SCAN_NOT_ALLOWED = 1, + QCA_ROAM_FAIL_REASON_NO_AP_FOUND = 2, + QCA_ROAM_FAIL_REASON_NO_CAND_AP_FOUND = 3, + QCA_ROAM_FAIL_REASON_HOST = 4, + QCA_ROAM_FAIL_REASON_AUTH_SEND = 5, + QCA_ROAM_FAIL_REASON_AUTH_RECV = 6, + QCA_ROAM_FAIL_REASON_NO_AUTH_RESP = 7, + QCA_ROAM_FAIL_REASON_REASSOC_SEND = 8, + QCA_ROAM_FAIL_REASON_REASSOC_RECV = 9, + QCA_ROAM_FAIL_REASON_NO_REASSOC_RESP = 10, + QCA_ROAM_FAIL_REASON_SCAN_FAIL = 11, + QCA_ROAM_FAIL_REASON_AUTH_NO_ACK = 12, + QCA_ROAM_FAIL_REASON_AUTH_INTERNAL_DROP = 13, + QCA_ROAM_FAIL_REASON_REASSOC_NO_ACK = 14, + QCA_ROAM_FAIL_REASON_REASSOC_INTERNAL_DROP = 15, + QCA_ROAM_FAIL_REASON_EAPOL_M1_TIMEOUT = 16, + QCA_ROAM_FAIL_REASON_EAPOL_M2_SEND = 17, + QCA_ROAM_FAIL_REASON_EAPOL_M2_INTERNAL_DROP = 18, + QCA_ROAM_FAIL_REASON_EAPOL_M2_NO_ACK = 19, + QCA_ROAM_FAIL_REASON_EAPOL_M3_TIMEOUT = 20, + QCA_ROAM_FAIL_REASON_EAPOL_M4_SEND = 21, + QCA_ROAM_FAIL_REASON_EAPOL_M4_INTERNAL_DROP = 22, + QCA_ROAM_FAIL_REASON_EAPOL_M4_NO_ACK = 23, + QCA_ROAM_FAIL_REASON_NO_SCAN_FOR_FINAL_BEACON_MISS = 24, + QCA_ROAM_FAIL_REASON_DISCONNECT = 25, + QCA_ROAM_FAIL_REASON_RESUME_ABORT = 26, + QCA_ROAM_FAIL_REASON_SAE_INVALID_PMKID = 27, + QCA_ROAM_FAIL_REASON_SAE_PREAUTH_TIMEOUT = 28, + QCA_ROAM_FAIL_REASON_SAE_PREAUTH_FAIL = 29, +}; + +/* + * enum qca_vendor_roam_invoke_fail_reasons: Defines the various roam + * invoke fail reasons. This enum value is used in + * @QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_INVOKE_FAIL_REASON attribute. + * + * @QCA_ROAM_INVOKE_STATUS_IFACE_INVALID: Invalid interface ID is passed + * in roam invoke command. + * @QCA_ROAM_INVOKE_STATUS_OFFLOAD_DISABLE: Roam offload in firmware is not + * enabled. + * @QCA_ROAM_INVOKE_STATUS_AP_SSID_LENGTH_INVALID: Connected AP profile SSID + * length is invalid. + * @QCA_ROAM_INVOKE_STATUS_ROAM_DISALLOW: Firmware internal roaming is already + * in progress. + * @QCA_ROAM_INVOKE_STATUS_NON_ROAMABLE_AP: Host sends the Beacon/Probe Response + * of the AP in the roam invoke command to firmware. This reason is sent by the + * firmware when the given AP is configured to be ignored or SSID/security + * does not match. + * @QCA_ROAM_INVOKE_STATUS_ROAM_INTERNAL_FAIL: Roam handoff failed because of + * firmware internal reasons. + * @QCA_ROAM_INVOKE_STATUS_DISALLOW: Roam invoke trigger is not enabled. + * @QCA_ROAM_INVOKE_STATUS_SCAN_FAIL: Scan start fail for roam invoke. + * @QCA_ROAM_INVOKE_STATUS_START_ROAM_FAIL: Roam handoff start fail. + * @QCA_ROAM_INVOKE_STATUS_INVALID_PARAMS: Roam invoke parameters are invalid. + * @QCA_ROAM_INVOKE_STATUS_NO_CAND_AP: No candidate AP found to roam to. + * @QCA_ROAM_INVOKE_STATUS_ROAM_FAIL: Roam handoff failed. + */ +enum qca_vendor_roam_invoke_fail_reasons { + QCA_ROAM_INVOKE_STATUS_NONE = 0, + QCA_ROAM_INVOKE_STATUS_IFACE_INVALID = 1, + QCA_ROAM_INVOKE_STATUS_OFFLOAD_DISABLE = 2, + QCA_ROAM_INVOKE_STATUS_AP_SSID_LENGTH_INVALID = 3, + QCA_ROAM_INVOKE_STATUS_ROAM_DISALLOW = 4, + QCA_ROAM_INVOKE_STATUS_NON_ROAMABLE_AP = 5, + QCA_ROAM_INVOKE_STATUS_ROAM_INTERNAL_FAIL = 6, + QCA_ROAM_INVOKE_STATUS_DISALLOW = 7, + QCA_ROAM_INVOKE_STATUS_SCAN_FAIL = 8, + QCA_ROAM_INVOKE_STATUS_START_ROAM_FAIL = 9, + QCA_ROAM_INVOKE_STATUS_INVALID_PARAMS = 10, + QCA_ROAM_INVOKE_STATUS_NO_CAND_AP = 11, + QCA_ROAM_INVOKE_STATUS_ROAM_FAIL = 12, + +}; + /** * enum qca_vendor_attr_roam_candidate_selection_criteria: * diff --git a/qcwcn/wpa_supplicant_8_lib/wpa_driver_common_lib.h b/qcwcn/wpa_supplicant_8_lib/wpa_driver_common_lib.h index 572bf81..71861aa 100644 --- a/qcwcn/wpa_supplicant_8_lib/wpa_driver_common_lib.h +++ b/qcwcn/wpa_supplicant_8_lib/wpa_driver_common_lib.h @@ -97,6 +97,28 @@ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_RETRY #define GET_STA_INFO_TARGET_TX_RETRY_EXHAUSTED \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_RETRY_EXHAUSTED +#define GET_STA_INFO_ANI_LEVEL \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ANI_LEVEL +#define GET_STA_INFO_LATEST_TX_RATE \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_RATE +#define GET_STA_INFO_LATEST_RIX \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_RIX +#define GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT +#define GET_STA_INFO_LATEST_TX_POWER \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_POWER +#define GET_STA_INFO_ROAM_TRIGGER_REASON \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_TRIGGER_REASON +#define GET_STA_INFO_TARGET_POWER_24G_1MBPS \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_1MBPS +#define GET_STA_INFO_TARGET_POWER_24G_6MBPS \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_6MBPS +#define GET_STA_INFO_TARGET_POWER_5G_6MBPS \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_5G_6MBPS +#define GET_STA_INFO_ROAM_FAIL_REASON \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_FAIL_REASON +#define GET_STA_INFO_ROAM_INVOKE_FAIL_REASON \ + QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_INVOKE_FAIL_REASON #define GET_STA_INFO_MAX \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_MAX @@ -326,6 +348,17 @@ struct remote_sta_info { u32 tx_pkts_fw_total; u32 tx_pkts_fw_retries; u32 tx_pkts_fw_retry_exhausted; + u32 ani_level; + u32 roam_trigger_reason; + u32 roam_fail_reason; + u32 roam_invoke_fail_reason; + u32 tsf_out_of_sync_count; + u32 latest_tx_power; + u32 latest_tx_rate; + u32 latest_rix; + u32 target_power_24g_1mbps; + u32 target_power_24g_6mbps; + u32 target_power_5g_6mbps; u8 *supp_op_classes; /* Supported Operating Classes element, if * received, starting from the Length field */ u8 *supp_channels; |