aboutsummaryrefslogtreecommitdiffstats
path: root/package/iw/patches/120-per_chain_signal_strength.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-10-08 14:48:29 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-10-08 14:48:29 +0000
commita1aec68e09778905a2f83e9fe886cda3c67c0f4b (patch)
tree8450a0f0e31400f3ff12c5d8623d436f3146bbe6 /package/iw/patches/120-per_chain_signal_strength.patch
parenta1428e33be9fef11814a1bc768e7ddcf4ab853d8 (diff)
downloadupstream-a1aec68e09778905a2f83e9fe886cda3c67c0f4b.tar.gz
upstream-a1aec68e09778905a2f83e9fe886cda3c67c0f4b.tar.bz2
upstream-a1aec68e09778905a2f83e9fe886cda3c67c0f4b.zip
iw: update to v3.1, add support for per-chain signal strength info
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28385 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/iw/patches/120-per_chain_signal_strength.patch')
-rw-r--r--package/iw/patches/120-per_chain_signal_strength.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/package/iw/patches/120-per_chain_signal_strength.patch b/package/iw/patches/120-per_chain_signal_strength.patch
new file mode 100644
index 0000000000..abdd6381c0
--- /dev/null
+++ b/package/iw/patches/120-per_chain_signal_strength.patch
@@ -0,0 +1,68 @@
+--- a/station.c
++++ b/station.c
+@@ -61,6 +61,31 @@ 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));
++ }
++ 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 +106,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 +156,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");