Browse Source

qcacmn: Avoid intrabss when da_peer is same as ta_peer

In case when transmitter peer is same as destination
peer avoid intrabss

Change-Id: Ia6d744a68380e57f73d52b81429c0ffe66481716
CRs-Fixed: 3400126
Chaithanya Garrepalli 2 years ago
parent
commit
e614273c12
1 changed files with 14 additions and 0 deletions
  1. 14 0
      dp/wifi3.0/be/dp_be_rx.c

+ 14 - 0
dp/wifi3.0/be/dp_be_rx.c

@@ -1368,10 +1368,24 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
 		dp_get_be_vdev_from_dp_vdev(ta_peer->vdev);
 	struct dp_soc_be *be_soc =
 		dp_get_be_soc_from_dp_soc(params->dest_soc);
+	uint16_t da_peer_id;
+	struct dp_peer *da_peer = NULL;
 
 	if (!qdf_nbuf_is_intra_bss(nbuf))
 		return false;
 
+	da_peer_id = HAL_RX_PEER_ID_GET(msdu_metadata);
+
+	da_peer = dp_peer_get_tgt_peer_by_id(&be_soc->soc, da_peer_id,
+					     DP_MOD_ID_RX);
+	if (da_peer) {
+		if (da_peer->bss_peer || (da_peer->txrx_peer == ta_peer)) {
+			dp_peer_unref_delete(da_peer, DP_MOD_ID_RX);
+			return false;
+		}
+		dp_peer_unref_delete(da_peer, DP_MOD_ID_RX);
+	}
+
 	hal_rx_tlv_get_dest_chip_pmac_id(rx_tlv_hdr,
 					 &dest_chip_id,
 					 &dest_chip_pmac_id);