summaryrefslogtreecommitdiffstats
path: root/package/network/utils/iw/patches/100-rx_rate.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/utils/iw/patches/100-rx_rate.patch')
-rw-r--r--package/network/utils/iw/patches/100-rx_rate.patch135
1 files changed, 45 insertions, 90 deletions
diff --git a/package/network/utils/iw/patches/100-rx_rate.patch b/package/network/utils/iw/patches/100-rx_rate.patch
index 642b9f357..cc23e0750 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);
+ }
+