diff options
author | Irfan Sheriff <isheriff@google.com> | 2012-08-03 10:15:30 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-08-03 10:15:31 -0700 |
commit | 389b0a3504489916caeac883f721403c088b30bf (patch) | |
tree | 4c36d188888102f2292afabcbfc4a516bc88704f | |
parent | 5e4315286bf0aa8a42495674f14e1cefedeeb4ec (diff) | |
parent | fcd6f21dad589eb6fdba941c98e072ca2664726b (diff) | |
download | external_wpa_supplicant_8-389b0a3504489916caeac883f721403c088b30bf.zip external_wpa_supplicant_8-389b0a3504489916caeac883f721403c088b30bf.tar.gz external_wpa_supplicant_8-389b0a3504489916caeac883f721403c088b30bf.tar.bz2 |
Merge "Add PKTCNT_POLL command to get TX packet counters" into jb-mr1-dev
-rw-r--r-- | src/drivers/driver_nl80211.c | 4 | ||||
-rw-r--r-- | wpa_supplicant/ctrl_iface.c | 21 | ||||
-rw-r--r-- | wpa_supplicant/driver_i.h | 8 | ||||
-rw-r--r-- | wpa_supplicant/wpa_cli.c | 10 |
4 files changed, 43 insertions, 0 deletions
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index d54d0f5..cfcfd6b 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -7338,6 +7338,7 @@ static int get_sta_handler(struct nl_msg *msg, void *arg) [NL80211_STA_INFO_TX_BYTES] = { .type = NLA_U32 }, [NL80211_STA_INFO_RX_PACKETS] = { .type = NLA_U32 }, [NL80211_STA_INFO_TX_PACKETS] = { .type = NLA_U32 }, + [NL80211_STA_INFO_TX_FAILED] = { .type = NLA_U32 }, }; nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), @@ -7373,6 +7374,9 @@ static int get_sta_handler(struct nl_msg *msg, void *arg) if (stats[NL80211_STA_INFO_TX_PACKETS]) data->tx_packets = nla_get_u32(stats[NL80211_STA_INFO_TX_PACKETS]); + if (stats[NL80211_STA_INFO_TX_FAILED]) + data->tx_retry_failed = + nla_get_u32(stats[NL80211_STA_INFO_TX_FAILED]); return NL_SKIP; } diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index 82d26e3..1065ef9 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -4102,6 +4102,24 @@ static int wpa_supplicant_signal_poll(struct wpa_supplicant *wpa_s, char *buf, return ret; } +static int wpa_supplicant_pktcnt_poll(struct wpa_supplicant *wpa_s, char *buf, + size_t buflen) +{ + struct hostap_sta_driver_data sta; + int ret; + + ret = wpa_drv_pktcnt_poll(wpa_s, &sta); + if (ret) + return -1; + + ret = os_snprintf(buf, buflen, "TXGOOD=%lu\nTXBAD=%lu\nRXGOOD=%lu\n", + sta.tx_packets, sta.tx_retry_failed, sta.rx_packets); + if (ret < 0 || (unsigned int) ret > buflen) + return -1; + return ret; +} + + #ifdef ANDROID static int wpa_supplicant_driver_cmd(struct wpa_supplicant *wpa_s, char *cmd, char *buf, size_t buflen) @@ -4596,6 +4614,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, } else if (os_strncmp(buf, "SIGNAL_POLL", 11) == 0) { reply_len = wpa_supplicant_signal_poll(wpa_s, reply, reply_size); + } else if (os_strncmp(buf, "PKTCNT_POLL", 11) == 0) { + reply_len = wpa_supplicant_pktcnt_poll(wpa_s, reply, + reply_size); #ifdef CONFIG_AUTOSCAN } else if (os_strncmp(buf, "AUTOSCAN ", 9) == 0) { if (wpa_supplicant_ctrl_iface_autoscan(wpa_s, buf + 9)) diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h index f968251..4f2ec79 100644 --- a/wpa_supplicant/driver_i.h +++ b/wpa_supplicant/driver_i.h @@ -463,6 +463,14 @@ static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, return -1; } +static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, + struct hostap_sta_driver_data *sta) +{ + if (wpa_s->driver->read_sta_data) + return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, wpa_s->own_addr); + return -1; +} + static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, const struct wpabuf *beacon, const struct wpabuf *proberesp, diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c index c631cd1..a8e8488 100644 --- a/wpa_supplicant/wpa_cli.c +++ b/wpa_supplicant/wpa_cli.c @@ -2935,6 +2935,13 @@ static int wpa_cli_cmd_signal_poll(struct wpa_ctrl *ctrl, int argc, } +static int wpa_cli_cmd_pktcnt_poll(struct wpa_ctrl *ctrl, int argc, + char *argv[]) +{ + return wpa_ctrl_command(ctrl, "PKTCNT_POLL"); +} + + static int wpa_cli_cmd_reauthenticate(struct wpa_ctrl *ctrl, int argc, char *argv[]) { @@ -3370,6 +3377,9 @@ static struct wpa_cli_cmd wpa_cli_commands[] = { { "signal_poll", wpa_cli_cmd_signal_poll, cli_cmd_flag_none, "= get signal parameters" }, + { "pktcnt_poll", wpa_cli_cmd_pktcnt_poll, + cli_cmd_flag_none, + "= get TX/RX packet counters" }, { "reauthenticate", wpa_cli_cmd_reauthenticate, cli_cmd_flag_none, "= trigger IEEE 802.1X/EAPOL reauthentication" }, #ifdef CONFIG_AUTOSCAN |