|
@@ -2219,7 +2219,8 @@ lim_copy_and_free_hlp_data_from_session(struct pe_session *session_ptr,
|
|
|
QDF_STATUS
|
|
|
pe_disconnect_callback(struct mac_context *mac, uint8_t vdev_id,
|
|
|
uint8_t *deauth_disassoc_frame,
|
|
|
- uint16_t deauth_disassoc_frame_len)
|
|
|
+ uint16_t deauth_disassoc_frame_len,
|
|
|
+ uint16_t reason_code)
|
|
|
{
|
|
|
struct pe_session *session;
|
|
|
|
|
@@ -2229,10 +2230,18 @@ pe_disconnect_callback(struct mac_context *mac, uint8_t vdev_id,
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
|
- lim_extract_ies_from_deauth_disassoc(session, deauth_disassoc_frame,
|
|
|
- deauth_disassoc_frame_len);
|
|
|
+ if (deauth_disassoc_frame &&
|
|
|
+ deauth_disassoc_frame_len > SIR_MAC_MIN_IE_LEN) {
|
|
|
+ lim_extract_ies_from_deauth_disassoc(session,
|
|
|
+ deauth_disassoc_frame,
|
|
|
+ deauth_disassoc_frame_len);
|
|
|
+
|
|
|
+ reason_code = sir_read_u16(deauth_disassoc_frame +
|
|
|
+ sizeof(struct wlan_frame_hdr));
|
|
|
+ }
|
|
|
+
|
|
|
lim_tear_down_link_with_ap(mac, session->peSessionId,
|
|
|
- eSIR_MAC_UNSPEC_FAILURE_REASON);
|
|
|
+ reason_code);
|
|
|
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|