qca-wifi: Display new metrics in peerstats tool

Display new metrics in peerstats tool

Tx Stats
1. num_ppdus
2. num_bytes
3. phy_rate_actual_su
4. phy_rate_actual_mu
5. ofdma_usage
6. mu_mimo_usage
7. bw_usage_avg
8. bw_usage_max
9. pkt_error_rate

Rx Stats
1. num_ppdus
2. num_bytes
3. phy_rate_actual_su
4. phy_rate_actual_mu
5. ofdma_usage
6. mu_mimo_usage
7. bw_usage_avg
8. bw_usage_max
9. pkt_error_rate

This tool runs as daemon and listens to netlink
events sent by driver

CRs-Fixed: 2740231
Change-Id: I3f967ac2beae61ed60f0262352b72fe2d9ec1e4d
This commit is contained in:
phadiman
2020-08-01 18:50:58 +05:30
committed by Gerrit - the friendly Code Review server
parent 8ad7491fdd
commit d88a0fb009

View File

@@ -340,6 +340,100 @@ static void dp_peer_tx_rate_stats_print(uint8_t *peer_mac,
return; return;
} }
static void dp_peer_tx_link_stats_print(uint8_t *peer_mac,
uint64_t peer_cookie,
void *buffer,
uint32_t buffer_len)
{
struct wlan_tx_link_stats *tx_stats;
uint8_t is_lithium;
is_lithium = (peer_cookie & WLANSTATS_COOKIE_PLATFORM_OFFSET)
>> WLANSTATS_PEER_COOKIE_LSB;
if (!is_lithium) {
PRINT("Not supported in non-lithium platforms\n");
return;
}
if (buffer_len < sizeof(struct wlan_tx_link_stats)) {
PRINT("invalid buffer len, return");
return;
}
tx_stats = (struct wlan_tx_link_stats *)buffer;
PRINT("\n\n");
PRINT("========= PEER TX LINK QUALITY METRICS =========\n");
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
PRINT("num_ppdus: %u", tx_stats->num_ppdus);
PRINT("bytes: %"PRIu64, tx_stats->bytes);
PRINT("phy_rate_actual_su: %u kbps", tx_stats->phy_rate_actual_su);
PRINT("phy_rate_actual_mu: %u kbps", tx_stats->phy_rate_actual_mu);
PRINT("ofdma_usage: %u", tx_stats->ofdma_usage);
PRINT("mu_mimo_usage: %u", tx_stats->mu_mimo_usage);
PRINT("bw_usage_avg: %u MHz", tx_stats->bw.usage_avg);
PRINT("bw_usage_packets: 20MHz: %u 40MHz: %u 80MHz: %u 160MHz: %u",
tx_stats->bw.usage_counter[0], tx_stats->bw.usage_counter[1],
tx_stats->bw.usage_counter[2], tx_stats->bw.usage_counter[3]);
PRINT("bw_usage_max:: %u%%", tx_stats->bw.usage_max);
PRINT("ack_rssi: %lu", tx_stats->ack_rssi);
PRINT("pkt_error_rate: %u%%", tx_stats->pkt_error_rate);
}
static void dp_peer_rx_link_stats_print(uint8_t *peer_mac,
uint64_t peer_cookie,
void *buffer,
uint32_t buffer_len)
{
struct wlan_rx_link_stats *rx_stats;
uint8_t is_lithium;
is_lithium = (peer_cookie & WLANSTATS_COOKIE_PLATFORM_OFFSET)
>> WLANSTATS_PEER_COOKIE_LSB;
if (!is_lithium) {
PRINT("Not supported in non-lithium platforms\n");
return;
}
if (buffer_len < sizeof(struct wlan_rx_link_stats)) {
PRINT("invalid buffer len, return");
return;
}
rx_stats = (struct wlan_rx_link_stats *)buffer;
PRINT("\n\n");
PRINT("========= PEER RX LINK QUALITY METRICS =========\n");
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
PRINT("num_ppdus: %u", rx_stats->num_ppdus);
PRINT("bytes: %"PRIu64, rx_stats->bytes);
PRINT("phy_rate_actual_su: %u kbps", rx_stats->phy_rate_actual_su);
PRINT("phy_rate_actual_mu: %u kbps", rx_stats->phy_rate_actual_mu);
PRINT("ofdma_usage: %u", rx_stats->ofdma_usage);
PRINT("mu_mimo_usage: %u", rx_stats->mu_mimo_usage);
PRINT("bw_usage_avg: %u MHz", rx_stats->bw.usage_avg);
PRINT("bw_usage_packets: 20MHz: %u 40MHz: %u 80MHz: %u 160MHz: %u",
rx_stats->bw.usage_counter[0], rx_stats->bw.usage_counter[1],
rx_stats->bw.usage_counter[2], rx_stats->bw.usage_counter[3]);
PRINT("bw_usage_max: %u%%", rx_stats->bw.usage_max);
PRINT("su_rssi: %lu", rx_stats->su_rssi);
PRINT("pkt_error_rate: %u%%", rx_stats->pkt_error_rate);
}
static void dp_peer_stats_handler(uint32_t cache_type, static void dp_peer_stats_handler(uint32_t cache_type,
uint8_t *peer_mac, uint8_t *peer_mac,
uint64_t peer_cookie, uint64_t peer_cookie,
@@ -355,6 +449,14 @@ static void dp_peer_stats_handler(uint32_t cache_type,
dp_peer_tx_rate_stats_print(peer_mac, peer_cookie, dp_peer_tx_rate_stats_print(peer_mac, peer_cookie,
buffer, buffer_len); buffer, buffer_len);
break; break;
case DP_PEER_TX_LINK_STATS:
dp_peer_tx_link_stats_print(peer_mac, peer_cookie,
buffer, buffer_len);
break;
case DP_PEER_RX_LINK_STATS:
dp_peer_rx_link_stats_print(peer_mac, peer_cookie,
buffer, buffer_len);
break;
} }
} }