From cdbbebd6f8ca1bd85062bac79f9a45fccc11cfd4 Mon Sep 17 00:00:00 2001 From: Sai Rupesh Chevuru Date: Fri, 21 Apr 2023 15:12:06 +0530 Subject: [PATCH] qcacmn: handling of mcast in proxy arp along with MLO MCAST handling multicast packets in the case of proxy arp along with MLO MCAST. 1. stamp the host inspected bit for GSN based packets. 2. trigger dp_tx_proxy_arp from the reinject handler. Change-Id: I8aea1e4fd4e61f4cc6a5dd6d8b5151c1a9bf2fac CRs-Fixed: 3465975 --- dp/wifi3.0/be/dp_be_tx.c | 6 ++++++ dp/wifi3.0/dp_tx.c | 6 +----- dp/wifi3.0/dp_tx.h | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/dp/wifi3.0/be/dp_be_tx.c b/dp/wifi3.0/be/dp_be_tx.c index c85057f666..ee58e734c5 100644 --- a/dp/wifi3.0/be/dp_be_tx.c +++ b/dp/wifi3.0/be/dp_be_tx.c @@ -759,6 +759,12 @@ dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev, &msdu_info, nbuf_clone, DP_INVALID_PEER); } + if (qdf_unlikely(dp_tx_proxy_arp(ptnr_vdev, nbuf_clone) != + QDF_STATUS_SUCCESS)) { + qdf_nbuf_free(nbuf_clone); + return; + } + qdf_mem_zero(&msdu_info, sizeof(msdu_info)); dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue); msdu_info.gsn = be_vdev->seq_num; diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 0e96cc057c..bf792282e6 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -2263,9 +2263,7 @@ dp_tx_update_mcast_param(uint16_t peer_id, msdu_info->gsn); msdu_info->vdev_id = vdev->vdev_id + DP_MLO_VDEV_ID_OFFSET; - if (qdf_unlikely(vdev->nawds_enabled || - dp_vdev_is_wds_ext_enabled(vdev))) - HTT_TX_TCL_METADATA_GLBL_SEQ_HOST_INSPECTED_SET( + HTT_TX_TCL_METADATA_GLBL_SEQ_HOST_INSPECTED_SET( *htt_tcl_metadata, 1); } else { msdu_info->vdev_id = vdev->vdev_id; @@ -3803,7 +3801,6 @@ qdf_nbuf_t dp_tx_send_vdev_id_check(struct cdp_soc_t *soc_hdl, * * Return: status */ -static inline int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) { if (vdev->osif_proxy_arp) @@ -3819,7 +3816,6 @@ int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) return QDF_STATUS_NOT_INITIALIZED; } #else -static inline int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) { return QDF_STATUS_SUCCESS; diff --git a/dp/wifi3.0/dp_tx.h b/dp/wifi3.0/dp_tx.h index 379134b3dc..9c8da606cc 100644 --- a/dp/wifi3.0/dp_tx.h +++ b/dp/wifi3.0/dp_tx.h @@ -48,6 +48,7 @@ void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev, struct dp_tx_msdu_info_s *msdu_info, qdf_nbuf_t nbuf, uint16_t sa_peer_id); +int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf); /* * DP_TX_DESC_FLAG_FRAG flags should always be defined to 0x1 * please do not change this flag's definition