X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fiwinfo.git;a=blobdiff_plain;f=iwinfo_nl80211.c;h=ecd2d6ac834a1b1808dca32fa7d3e6ac78023aec;hp=99177e7a8ae5f6e84e0178998bed1714009a0f5b;hb=e59f9253aa09a340d235dac074a10a4fe48b62fd;hpb=fb749bf51a7855ee955fc221acdc51b94231db2b diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c index 99177e7..ecd2d6a 100644 --- a/iwinfo_nl80211.c +++ b/iwinfo_nl80211.c @@ -1279,7 +1279,8 @@ static int nl80211_fill_signal_cb(struct nl_msg *msg, void *arg) if (sinfo[NL80211_STA_INFO_SIGNAL]) { dbm = nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]); - rr->rssi = rr->rssi ? (int8_t)((rr->rssi + dbm) / 2) : dbm; + rr->rssi = (rr->rssi * rr->rssi_samples + dbm) / (rr->rssi_samples + 1); + rr->rssi_samples++; } if (sinfo[NL80211_STA_INFO_TX_BITRATE]) @@ -1291,8 +1292,8 @@ static int nl80211_fill_signal_cb(struct nl_msg *msg, void *arg) if (rinfo[NL80211_RATE_INFO_BITRATE]) { mbit = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]); - rr->rate = rr->rate - ? (int16_t)((rr->rate + mbit) / 2) : mbit; + rr->rate = (rr->rate * rr->rate_samples + mbit) / (rr->rate_samples + 1); + rr->rate_samples++; } } } @@ -1307,8 +1308,7 @@ static void nl80211_fill_signal(const char *ifname, struct nl80211_rssi_rate *r) DIR *d; struct dirent *de; - r->rssi = 0; - r->rate = 0; + memset(r, 0, sizeof(*r)); if ((d = opendir("/sys/class/net")) != NULL) { @@ -1333,7 +1333,7 @@ static int nl80211_get_bitrate(const char *ifname, int *buf) nl80211_fill_signal(ifname, &rr); - if (rr.rate) + if (rr.rate_samples) { *buf = (rr.rate * 100); return 0; @@ -1348,7 +1348,7 @@ static int nl80211_get_signal(const char *ifname, int *buf) nl80211_fill_signal(ifname, &rr); - if (rr.rssi) + if (rr.rssi_samples) { *buf = rr.rssi; return 0; @@ -1701,6 +1701,7 @@ static int nl80211_get_assoclist_cb(struct nl_msg *msg, void *arg) [NL80211_STA_INFO_T_OFFSET] = { .type = NLA_U64 }, [NL80211_STA_INFO_STA_FLAGS] = { .minlen = sizeof(struct nl80211_sta_flag_update) }, + [NL80211_STA_INFO_EXPECTED_THROUGHPUT] = { .type = NLA_U32 }, }; static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = { @@ -1758,6 +1759,9 @@ static int nl80211_get_assoclist_cb(struct nl_msg *msg, void *arg) if (sinfo[NL80211_STA_INFO_T_OFFSET]) e->t_offset = nla_get_u64(sinfo[NL80211_STA_INFO_T_OFFSET]); + if (sinfo[NL80211_STA_INFO_EXPECTED_THROUGHPUT]) + e->thr = nla_get_u32(sinfo[NL80211_STA_INFO_EXPECTED_THROUGHPUT]); + /* Station flags */ if (sinfo[NL80211_STA_INFO_STA_FLAGS]) { @@ -2219,6 +2223,12 @@ static int nl80211_get_scanlist_wpactl(const char *ifname, char *buf, int *len) /* is another unrelated event, retry */ tries--; } + + /* got a failure reply */ + else if (!strcmp(reply, "FAIL-BUSY\n")) + { + break; + } } /* receive and parse scan results if the wait above didn't time out */