diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index e81431e8de..d9cd41acb9 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/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); diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 5cb50400c5..ab363d7e35 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/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);