1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-12-26 10:21:09 +02:00
openwrt-xburst/package/iw/patches/120-per_chain_signal_strength.patch
juhosg 8f348ad02b pacakge/iw: don't show a stray ']' if the chain signal attribute list is empty
Without the patch, the output of 'station dump' command looks weird in
some cases:

root@OpenWrt:/# iw dev wlan0 station dump
Station 00:21:27:cb:57:02 (on wlan0)
        inactive time:  190 ms
        rx bytes:       36652
        rx packets:     149
        tx bytes:       1998
        tx packets:     16
        tx retries:     0
        tx failed:      0
        signal:         -31 ] dBm
        signal avg:     -30 [-32, -36] dBm
        tx bitrate:     5.5 MBit/s
        rx bitrate:     54.0 MBit/s
root@OpenWrt:/#

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28879 3c298f89-4303-0410-b956-a3cf2f4a3e73
2011-11-09 11:47:44 +00:00

71 lines
2.1 KiB
Diff

--- a/station.c
+++ b/station.c
@@ -61,6 +61,33 @@ static void print_sta_bitrate(struct nla
}
}
+static char *get_chain_signal(struct nlattr *attr_list)
+{
+ struct nlattr *attr;
+ static char buf[64];
+ char *cur = buf;
+ int i = 0, rem;
+ const char *prefix;
+
+ if (!attr_list)
+ return "";
+
+ nla_for_each_nested(attr, attr_list, rem) {
+ if (i++ > 0)
+ prefix = ", ";
+ else
+ prefix = "[";
+
+ cur += snprintf(cur, sizeof(buf) - (cur - buf), "%s%d", prefix,
+ (int8_t) nla_get_u8(attr));
+ }
+
+ if (i)
+ snprintf(cur, sizeof(buf) - (cur - buf), "] ");
+
+ return buf;
+}
+
static int print_sta_handler(struct nl_msg *msg, void *arg)
{
struct nlattr *tb[NL80211_ATTR_MAX + 1];
@@ -81,7 +108,10 @@ static int print_sta_handler(struct nl_m
[NL80211_STA_INFO_PLINK_STATE] = { .type = NLA_U8 },
[NL80211_STA_INFO_TX_RETRIES] = { .type = NLA_U32 },
[NL80211_STA_INFO_TX_FAILED] = { .type = NLA_U32 },
+ [NL80211_STA_INFO_CHAIN_SIGNAL] = { .type = NLA_NESTED },
+ [NL80211_STA_INFO_CHAIN_SIGNAL_AVG] = { .type = NLA_NESTED },
};
+ char *chain;
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
genlmsg_attrlen(gnlh, 0), NULL);
@@ -128,12 +158,18 @@ static int print_sta_handler(struct nl_m
if (sinfo[NL80211_STA_INFO_TX_FAILED])
printf("\n\ttx failed:\t%u",
nla_get_u32(sinfo[NL80211_STA_INFO_TX_FAILED]));
+
+ chain = get_chain_signal(sinfo[NL80211_STA_INFO_CHAIN_SIGNAL]);
if (sinfo[NL80211_STA_INFO_SIGNAL])
- printf("\n\tsignal: \t%d dBm",
- (int8_t)nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]));
+ printf("\n\tsignal: \t%d %sdBm",
+ (int8_t)nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]),
+ chain);
+
+ chain = get_chain_signal(sinfo[NL80211_STA_INFO_CHAIN_SIGNAL_AVG]);
if (sinfo[NL80211_STA_INFO_SIGNAL_AVG])
- printf("\n\tsignal avg:\t%d dBm",
- (int8_t)nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL_AVG]));
+ printf("\n\tsignal avg:\t%d %sdBm",
+ (int8_t)nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL_AVG]),
+ chain);
print_sta_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], "tx bitrate");
print_sta_bitrate(sinfo[NL80211_STA_INFO_RX_BITRATE], "rx bitrate");