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
This commit is contained in:
Sai Rupesh Chevuru
2023-04-21 15:12:06 +05:30
committed by Madan Koyyalamudi
parent e663fa7cd3
commit cdbbebd6f8
3 changed files with 8 additions and 5 deletions

View File

@@ -759,6 +759,12 @@ dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev,
&msdu_info, nbuf_clone, DP_INVALID_PEER); &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)); qdf_mem_zero(&msdu_info, sizeof(msdu_info));
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue); dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
msdu_info.gsn = be_vdev->seq_num; msdu_info.gsn = be_vdev->seq_num;

View File

@@ -2263,8 +2263,6 @@ dp_tx_update_mcast_param(uint16_t peer_id,
msdu_info->gsn); msdu_info->gsn);
msdu_info->vdev_id = vdev->vdev_id + DP_MLO_VDEV_ID_OFFSET; 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); *htt_tcl_metadata, 1);
} else { } else {
@@ -3803,7 +3801,6 @@ qdf_nbuf_t dp_tx_send_vdev_id_check(struct cdp_soc_t *soc_hdl,
* *
* Return: status * Return: status
*/ */
static inline
int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf)
{ {
if (vdev->osif_proxy_arp) 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; return QDF_STATUS_NOT_INITIALIZED;
} }
#else #else
static inline
int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf) int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;

View File

@@ -48,6 +48,7 @@
void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev, void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev,
struct dp_tx_msdu_info_s *msdu_info, struct dp_tx_msdu_info_s *msdu_info,
qdf_nbuf_t nbuf, uint16_t sa_peer_id); 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 * DP_TX_DESC_FLAG_FRAG flags should always be defined to 0x1
* please do not change this flag's definition * please do not change this flag's definition