|
@@ -4609,6 +4609,41 @@ struct hdd_station_info *hdd_get_stainfo(struct hdd_station_info *astainfo,
|
|
|
#endif
|
|
|
|
|
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
|
|
+
|
|
|
+/**
|
|
|
+ * hdd_get_roam_reason() - convert wmi roam reason to
|
|
|
+ * enum qca_roam_reason
|
|
|
+ * @roam_scan_trigger: wmi roam scan trigger ID
|
|
|
+ *
|
|
|
+ * Return: Meaningful qca_roam_reason from enum WMI_ROAM_TRIGGER_REASON_ID
|
|
|
+ */
|
|
|
+static enum qca_roam_reason hdd_get_roam_reason(uint16_t roam_scan_trigger)
|
|
|
+{
|
|
|
+ switch (roam_scan_trigger) {
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_PER:
|
|
|
+ return QCA_ROAM_REASON_PER;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_BMISS:
|
|
|
+ return QCA_ROAM_REASON_BEACON_MISS;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_LOW_RSSI:
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_BACKGROUND:
|
|
|
+ return QCA_ROAM_REASON_POOR_RSSI;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_HIGH_RSSI:
|
|
|
+ return QCA_ROAM_REASON_BETTER_RSSI;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_DENSE:
|
|
|
+ return QCA_ROAM_REASON_CONGESTION;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_FORCED:
|
|
|
+ return QCA_ROAM_REASON_USER_TRIGGER;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_BTM:
|
|
|
+ return QCA_ROAM_REASON_BTM;
|
|
|
+ case WMI_ROAM_TRIGGER_REASON_BSS_LOAD:
|
|
|
+ return QCA_ROAM_REASON_BSS_LOAD;
|
|
|
+ default:
|
|
|
+ return QCA_ROAM_REASON_UNKNOWN;
|
|
|
+ }
|
|
|
+
|
|
|
+ return QCA_ROAM_REASON_UNKNOWN;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* __wlan_hdd_cfg80211_keymgmt_set_key() - Store the Keys in the driver session
|
|
|
* @wiphy: pointer to wireless wiphy structure.
|
|
@@ -5089,6 +5124,7 @@ int wlan_hdd_send_roam_auth_event(struct hdd_adapter *adapter, uint8_t *bssid,
|
|
|
eCsrAuthType auth_type;
|
|
|
uint32_t fils_params_len;
|
|
|
int status;
|
|
|
+ enum qca_roam_reason hdd_roam_reason;
|
|
|
|
|
|
hdd_enter();
|
|
|
|
|
@@ -5114,8 +5150,8 @@ int wlan_hdd_send_roam_auth_event(struct hdd_adapter *adapter, uint8_t *bssid,
|
|
|
ETH_ALEN + req_rsn_len + rsp_rsn_len +
|
|
|
sizeof(uint8_t) + SIR_REPLAY_CTR_LEN +
|
|
|
SIR_KCK_KEY_LEN + roam_info_ptr->kek_len +
|
|
|
- sizeof(uint8_t) + (8 * NLMSG_HDRLEN) +
|
|
|
- fils_params_len,
|
|
|
+ sizeof(uint16_t) + sizeof(uint8_t) +
|
|
|
+ (9 * NLMSG_HDRLEN) + fils_params_len,
|
|
|
QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX,
|
|
|
GFP_KERNEL);
|
|
|
|
|
@@ -5169,6 +5205,15 @@ int wlan_hdd_send_roam_auth_event(struct hdd_adapter *adapter, uint8_t *bssid,
|
|
|
goto nla_put_failure;
|
|
|
}
|
|
|
|
|
|
+ hdd_roam_reason =
|
|
|
+ hdd_get_roam_reason(roam_info_ptr->roam_reason);
|
|
|
+
|
|
|
+ if (nla_put_u16(skb, QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_REASON,
|
|
|
+ hdd_roam_reason)) {
|
|
|
+ hdd_err("roam reason send failure");
|
|
|
+ goto nla_put_failure;
|
|
|
+ }
|
|
|
+
|
|
|
status = wlan_hdd_add_fils_params_roam_auth_event(skb,
|
|
|
roam_info_ptr);
|
|
|
if (status)
|