Prechádzať zdrojové kódy

qcacmn: Fix NAWDS mcast loopback issue in intraBSS

For NAWDS intraBSS mcast traffic add check for SA
and DA peer to avoid loopback

Change-Id: Ifb987dbfe6d6f427cd8873315d4ffd67390b4e6f
Chaithanya Garrepalli 3 rokov pred
rodič
commit
2c1ccc9baf
2 zmenil súbory, kde vykonal 11 pridanie a 7 odobranie
  1. 2 0
      dp/wifi3.0/dp_rx.c
  2. 9 7
      dp/wifi3.0/dp_tx.c

+ 2 - 0
dp/wifi3.0/dp_rx.c

@@ -545,6 +545,8 @@ bool dp_rx_intrabss_mcbc_fwd(struct dp_soc *soc, struct dp_peer *ta_peer,
 		return false;
 
 	len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
+	qdf_nbuf_set_tx_fctx_type(nbuf_copy, &ta_peer->peer_id,
+				  CB_FTYPE_INTRABSS_FWD);
 	if (dp_tx_send((struct cdp_soc_t *)soc,
 		       ta_peer->vdev->vdev_id, nbuf_copy)) {
 		DP_STATS_INC_PKT(ta_peer, rx.intra_bss.fail, 1, len);

+ 9 - 7
dp/wifi3.0/dp_tx.c

@@ -3001,6 +3001,10 @@ void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev,
 		if (ast_entry)
 			sa_peer_id = ast_entry->peer_id;
 		qdf_spin_unlock_bh(&soc->ast_lock);
+	} else {
+		if ((qdf_nbuf_get_tx_ftype(nbuf) == CB_FTYPE_INTRABSS_FWD) &&
+		    qdf_nbuf_get_tx_fctx(nbuf))
+			sa_peer_id = *(uint32_t *)qdf_nbuf_get_tx_fctx(nbuf);
 	}
 
 	qdf_spin_lock_bh(&vdev->peer_list_lock);
@@ -3010,13 +3014,11 @@ void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev,
 			/* Multicast packets needs to be
 			 * dropped in case of intra bss forwarding
 			 */
-			if (!soc->ast_offload_support) {
-				if (sa_peer_id == peer->peer_id) {
-					dp_tx_debug("multicast packet");
-					DP_STATS_INC(peer, tx.nawds_mcast_drop,
-						     1);
-					continue;
-				}
+			if (sa_peer_id == peer->peer_id) {
+				dp_tx_debug("multicast packet");
+				DP_STATS_INC(peer, tx.nawds_mcast_drop,
+					     1);
+				continue;
 			}
 
 			nbuf_clone = qdf_nbuf_clone(nbuf);