qcacmn: add wildcard search support for peer_hash_find

Add option to ignore vdev_id match to peer hash lookup API
when vdev_id is passed as 0xff to the API, it ignores vdev_id
argument

This option is needed for usecases like peer level statistics
display where only MAC address is known and vdev_id is not known

Also add the missing accounting of rx broadcast frames in the
overall statistics

Change-Id: I9939ac8bf30f6be3d216f9aa28d52560bf445e06
This commit is contained in:
Pamidipati, Vijay 2018-04-16 19:06:20 +05:30 • committed by nshrivas
commit 3b0f9169c5
4 changed files with 18 additions and 10 deletions

View file

@ -301,19 +301,21 @@ while (0)
DP_STATS_AGGR(_tgtobj, _srcobj, rx.non_amsdu_cnt); \
DP_STATS_AGGR(_tgtobj, _srcobj, rx.amsdu_cnt); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.to_stack); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.bcast);\
\
for (i = 0; i < CDP_MAX_RX_RINGS; i++) \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.rcvd_reo[i]); \
\
_srcobj->stats.rx.unicast.num = \
_srcobj->stats.rx.to_stack.num - \
_srcobj->stats.rx.multicast.num; \
(_srcobj->stats.rx.multicast.num + \
_srcobj->stats.rx.bcast.num); \
_srcobj->stats.rx.unicast.bytes = \
_srcobj->stats.rx.to_stack.bytes - \
_srcobj->stats.rx.multicast.bytes; \
(_srcobj->stats.rx.multicast.bytes + \
_srcobj->stats.rx.bcast.bytes); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.unicast); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.multicast); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.bcast); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.raw); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.intra_bss.pkts); \
DP_STATS_AGGR_PKT(_tgtobj, _srcobj, rx.intra_bss.fail); \

View file

@ -4923,9 +4923,11 @@ static void dp_pdev_getstats(struct cdp_pdev *pdev_handle,
stats->tx_dropped = stats->tx_errors;
stats->rx_packets = pdev->stats.rx.unicast.num +
pdev->stats.rx.multicast.num;
pdev->stats.rx.multicast.num +
pdev->stats.rx.bcast.num;
stats->rx_bytes = pdev->stats.rx.unicast.bytes +
pdev->stats.rx.multicast.bytes;
pdev->stats.rx.multicast.bytes +
pdev->stats.rx.bcast.bytes;
}
/**
@ -5098,9 +5100,11 @@ dp_print_pdev_rx_stats(struct dp_pdev *pdev)
pdev->stats.rx.to_stack.bytes);
DP_PRINT_STATS("Multicast/Broadcast:");
DP_PRINT_STATS(" Packets = %d",
pdev->stats.rx.multicast.num);
(pdev->stats.rx.multicast.num +
pdev->stats.rx.bcast.num));
DP_PRINT_STATS(" Bytes = %llu",
pdev->stats.rx.multicast.bytes);
(pdev->stats.rx.multicast.bytes +
pdev->stats.rx.bcast.bytes));
DP_PRINT_STATS("Errors:");
DP_PRINT_STATS(" Rxdma Ring Un-inititalized = %d",
pdev->stats.replenish.rxdma_err);

View file

@ -714,7 +714,8 @@ struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
* modified find will take care of finding the correct BSS peer.
*/
if (dp_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) == 0 &&
(peer->vdev->vdev_id == vdev_id)) {
((peer->vdev->vdev_id == vdev_id) ||
(vdev_id == DP_VDEV_ALL))) {
#else
if (dp_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) == 0) {
#endif
@ -1081,7 +1082,7 @@ void *dp_find_peer_by_addr(struct cdp_pdev *dev, uint8_t *peer_mac_addr,
struct dp_pdev *pdev = (struct dp_pdev *)dev;
struct dp_peer *peer;
peer = dp_peer_find_hash_find(pdev->soc, peer_mac_addr, 0, 0);
peer = dp_peer_find_hash_find(pdev->soc, peer_mac_addr, 0, DP_VDEV_ALL);
if (!peer)
return NULL;
@ -2041,7 +2042,7 @@ QDF_STATUS dp_peer_state_update(struct cdp_pdev *pdev_handle, uint8_t *peer_mac,
struct dp_peer *peer;
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
peer = dp_peer_find_hash_find(pdev->soc, peer_mac, 0, 0);
peer = dp_peer_find_hash_find(pdev->soc, peer_mac, 0, DP_VDEV_ALL);
if (NULL == peer) {
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"Failed to find peer for: [%pM]", peer_mac);

View file

@ -69,6 +69,7 @@
#define DP_QOS_TID 0x0f
#define DP_IPV6_PRIORITY_SHIFT 20
#define MAX_MON_LINK_DESC_BANKS 2
#define DP_VDEV_ALL 0xff
#if defined(CONFIG_MCL)
#define MAX_PDEV_CNT 1