packages: sort network related packages into package/network/
[openwrt.git] / package / network / utils / iw / patches / 100-rx_rate.patch
1 --- a/station.c
2 +++ b/station.c
3 @@ -29,13 +29,47 @@ enum plink_actions {
4         PLINK_ACTION_BLOCK,
5  };
6  
7 +static void print_sta_bitrate(struct nlattr *nla, const char *name)
8 +{
9 +       struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1];
10 +
11 +       static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = {
12 +               [NL80211_RATE_INFO_BITRATE] = { .type = NLA_U16 },
13 +               [NL80211_RATE_INFO_BITRATE32] = { .type = NLA_U32 },
14 +               [NL80211_RATE_INFO_MCS] = { .type = NLA_U8 },
15 +               [NL80211_RATE_INFO_40_MHZ_WIDTH] = { .type = NLA_FLAG },
16 +               [NL80211_RATE_INFO_SHORT_GI] = { .type = NLA_FLAG },
17 +       };
18 +
19 +       if (!nla)
20 +               return;
21 +
22 +       if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, nla, rate_policy)) {
23 +               fprintf(stderr, "failed to parse nested rate attributes!\n");
24 +       } else {
25 +               int rate = 0;
26 +               printf("\n\t%s:\t", name);
27 +               if (rinfo[NL80211_RATE_INFO_BITRATE32])
28 +                       rate = nla_get_u32(rinfo[NL80211_RATE_INFO_BITRATE32]);
29 +               else if (rinfo[NL80211_RATE_INFO_BITRATE])
30 +                       rate = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]);
31 +               if (rate > 0)
32 +                       printf("%d.%d MBit/s", rate / 10, rate % 10);
33 +
34 +               if (rinfo[NL80211_RATE_INFO_MCS])
35 +                       printf(" MCS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_MCS]));
36 +               if (rinfo[NL80211_RATE_INFO_40_MHZ_WIDTH])
37 +                       printf(" 40Mhz");
38 +               if (rinfo[NL80211_RATE_INFO_SHORT_GI])
39 +                       printf(" short GI");
40 +       }
41 +}
42  
43  static int print_sta_handler(struct nl_msg *msg, void *arg)
44  {
45         struct nlattr *tb[NL80211_ATTR_MAX + 1];
46         struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
47         struct nlattr *sinfo[NL80211_STA_INFO_MAX + 1];
48 -       struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1];
49         char mac_addr[20], state_name[10], dev[20];
50         struct nl80211_sta_flag_update *sta_flags;
51         static struct nla_policy stats_policy[NL80211_STA_INFO_MAX + 1] = {
52 @@ -47,6 +81,7 @@ static int print_sta_handler(struct nl_m
53                 [NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 },
54                 [NL80211_STA_INFO_T_OFFSET] = { .type = NLA_U64 },
55                 [NL80211_STA_INFO_TX_BITRATE] = { .type = NLA_NESTED },
56 +               [NL80211_STA_INFO_RX_BITRATE] = { .type = NLA_NESTED },
57                 [NL80211_STA_INFO_LLID] = { .type = NLA_U16 },
58                 [NL80211_STA_INFO_PLID] = { .type = NLA_U16 },
59                 [NL80211_STA_INFO_PLINK_STATE] = { .type = NLA_U8 },
60 @@ -56,14 +91,6 @@ static int print_sta_handler(struct nl_m
61                         { .minlen = sizeof(struct nl80211_sta_flag_update) },
62         };
63  
64 -       static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = {
65 -               [NL80211_RATE_INFO_BITRATE] = { .type = NLA_U16 },
66 -               [NL80211_RATE_INFO_BITRATE32] = { .type = NLA_U32 },
67 -               [NL80211_RATE_INFO_MCS] = { .type = NLA_U8 },
68 -               [NL80211_RATE_INFO_40_MHZ_WIDTH] = { .type = NLA_FLAG },
69 -               [NL80211_RATE_INFO_SHORT_GI] = { .type = NLA_FLAG },
70 -       };
71 -
72         nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
73                   genlmsg_attrlen(gnlh, 0), NULL);
74  
75 @@ -119,28 +146,8 @@ static int print_sta_handler(struct nl_m
76                 printf("\n\tToffset:\t%lld us",
77                         (unsigned long long)nla_get_u64(sinfo[NL80211_STA_INFO_T_OFFSET]));
78  
79 -       if (sinfo[NL80211_STA_INFO_TX_BITRATE]) {
80 -               if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX,
81 -                                    sinfo[NL80211_STA_INFO_TX_BITRATE], rate_policy)) {
82 -                       fprintf(stderr, "failed to parse nested rate attributes!\n");
83 -               } else {
84 -                       int rate = 0;
85 -                       printf("\n\ttx bitrate:\t");
86 -                       if (rinfo[NL80211_RATE_INFO_BITRATE32])
87 -                               rate = nla_get_u32(rinfo[NL80211_RATE_INFO_BITRATE32]);
88 -                       else if (rinfo[NL80211_RATE_INFO_BITRATE])
89 -                               rate = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]);
90 -                       if (rate > 0)
91 -                               printf("%d.%d MBit/s", rate / 10, rate % 10);
92 -
93 -                       if (rinfo[NL80211_RATE_INFO_MCS])
94 -                               printf(" MCS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_MCS]));
95 -                       if (rinfo[NL80211_RATE_INFO_40_MHZ_WIDTH])
96 -                               printf(" 40Mhz");
97 -                       if (rinfo[NL80211_RATE_INFO_SHORT_GI])
98 -                               printf(" short GI");
99 -               }
100 -       }
101 +       print_sta_bitrate(sinfo[NL80211_STA_INFO_TX_BITRATE], "tx bitrate");
102 +       print_sta_bitrate(sinfo[NL80211_STA_INFO_RX_BITRATE], "rx bitrate");
103  
104         if (sinfo[NL80211_STA_INFO_LLID])
105                 printf("\n\tmesh llid:\t%d",