diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 6c88c505828a..90daa6ceadd5 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -692,13 +692,25 @@ dp_rx_err_deliver(struct dp_soc *soc, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr) peer_id = hal_rx_mpdu_start_sw_peer_id_get(rx_tlv_hdr); peer = dp_peer_find_by_id(soc, peer_id); + l2_hdr_offset = hal_rx_msdu_end_l3_hdr_padding_get(rx_tlv_hdr); + msdu_len = hal_rx_msdu_start_msdu_len_get(rx_tlv_hdr); + pkt_len = msdu_len + l2_hdr_offset + RX_PKT_TLVS_LEN; + + /* Set length in nbuf */ + qdf_nbuf_set_pktlen(nbuf, pkt_len); + + qdf_nbuf_set_next(nbuf, NULL); + + qdf_nbuf_set_rx_chfrag_start(nbuf, 1); + qdf_nbuf_set_rx_chfrag_end(nbuf, 1); + if (!peer) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("peer is NULL")); DP_STATS_INC_PKT(soc, rx.err.rx_invalid_peer, 1, qdf_nbuf_len(nbuf)); - /* Drop & free packet */ - qdf_nbuf_free(nbuf); + /* Trigger invalid peer handler wrapper */ + dp_rx_process_invalid_peer_wrapper(soc, nbuf, true); return; } @@ -719,23 +731,12 @@ dp_rx_err_deliver(struct dp_soc *soc, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr) return; } - l2_hdr_offset = hal_rx_msdu_end_l3_hdr_padding_get(rx_tlv_hdr); - msdu_len = hal_rx_msdu_start_msdu_len_get(rx_tlv_hdr); - pkt_len = msdu_len + l2_hdr_offset + RX_PKT_TLVS_LEN; - - /* Set length in nbuf */ - qdf_nbuf_set_pktlen(nbuf, pkt_len); - - qdf_nbuf_set_next(nbuf, NULL); - /* * Advance the packet start pointer by total size of * pre-header TLV's */ qdf_nbuf_pull_head(nbuf, (l2_hdr_offset + RX_PKT_TLVS_LEN)); - qdf_nbuf_set_rx_chfrag_start(nbuf, 1); - qdf_nbuf_set_rx_chfrag_end(nbuf, 1); if (dp_rx_filter_mesh_packets(vdev, nbuf, rx_tlv_hdr) == QDF_STATUS_SUCCESS) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO_MED,