|
@@ -1066,9 +1066,10 @@ QDF_STATUS tgt_mgmt_txrx_rx_frame_handler(
|
|
|
mgmt_type = (wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
|
|
|
mgmt_subtype = (wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
|
|
|
|
|
|
- if (mgmt_type != IEEE80211_FC0_TYPE_MGT) {
|
|
|
- mgmt_txrx_err("Rx event doesn't conatin a mgmt. packet, %d",
|
|
|
- mgmt_type);
|
|
|
+ if (mgmt_type != IEEE80211_FC0_TYPE_MGT &&
|
|
|
+ mgmt_type != IEEE80211_FC0_TYPE_CTL) {
|
|
|
+ mgmt_txrx_err("Rx event doesn't contain a mgmt/ctrl packet, %d",
|
|
|
+ mgmt_type);
|
|
|
qdf_nbuf_free(buf);
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
@@ -1086,7 +1087,8 @@ QDF_STATUS tgt_mgmt_txrx_rx_frame_handler(
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
|
- if ((mgmt_subtype == MGMT_SUBTYPE_BEACON ||
|
|
|
+ if (mgmt_type == IEEE80211_FC0_TYPE_MGT &&
|
|
|
+ (mgmt_subtype == MGMT_SUBTYPE_BEACON ||
|
|
|
mgmt_subtype == MGMT_SUBTYPE_PROBE_RESP) &&
|
|
|
!(is_from_addr_valid && is_bssid_valid)) {
|
|
|
mgmt_txrx_debug_rl("from addr "QDF_MAC_ADDR_FMT" bssid addr "QDF_MAC_ADDR_FMT" not valid, modifying them",
|
|
@@ -1144,15 +1146,21 @@ QDF_STATUS tgt_mgmt_txrx_rx_frame_handler(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- frm_type = mgmt_txrx_get_frm_type(mgmt_subtype, mpdu_data_ptr);
|
|
|
- if (frm_type == MGMT_FRM_UNSPECIFIED) {
|
|
|
- mgmt_txrx_debug_rl("Unspecified mgmt frame type fc: %x %x",
|
|
|
- wh->i_fc[0], wh->i_fc[1]);
|
|
|
- qdf_nbuf_free(buf);
|
|
|
- return QDF_STATUS_E_FAILURE;
|
|
|
+ if (mgmt_type == IEEE80211_FC0_TYPE_MGT) {
|
|
|
+ frm_type = mgmt_txrx_get_frm_type(mgmt_subtype, mpdu_data_ptr);
|
|
|
+ if (frm_type == MGMT_FRM_UNSPECIFIED) {
|
|
|
+ mgmt_txrx_debug_rl(
|
|
|
+ "Unspecified mgmt frame type fc: %x %x", wh->i_fc[0],
|
|
|
+ wh->i_fc[1]);
|
|
|
+ qdf_nbuf_free(buf);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ frm_type = MGMT_CTRL_FRAME;
|
|
|
}
|
|
|
|
|
|
- if (!(mgmt_subtype == MGMT_SUBTYPE_BEACON ||
|
|
|
+ if (mgmt_type == IEEE80211_FC0_TYPE_MGT &&
|
|
|
+ !(mgmt_subtype == MGMT_SUBTYPE_BEACON ||
|
|
|
mgmt_subtype == MGMT_SUBTYPE_PROBE_RESP ||
|
|
|
mgmt_subtype == MGMT_SUBTYPE_PROBE_REQ))
|
|
|
mgmt_txrx_debug("Rcvd mgmt frame subtype %x (frame type %u) from "QDF_MAC_ADDR_FMT", seq_num = %d, rssi = %d tsf_delta: %u",
|
|
@@ -1181,14 +1189,18 @@ QDF_STATUS tgt_mgmt_txrx_rx_frame_handler(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- rx_handler = mgmt_txrx_psoc_ctx->mgmt_rx_comp_cb[MGMT_FRAME_TYPE_ALL];
|
|
|
- if (rx_handler) {
|
|
|
- status = wlan_mgmt_txrx_rx_handler_list_copy(rx_handler,
|
|
|
- &rx_handler_head, &rx_handler_tail);
|
|
|
- if (status != QDF_STATUS_SUCCESS) {
|
|
|
- qdf_spin_unlock_bh(&mgmt_txrx_psoc_ctx->mgmt_txrx_psoc_ctx_lock);
|
|
|
- qdf_nbuf_free(buf);
|
|
|
- goto rx_handler_mem_free;
|
|
|
+ if (mgmt_type == IEEE80211_FC0_TYPE_MGT) {
|
|
|
+ rx_handler =
|
|
|
+ mgmt_txrx_psoc_ctx->mgmt_rx_comp_cb[MGMT_FRAME_TYPE_ALL];
|
|
|
+ if (rx_handler) {
|
|
|
+ status = wlan_mgmt_txrx_rx_handler_list_copy(
|
|
|
+ rx_handler, &rx_handler_head, &rx_handler_tail);
|
|
|
+ if (status != QDF_STATUS_SUCCESS) {
|
|
|
+ qdf_spin_unlock_bh(
|
|
|
+ &mgmt_txrx_psoc_ctx->mgmt_txrx_psoc_ctx_lock);
|
|
|
+ qdf_nbuf_free(buf);
|
|
|
+ goto rx_handler_mem_free;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|