1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- --- a/station.c
- +++ b/station.c
- @@ -91,6 +91,33 @@ void parse_bitrate(struct nlattr *bitrat
- " VHT-NSS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_VHT_NSS]));
- }
-
- +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];
- @@ -118,7 +145,10 @@ static int print_sta_handler(struct nl_m
- [NL80211_STA_INFO_LOCAL_PM] = { .type = NLA_U32},
- [NL80211_STA_INFO_PEER_PM] = { .type = NLA_U32},
- [NL80211_STA_INFO_NONPEER_PM] = { .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);
- @@ -165,12 +195,19 @@ 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);
- +
- if (sinfo[NL80211_STA_INFO_T_OFFSET])
- printf("\n\tToffset:\t%lld us",
- (unsigned long long)nla_get_u64(sinfo[NL80211_STA_INFO_T_OFFSET]));
|