qca-wifi: Fix zero rate index issue in peer rate stats

Rate index zero (representing 11 Mbps in ratetable) was ignored in current
stats implementation. Added code changes to include zero rate index

Some formatting is done in peerstats app to avoid exceeding 80 chars

CRs-Fixed: 2424176
Change-Id: I9d6938cc840ee3db3639b3608b429a97832c3168
This commit is contained in:
Amir Patel
2019-03-27 13:08:12 +05:30
committed by Gerrit - the friendly Code Review server
父節點 d2e9132ee0
當前提交 c87166665a
共有 3 個文件被更改,包括 212 次插入161 次删除

查看文件

@@ -31,7 +31,7 @@
#error confilicting defs of min
#endif
#define DP_PEER_STATS_PRINT(fmt, ...) \
#define PRINT(fmt, ...) \
do { \
printf(fmt, ##__VA_ARGS__); \
printf("\n"); \
@@ -48,83 +48,83 @@ static void dp_peer_rx_rate_stats_print(uint8_t *peer_mac,
struct wlan_rx_rate_stats *rx_stats;
rx_stats = (struct wlan_rx_rate_stats *)buffer;
DP_PEER_STATS_PRINT("\n......................................");
DP_PEER_STATS_PRINT("......................................");
DP_PEER_STATS_PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
DP_PEER_STATS_PRINT("\tpeer cookie: %016llx\n",
peer_cookie);
DP_PEER_STATS_PRINT("\n..............................................");
DP_PEER_STATS_PRINT("................................");
DP_PEER_STATS_PRINT("................................................");
DP_PEER_STATS_PRINT(".................................\n");
DP_PEER_STATS_PRINT("\tRx statistics:");
DP_PEER_STATS_PRINT(" %10s | %10s | %10s | %10s | %10s | %10s",
"rate",
"rix",
"bytes",
"msdus",
"mpdus",
"ppdus");
DP_PEER_STATS_PRINT("\t\t%10s | %10s | %10s | %10s | %10s | %10s |",
"retries",
"rssi",
"rssi 1 p20",
"rssi 1 e20",
"rssi 1 e40",
"rssi 1 e80");
DP_PEER_STATS_PRINT(" | %10s | | %10s | %10s | %10s | %10s | %10s",
"rssi 2 p20",
"rssi 2 e20",
"rssi 2 e40",
"rssi 2 e80",
"rssi 3 p20",
"rssi 3 e20");
DP_PEER_STATS_PRINT(" | %10s | %10s | %10s | %10s | %10s | %10s\n\n\n",
"rssi 3 e40",
"rssi 3 e80",
"rssi 4 p20",
"rssi 4 e20",
"rssi 4 e40",
"rssi 4 e80");
PRINT("\n......................................");
PRINT("......................................");
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
PRINT("\tpeer cookie: %016llx\n", peer_cookie);
PRINT("\n..............................................");
PRINT("................................");
PRINT("................................................");
PRINT(".................................\n");
PRINT("\tRx statistics:");
PRINT(" %10s | %10s | %10s | %10s | %10s | %10s",
"rate",
"rix",
"bytes",
"msdus",
"mpdus",
"ppdus");
PRINT("\t\t%10s | %10s | %10s | %10s | %10s | %10s |",
"retries",
"rssi",
"rssi 1 p20",
"rssi 1 e20",
"rssi 1 e40",
"rssi 1 e80");
PRINT(" | %10s | | %10s | %10s | %10s | %10s | %10s",
"rssi 2 p20",
"rssi 2 e20",
"rssi 2 e40",
"rssi 2 e80",
"rssi 3 p20",
"rssi 3 e20");
PRINT(" | %10s | %10s | %10s | %10s | %10s | %10s\n\n\n",
"rssi 3 e40",
"rssi 3 e80",
"rssi 4 p20",
"rssi 4 e20",
"rssi 4 e40",
"rssi 4 e80");
for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
DP_PEER_STATS_PRINT("\t\t%10u | %10u | %10u | %10u | %10u |",
rx_stats->rate,
rx_stats->rix,
rx_stats->num_bytes,
rx_stats->num_msdus,
rx_stats->num_mpdus
);
DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u |",
rx_stats->num_ppdus,
rx_stats->num_retries,
rx_stats->num_sgi,
rx_stats->avg_rssi,
rx_stats->avg_rssi_ant[0][0]);
DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u |",
rx_stats->avg_rssi_ant[0][1],
rx_stats->avg_rssi_ant[0][2],
rx_stats->avg_rssi_ant[0][3],
rx_stats->avg_rssi_ant[1][0],
rx_stats->avg_rssi_ant[1][1]);
DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u |",
rx_stats->avg_rssi_ant[1][2],
rx_stats->avg_rssi_ant[1][3],
rx_stats->avg_rssi_ant[2][0],
rx_stats->avg_rssi_ant[2][1],
rx_stats->avg_rssi_ant[2][2]);
DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u\n\n\n",
rx_stats->avg_rssi_ant[2][3],
rx_stats->avg_rssi_ant[3][0],
rx_stats->avg_rssi_ant[3][1],
rx_stats->avg_rssi_ant[3][2],
rx_stats->avg_rssi_ant[3][3]);
if (rx_stats->rix != INVALID_CACHE_IDX) {
PRINT(" %10u | %10u | %10u | %10u | %10u |",
rx_stats->rate,
rx_stats->rix,
rx_stats->num_bytes,
rx_stats->num_msdus,
rx_stats->num_mpdus);
PRINT(" %10u | %10u | %10u | %10lu | %10lu |",
rx_stats->num_ppdus,
rx_stats->num_retries,
rx_stats->num_sgi,
rx_stats->avg_rssi,
rx_stats->avg_rssi_ant[0][0]);
PRINT(" %10lu | %10lu | %10lu | %10lu | %10lu |",
rx_stats->avg_rssi_ant[0][1],
rx_stats->avg_rssi_ant[0][2],
rx_stats->avg_rssi_ant[0][3],
rx_stats->avg_rssi_ant[1][0],
rx_stats->avg_rssi_ant[1][1]);
PRINT(" %10lu | %10lu | %10lu | %10lu | %10lu |",
rx_stats->avg_rssi_ant[1][2],
rx_stats->avg_rssi_ant[1][3],
rx_stats->avg_rssi_ant[2][0],
rx_stats->avg_rssi_ant[2][1],
rx_stats->avg_rssi_ant[2][2]);
PRINT(" %10lu | %10lu | %10lu | %10lu | %10lu\n\n\n",
rx_stats->avg_rssi_ant[2][3],
rx_stats->avg_rssi_ant[3][0],
rx_stats->avg_rssi_ant[3][1],
rx_stats->avg_rssi_ant[3][2],
rx_stats->avg_rssi_ant[3][3]);
}
rx_stats = rx_stats + 1;
}
}
@@ -136,42 +136,38 @@ dp_peer_tx_sojourn_stats_print(uint8_t *peer_mac,
{
uint8_t tid;
DP_PEER_STATS_PRINT("\n..........................................");
DP_PEER_STATS_PRINT("....................................");
DP_PEER_STATS_PRINT("....................................");
DP_PEER_STATS_PRINT(".........................................\n");
DP_PEER_STATS_PRINT("PEER%02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
DP_PEER_STATS_PRINT("\tPEER Cookie: %016llx\n",
peer_cookie);
DP_PEER_STATS_PRINT("\n...........................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("..................................");
DP_PEER_STATS_PRINT("............................................");
DP_PEER_STATS_PRINT("\n\tSojourn statistics:\n");
DP_PEER_STATS_PRINT("\t\t%10s %10s %20s %20s\n",
"tid",
"ave",
"sum",
"num");
PRINT("\n..........................................");
PRINT("....................................");
PRINT("....................................");
PRINT(".........................................\n");
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
PRINT("\tPEER Cookie: %016llx\n", peer_cookie);
PRINT("\n...........................................");
PRINT("...................................");
PRINT("..................................");
PRINT("............................................");
PRINT("\n\tSojourn statistics:\n");
PRINT("\t\t%10s %10s %20s %20s\n", "tid", "ave", "sum", "num");
for (tid = 0; tid < WLAN_DATA_TID_MAX; tid++) {
/* change sum_sojourn_msdu data type to u64 */
DP_PEER_STATS_PRINT("\t\t%10d %10u %20u %20u\n",
tid,
sojourn_stats->avg_sojourn_msdu[tid],
sojourn_stats->sum_sojourn_msdu[tid],
sojourn_stats->num_msdus[tid]);
PRINT("\t\t%10d %10lu %20u %20u\n",
tid,
sojourn_stats->avg_sojourn_msdu[tid],
sojourn_stats->sum_sojourn_msdu[tid],
sojourn_stats->num_msdus[tid]);
}
DP_PEER_STATS_PRINT("\n...........................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("...........................................\n");
PRINT("sizeof(avg): %d", sizeof(sojourn_stats->avg_sojourn_msdu[tid]));
PRINT("\n...........................................");
PRINT("...................................");
PRINT("...................................");
PRINT("...........................................\n");
}
static void dp_peer_tx_rate_stats_print(uint8_t *peer_mac,
@@ -186,46 +182,49 @@ static void dp_peer_tx_rate_stats_print(uint8_t *peer_mac,
if (buffer_len < (WLANSTATS_CACHE_SIZE *
sizeof(struct wlan_tx_rate_stats))
+ sizeof(struct wlan_tx_sojourn_stats)) {
DP_PEER_STATS_PRINT("invalid buffer len, return");
PRINT("invalid buffer len, return");
return;
}
tx_stats = (struct wlan_tx_rate_stats *)buffer;
DP_PEER_STATS_PRINT("\n...........................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("...........................................\n");
DP_PEER_STATS_PRINT("PEER%02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n\n",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
DP_PEER_STATS_PRINT("\tPEER Cookie: %016llx",
peer_cookie);
DP_PEER_STATS_PRINT("\n...........................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("...................................");
DP_PEER_STATS_PRINT("...........................................\n");
DP_PEER_STATS_PRINT("\tTx statistics:\n");
DP_PEER_STATS_PRINT("\t\t%10s | %10s | %10s | %10s | %10s",
"rate",
"rix",
"attempts",
"success",
"ppdus");
PRINT("\n...........................................");
PRINT("...................................");
PRINT("...................................");
PRINT("...........................................\n");
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n\n",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
PRINT("\tPEER Cookie: %016llx", peer_cookie);
PRINT("\n...........................................");
PRINT("...................................");
PRINT("...................................");
PRINT("...........................................\n");
PRINT("\tTx statistics:\n");
PRINT("\t\t%10s | %10s | %10s | %10s | %10s",
"rate",
"rix",
"attempts",
"success",
"ppdus");
for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
DP_PEER_STATS_PRINT("\t\t%10u | %10u | %10u | %10u | %10u\n",
tx_stats->rate,
tx_stats->rix,
tx_stats->mpdu_attempts,
tx_stats->mpdu_success,
tx_stats->num_ppdus);
if (tx_stats->rix != INVALID_CACHE_IDX) {
PRINT("\t\t%10u | %10u | %10u | %10u | %10u\n",
tx_stats->rate,
tx_stats->rix,
tx_stats->mpdu_attempts,
tx_stats->mpdu_success,
tx_stats->num_ppdus);
}
tx_stats = tx_stats + 1;
}
sojourn_stats = buffer + (WLANSTATS_CACHE_SIZE *
sizeof(struct wlan_tx_rate_stats));
sojourn_stats = (struct wlan_tx_sojourn_stats *)((uint8_t *)buffer
+ (WLANSTATS_CACHE_SIZE *
sizeof(struct wlan_tx_rate_stats)));
dp_peer_tx_sojourn_stats_print(peer_mac, peer_cookie, sojourn_stats);
return;
@@ -275,20 +274,20 @@ dp_peer_stats_event_callback(char *ifname,
if (nla_parse(tb_array, QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_MAX,
(struct nlattr *)data, len, NULL)) {
printf("INVALID EVENT\n");
PRINT("Invalid event\n");
return;
}
tb = tb_array[QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_TYPE];
if (!tb) {
printf("#############%s:%d\n", __func__, __LINE__);
PRINT("Cache type in NULL, return");
return;
}
cache_type = nla_get_u32(tb);
tb = tb_array[QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_PEER_MAC];
if (!tb) {
printf("#############%s:%d\n", __func__, __LINE__);
PRINT("Peer mac addr is null, return");
return;
}
peer_mac = (uint8_t *)nla_data(tb);
@@ -301,12 +300,12 @@ dp_peer_stats_event_callback(char *ifname,
tb = tb_array[QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_PEER_COOKIE];
if (!tb) {
printf("#############%s:%d\n", __func__, __LINE__);
PRINT("peer cookie attribute is null, return");
return;
}
peer_cookie = nla_get_u64(tb);
if (!buffer) {
printf("#############%s:%d\n", __func__, __LINE__);
PRINT(" stats buffer is null, return");
return;
}