X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=package%2Fnetwork%2Futils%2Fiw%2Fpatches%2F100-rx_rate.patch;h=cc23e07501dd7709d366fe15dcf00f24ea9f36a4;hb=9d8e3e03df5b1c5b29a15b66ba9845bdf9b68539;hp=642b9f35702b063389c47e14b7d7c2e87425d934;hpb=bd6e12d90470d55fdf18b42e02798488dd6d189f;p=lede.git diff --git a/package/network/utils/iw/patches/100-rx_rate.patch b/package/network/utils/iw/patches/100-rx_rate.patch index 642b9f3570..cc23e07501 100644 --- a/package/network/utils/iw/patches/100-rx_rate.patch +++ b/package/network/utils/iw/patches/100-rx_rate.patch @@ -1,55 +1,15 @@ --- a/station.c +++ b/station.c -@@ -29,13 +29,47 @@ enum plink_actions { - PLINK_ACTION_BLOCK, - }; +@@ -43,7 +43,7 @@ static void print_power_mode(struct nlat + } + } -+static void print_sta_bitrate(struct nlattr *nla, const char *name) -+{ -+ struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1]; -+ -+ static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = { -+ [NL80211_RATE_INFO_BITRATE] = { .type = NLA_U16 }, -+ [NL80211_RATE_INFO_BITRATE32] = { .type = NLA_U32 }, -+ [NL80211_RATE_INFO_MCS] = { .type = NLA_U8 }, -+ [NL80211_RATE_INFO_40_MHZ_WIDTH] = { .type = NLA_FLAG }, -+ [NL80211_RATE_INFO_SHORT_GI] = { .type = NLA_FLAG }, -+ }; -+ -+ if (!nla) -+ return; -+ -+ if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, nla, rate_policy)) { -+ fprintf(stderr, "failed to parse nested rate attributes!\n"); -+ } else { -+ int rate = 0; -+ printf("\n\t%s:\t", name); -+ if (rinfo[NL80211_RATE_INFO_BITRATE32]) -+ rate = nla_get_u32(rinfo[NL80211_RATE_INFO_BITRATE32]); -+ else if (rinfo[NL80211_RATE_INFO_BITRATE]) -+ rate = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]); -+ if (rate > 0) -+ printf("%d.%d MBit/s", rate / 10, rate % 10); -+ -+ if (rinfo[NL80211_RATE_INFO_MCS]) -+ printf(" MCS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_MCS])); -+ if (rinfo[NL80211_RATE_INFO_40_MHZ_WIDTH]) -+ printf(" 40Mhz"); -+ if (rinfo[NL80211_RATE_INFO_SHORT_GI]) -+ printf(" short GI"); -+ } -+} - - static int print_sta_handler(struct nl_msg *msg, void *arg) +-void parse_tx_bitrate(struct nlattr *bitrate_attr, char *buf, int buflen) ++void parse_bitrate(struct nlattr *bitrate_attr, char *buf, int buflen) { - struct nlattr *tb[NL80211_ATTR_MAX + 1]; - struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); - struct nlattr *sinfo[NL80211_STA_INFO_MAX + 1]; -- struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1]; - char mac_addr[20], state_name[10], dev[20]; - struct nl80211_sta_flag_update *sta_flags; - static struct nla_policy stats_policy[NL80211_STA_INFO_MAX + 1] = { -@@ -47,6 +81,7 @@ static int print_sta_handler(struct nl_m + int rate = 0; + char *pos = buf; +@@ -107,6 +107,7 @@ static int print_sta_handler(struct nl_m [NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 }, [NL80211_STA_INFO_T_OFFSET] = { .type = NLA_U64 }, [NL80211_STA_INFO_TX_BITRATE] = { .type = NLA_NESTED }, @@ -57,49 +17,44 @@ [NL80211_STA_INFO_LLID] = { .type = NLA_U16 }, [NL80211_STA_INFO_PLID] = { .type = NLA_U16 }, [NL80211_STA_INFO_PLINK_STATE] = { .type = NLA_U8 }, -@@ -56,14 +91,6 @@ static int print_sta_handler(struct nl_m - { .minlen = sizeof(struct nl80211_sta_flag_update) }, - }; - -- static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = { -- [NL80211_RATE_INFO_BITRATE] = { .type = NLA_U16 }, -- [NL80211_RATE_INFO_BITRATE32] = { .type = NLA_U32 }, -- [NL80211_RATE_INFO_MCS] = { .type = NLA_U8 }, -- [NL80211_RATE_INFO_40_MHZ_WIDTH] = { .type = NLA_FLAG }, -- [NL80211_RATE_INFO_SHORT_GI] = { .type = NLA_FLAG }, -- }; -- - nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), - genlmsg_attrlen(gnlh, 0), NULL); - -@@ -119,28 +146,8 @@ static int print_sta_handler(struct nl_m - printf("\n\tToffset:\t%lld us", - (unsigned long long)nla_get_u64(sinfo[NL80211_STA_INFO_T_OFFSET])); +@@ -177,10 +178,17 @@ static int print_sta_handler(struct nl_m + if (sinfo[NL80211_STA_INFO_TX_BITRATE]) { + char buf[100]; -- if (sinfo[NL80211_STA_INFO_TX_BITRATE]) { -- if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, -- sinfo[NL80211_STA_INFO_TX_BITRATE], rate_policy)) { -- fprintf(stderr, "failed to parse nested rate attributes!\n"); -- } else { -- int rate = 0; -- printf("\n\ttx bitrate:\t"); -- if (rinfo[NL80211_RATE_INFO_BITRATE32]) -- rate = nla_get_u32(rinfo[NL80211_RATE_INFO_BITRATE32]); -- else if (rinfo[NL80211_RATE_INFO_BITRATE]) -- rate = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]); -- if (rate > 0) -- printf("%d.%d MBit/s", rate / 10, rate % 10); -- -- if (rinfo[NL80211_RATE_INFO_MCS]) -- printf(" MCS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_MCS])); -- if (rinfo[NL80211_RATE_INFO_40_MHZ_WIDTH]) -- printf(" 40Mhz"); -- if (rinfo[NL80211_RATE_INFO_SHORT_GI]) -- printf(" short GI"); -- } -- } -+ print_sta_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], "tx bitrate"); -+ print_sta_bitrate(sinfo[NL80211_STA_INFO_RX_BITRATE], "rx bitrate"); +- parse_tx_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], buf, sizeof(buf)); ++ parse_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], buf, sizeof(buf)); + printf("\n\ttx bitrate:\t%s", buf); + } ++ if (sinfo[NL80211_STA_INFO_RX_BITRATE]) { ++ char buf[100]; ++ ++ parse_bitrate(sinfo[NL80211_STA_INFO_RX_BITRATE], buf, sizeof(buf)); ++ printf("\n\trx bitrate:\t%s", buf); ++ } ++ if (sinfo[NL80211_STA_INFO_LLID]) printf("\n\tmesh llid:\t%d", + nla_get_u16(sinfo[NL80211_STA_INFO_LLID])); +--- a/iw.h ++++ b/iw.h +@@ -170,7 +170,7 @@ enum print_ie_type { + void print_ies(unsigned char *ie, int ielen, bool unknown, + enum print_ie_type ptype); + +-void parse_tx_bitrate(struct nlattr *bitrate_attr, char *buf, int buflen); ++void parse_bitrate(struct nlattr *bitrate_attr, char *buf, int buflen); + + DECLARE_SECTION(set); + DECLARE_SECTION(get); +--- a/link.c ++++ b/link.c +@@ -165,7 +165,7 @@ static int print_link_sta(struct nl_msg + if (sinfo[NL80211_STA_INFO_TX_BITRATE]) { + char buf[100]; + +- parse_tx_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], buf, sizeof(buf)); ++ parse_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], buf, sizeof(buf)); + printf("\ttx bitrate: %s\n", buf); + } +