Browse Source

qcacmn: Support mgmt packet peer filter based on mac address

RA mac address is used to support tx capture mgmt peer filter.

Change-Id: I895034723d4b75557ad33f55adc017d1caa3a40d
nobelj 5 năm trước cách đây
mục cha
commit
7cc67e504f

+ 1 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -1188,6 +1188,7 @@ enum cdp_tx_enh_capture_mode {
 	CDP_TX_ENH_CAPTURE_DISABLED = 0,
 	CDP_TX_ENH_CAPTURE_ENABLE_ALL_PEERS,
 	CDP_TX_ENH_CAPTURE_ENDIS_PER_PEER,
+	CDP_TX_ENH_CAPTURE_MAX,
 };
 
 /*

+ 2 - 3
dp/inc/cdp_txrx_ctrl.h

@@ -906,7 +906,7 @@ static inline QDF_STATUS
 cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc,
 				   uint8_t pdev_id,
 				   bool is_rx_pkt_cap_enable,
-				   bool is_tx_pkt_cap_enable,
+				   uint8_t is_tx_pkt_cap_enable,
 				   uint8_t *peer_mac)
 {
 	if (!soc || !soc->ops) {
@@ -921,8 +921,7 @@ cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc,
 
 	return soc->ops->ctrl_ops->txrx_update_peer_pkt_capture_params
 			(soc, pdev_id, is_rx_pkt_cap_enable,
-			 is_tx_pkt_cap_enable,
-			 peer_mac);
+			 is_tx_pkt_cap_enable, peer_mac);
 }
 #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
 

+ 1 - 1
dp/inc/cdp_txrx_ops.h

@@ -704,7 +704,7 @@ struct cdp_ctrl_ops {
 #if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
 	QDF_STATUS (*txrx_update_peer_pkt_capture_params)(
 			ol_txrx_soc_handle soc, uint8_t pdev_id,
-			bool is_rx_pkt_cap_enable, bool is_tx_pkt_cap_enable,
+			bool is_rx_pkt_cap_enable, uint8_t is_tx_pkt_cap_enable,
 			uint8_t *peer_mac);
 #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
 	QDF_STATUS

+ 13 - 0
dp/wifi3.0/dp_internal.h

@@ -1802,6 +1802,19 @@ void dp_print_pdev_tx_capture_stats(struct dp_pdev *pdev)
 {
 }
 
+/*
+ * dp_peer_tx_capture_filter_check: check filter is enable for the filter
+ * and update tx_cap_enabled flag
+ * @pdev: DP PDEV handle
+ * @peer: DP PEER handle
+ *
+ * return: void
+ */
+static inline
+void dp_peer_tx_capture_filter_check(struct dp_pdev *pdev,
+				     struct dp_peer *peer)
+{
+}
 #endif
 
 #ifdef FEATURE_PERPKT_INFO

+ 27 - 10
dp/wifi3.0/dp_main.c

@@ -5581,6 +5581,12 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 		DP_STATS_INIT(peer);
 		DP_STATS_UPD(peer, rx.avg_rssi, INVALID_RSSI);
 
+		/*
+		 * In tx_monitor mode, filter may be set for unassociated peer
+		 * when unassociated peer get associated peer need to
+		 * update tx_cap_enabled flag to support peer filter.
+		 */
+		dp_peer_tx_capture_filter_check(pdev, peer);
 		return QDF_STATUS_SUCCESS;
 	} else {
 		/*
@@ -5704,6 +5710,14 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 						peer_cookie.ctx;
 		}
 	}
+
+	/*
+	 * In tx_monitor mode, filter may be set for unassociated peer
+	 * when unassociated peer get associated peer need to
+	 * update tx_cap_enabled flag to support peer filter.
+	 */
+	dp_peer_tx_capture_filter_check(pdev, peer);
+
 	return QDF_STATUS_SUCCESS;
 }
 
@@ -8399,7 +8413,8 @@ static QDF_STATUS dp_get_psoc_param(struct cdp_soc_t *cdp_soc,
  * @soc: DP_SOC handle
  * @pdev_id: id of DP_PDEV handle
  * @is_rx_pkt_cap_enable: enable/disable Rx packet capture in monitor mode
- * @is_tx_pkt_cap_enable: enable/disable Tx packet capture in monitor mode
+ * @is_tx_pkt_cap_enable: enable/disable/delete/print
+ * Tx packet capture in monitor mode
  * @peer_mac: MAC address for which the above need to be enabled/disabled
  *
  * Return: Success if Rx & Tx capture is enabled for peer, false otherwise
@@ -8408,28 +8423,30 @@ QDF_STATUS
 dp_peer_update_pkt_capture_params(ol_txrx_soc_handle soc,
 				  uint8_t pdev_id,
 				  bool is_rx_pkt_cap_enable,
-				  bool is_tx_pkt_cap_enable,
+				  uint8_t is_tx_pkt_cap_enable,
 				  uint8_t *peer_mac)
 {
+	QDF_STATUS status;
 	struct dp_peer *peer;
 	struct dp_pdev *pdev =
 		dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
 						   pdev_id);
-
 	if (!pdev)
 		return QDF_STATUS_E_FAILURE;
 
 	peer = (struct dp_peer *)dp_find_peer_by_addr((struct cdp_pdev *)pdev,
 						      peer_mac);
-	if (!peer) {
-		dp_err("Invalid Peer");
-		return QDF_STATUS_E_FAILURE;
-	}
 
-	dp_peer_set_rx_capture_enabled(peer, is_rx_pkt_cap_enable);
-	dp_peer_set_tx_capture_enabled(peer, is_tx_pkt_cap_enable);
+	/* we need to set tx pkt capture for non associated peer */
+	status = dp_peer_set_tx_capture_enabled(pdev, peer,
+						is_tx_pkt_cap_enable,
+						peer_mac);
 
-	return QDF_STATUS_SUCCESS;
+	status = dp_peer_set_rx_capture_enabled(pdev, peer,
+						is_rx_pkt_cap_enable,
+						peer_mac);
+
+	return status;
 }
 
 /*

+ 4 - 2
dp/wifi3.0/dp_peer.h

@@ -286,7 +286,9 @@ void dp_peer_ast_index_flow_queue_map_create(void *soc_hdl,
  * @soc: DP SOC handle
  * @pdev_id: id of DP pdev handle
  * @is_rx_pkt_cap_enable: enable/disable Rx packet capture in monitor mode
- * @is_tx_pkt_cap_enable: enable/disable Tx packet capture in monitor mode
+ * @is_tx_pkt_cap_enable: enable/disable/delete/print
+ * Tx packet capture in monitor mode
+ * Tx packet capture in monitor mode
  * @peer_mac: MAC address for which the above need to be enabled/disabled
  *
  * Return: Success if Rx & Tx capture is enabled for peer, false otherwise
@@ -295,7 +297,7 @@ QDF_STATUS
 dp_peer_update_pkt_capture_params(ol_txrx_soc_handle soc,
 				  uint8_t pdev_id,
 				  bool is_rx_pkt_cap_enable,
-				  bool is_tx_pkt_cap_enable,
+				  uint8_t is_tx_pkt_cap_enable,
 				  uint8_t *peer_mac);
 
 /*

+ 4 - 1
dp/wifi3.0/dp_rx.h

@@ -1103,8 +1103,11 @@ bool dp_rx_multipass_process(struct dp_peer *peer, qdf_nbuf_t nbuf,
 
 #ifndef WLAN_RX_PKT_CAPTURE_ENH
 static inline
-void dp_peer_set_rx_capture_enabled(struct dp_peer *peer_handle, bool value)
+QDF_STATUS dp_peer_set_rx_capture_enabled(struct dp_pdev *pdev,
+					  struct dp_peer *peer_handle,
+					  bool value, uint8_t *mac_addr)
 {
+	return QDF_STATUS_SUCCESS;
 }
 #endif
 

+ 4 - 1
dp/wifi3.0/dp_tx.h

@@ -357,8 +357,11 @@ static inline void dp_tx_comp_process_exception(struct dp_tx_desc_s *tx_desc)
 
 #ifndef WLAN_TX_PKT_CAPTURE_ENH
 static inline
-void dp_peer_set_tx_capture_enabled(struct dp_peer *peer_handle, bool value)
+QDF_STATUS dp_peer_set_tx_capture_enabled(struct dp_pdev *pdev,
+					  struct dp_peer *peer_handle,
+					  uint8_t value, uint8_t *peer_mac)
 {
+	return QDF_STATUS_SUCCESS;
 }
 #endif
 #endif