qcacmn: Add support to get rx mcast and bcast stats

Add support to get rx multicast and broadcast stats
in IPA Architecture

Change-Id: Id7cf7bb09534833af7fe620cdbd4ed452d9e4613
CRs-Fixed: 3346858
This commit is contained in:
Amrit
2022-11-24 12:53:56 +05:30
committed by Madan Koyyalamudi
parent 7e8649bed8
commit 6d1cdea120
5 changed files with 87 additions and 0 deletions

View File

@@ -767,6 +767,33 @@ cdp_ipa_ast_create(ol_txrx_soc_handle soc, qdf_ipa_ast_info_type_t *data)
}
#endif
/**
* cdp_ipa_update_peer_rx_stats - update peer rx stats
* @soc: data path soc handle
* @vdev_id: vdev id
* @peer_mac: Peer Mac Address
* @nbuf: pointer to data packet
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS
cdp_ipa_update_peer_rx_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
uint8_t *peer_mac, qdf_nbuf_t nbuf)
{
if (!soc || !soc->ops || !soc->ops->ipa_ops) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
"%s invalid instance", __func__);
return QDF_STATUS_E_FAILURE;
}
if (soc->ops->ipa_ops->ipa_update_peer_rx_stats)
return soc->ops->ipa_ops->ipa_update_peer_rx_stats(soc,
vdev_id,
peer_mac,
nbuf);
return QDF_STATUS_SUCCESS;
}
#endif /* IPA_OFFLOAD */
#endif /* _CDP_TXRX_IPA_H_ */

View File

@@ -1961,6 +1961,10 @@ struct cdp_ipa_ops {
uint8_t vdev_id, qdf_nbuf_t skb);
void (*ipa_set_uc_tx_partition_base)(struct cdp_cfg *pdev,
uint32_t value);
QDF_STATUS (*ipa_update_peer_rx_stats)(struct cdp_soc_t *soc_hdl,
uint8_t vdev_id,
uint8_t *peer_mac,
qdf_nbuf_t nbuf);
#ifdef FEATURE_METERING
QDF_STATUS (*ipa_uc_get_share_stats)(struct cdp_soc_t *soc_hdl,
uint8_t pdev_id,

View File

@@ -3749,4 +3749,53 @@ QDF_STATUS dp_ipa_ast_create(struct cdp_soc_t *soc_hdl,
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef QCA_ENHANCED_STATS_SUPPORT
/**
* dp_ipa_update_peer_rx_stats - update peer rx stats
* @soc: soc handle
* @vdev_id: vdev id
* @peer_mac: Peer Mac Address
* @nbuf: data nbuf
*
* Return: status success/failure
*/
QDF_STATUS dp_ipa_update_peer_rx_stats(struct cdp_soc_t *soc,
uint8_t vdev_id, uint8_t *peer_mac,
qdf_nbuf_t nbuf)
{
struct dp_peer *peer = dp_peer_find_hash_find((struct dp_soc *)soc,
peer_mac, 0, vdev_id,
DP_MOD_ID_IPA);
struct dp_txrx_peer *txrx_peer;
uint8_t da_is_bcmc;
qdf_ether_header_t *eh;
if (!peer)
return QDF_STATUS_E_FAILURE;
txrx_peer = dp_get_txrx_peer(peer);
if (!txrx_peer) {
dp_peer_unref_delete(peer, DP_MOD_ID_IPA);
return QDF_STATUS_E_FAILURE;
}
da_is_bcmc = ((uint8_t)nbuf->cb[1]) & 0x2;
eh = (qdf_ether_header_t *)qdf_nbuf_data(nbuf);
if (da_is_bcmc) {
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.multicast, 1,
qdf_nbuf_len(nbuf));
if (QDF_IS_ADDR_BROADCAST(eh->ether_dhost))
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.bcast,
1, qdf_nbuf_len(nbuf));
}
dp_peer_unref_delete(peer, DP_MOD_ID_IPA);
return QDF_STATUS_SUCCESS;
}
#endif
#endif

View File

@@ -15059,6 +15059,9 @@ static struct cdp_ipa_ops dp_ops_ipa = {
.ipa_rx_intrabss_fwd = dp_ipa_rx_intrabss_fwd,
.ipa_tx_buf_smmu_mapping = dp_ipa_tx_buf_smmu_mapping,
.ipa_tx_buf_smmu_unmapping = dp_ipa_tx_buf_smmu_unmapping,
#ifdef QCA_ENHANCED_STATS_SUPPORT
.ipa_update_peer_rx_stats = dp_ipa_update_peer_rx_stats,
#endif
#ifdef IPA_WDS_EASYMESH_FEATURE
.ipa_ast_create = dp_ipa_ast_create,
#endif

View File

@@ -1384,6 +1384,10 @@ static void __wlan_ipa_w2i_cb(void *priv, qdf_ipa_dp_evt_type_t evt,
QDF_NBUF_SRC_MAC_OFFSET,
QDF_MAC_ADDR_SIZE);
cdp_ipa_update_peer_rx_stats(ipa_ctx->dp_soc,
iface_context->session_id,
&peer_mac_addr.bytes[0],
skb);
if (qdf_nbuf_is_ipv4_eapol_pkt(skb)) {
is_eapol_wapi = true;
if (iface_context->device_mode == QDF_SAP_MODE &&