Ver código fonte

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
Sai Rupesh Chevuru 2 anos atrás
pai
commit
cdbbebd6f8
3 arquivos alterados com 8 adições e 5 exclusões
  1. 6 0
      dp/wifi3.0/be/dp_be_tx.c
  2. 1 5
      dp/wifi3.0/dp_tx.c
  3. 1 0
      dp/wifi3.0/dp_tx.h

+ 6 - 0
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;

+ 1 - 5
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;

+ 1 - 0
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