Changeset 31391


Ignore:
Timestamp:
Feb 14, 2017, 1:02:06 PM (7 days ago)
Author:
brainslayer
Message:

filter with driver settings

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/router/libutils/mac80211info.c

    r31382 r31391  
    10011001}
    10021002
    1003 static void check_validchannels(struct wifi_channels *list, int bw)
     1003static void check_validchannels(struct wifi_channels *list, int bw, int bw40, int bw80, int bw160)
    10041004{
    10051005        int distance = 10;
     
    10731073                                }
    10741074                        }
    1075                         if (a == 2) {
     1075                        if (a == 2)
    10761076                                if (chan->lul && !isinlist(list, chan->freq, chan->freq - ((distance << a) + (distance << (a - 1))))) {
    10771077                                        fprintf(stderr, "freq %d has no %s parent at %d, disable lul / ll\n", chan->freq, debugstr[a - 1], chan->freq - ((distance << a) + (distance << (a - 1))));
     
    10851085                                        chan->uul = 0;
    10861086                                        chan->uuu = 0;
     1087                                }
     1088                                if (!bw80) {
     1089                                        chan->ulu = 0;
     1090                                        chan->uul = 0;
     1091                                        chan->uuu = 0;
     1092                                        chan->lul = 0;
     1093                                        chan->llu = 0;
     1094                                        chan->lll = 0;
    10871095                                }
    10881096                        }
     
    11071115
    11081116                                }
     1117                                if (!bw160) {
     1118                                        chan->uul = 0;
     1119                                        chan->uuu = 0;
     1120                                        chan->llu = 0;
     1121                                        chan->lll = 0;
     1122                                }
    11091123                        }
    11101124                }
     
    11221136{
    11231137        struct nlattr *tb[NL80211_FREQUENCY_ATTR_MAX + 1];
     1138        struct nlattr *tb_band[NL80211_BAND_ATTR_MAX + 1];
    11241139        struct nl_msg *msg;
    11251140        struct nlattr *bands, *band, *freqlist, *freq;
     
    11361151        int rrdcount = 0;
    11371152        int super = 0;
     1153        bool width_40 = false;
     1154        bool width_160 = false;
     1155        bool width_80 = false;
     1156
    11381157        if (has_ad(interface)) {
    11391158                return ghz60channels;
     
    11671186                }
    11681187                nla_for_each_nested(band, bands, rem) {
     1188
     1189                        nla_parse(tb_band, NL80211_BAND_ATTR_MAX, nla_data(band), nla_len(band), NULL);
     1190
     1191                        if (tb_band[NL80211_BAND_ATTR_HT_CAPA]) {
     1192                                __u16 cap = nla_get_u16(tb_band[NL80211_BAND_ATTR_HT_CAPA]);
     1193
     1194                                if (cap & BIT(1))
     1195                                        width_40 = true;
     1196                        }
     1197
     1198                        if (tb_band[NL80211_BAND_ATTR_VHT_CAPA]) {
     1199                                __u32 capa;
     1200
     1201                                width_80 = true;
     1202
     1203                                capa = nla_get_u32(tb_band[NL80211_BAND_ATTR_VHT_CAPA]);
     1204                                switch ((capa >> 2) & 3) {
     1205                                case 2:
     1206                                        /* width_80p80 = true; */
     1207                                        /* fall through */
     1208                                case 1:
     1209                                        width_160 = true;
     1210                                break;
     1211                                }
     1212                        }
     1213
     1214
     1215
    11691216                        freqlist = nla_find(nla_data(band), nla_len(band), NL80211_BAND_ATTR_FREQS);
    11701217                        if (!freqlist)
     
    13421389                free(rd);
    13431390        nlmsg_free(msg);
    1344         check_validchannels(list, max_bandwidth_khz);
     1391        check_validchannels(list, max_bandwidth_khz, width_40,width_80,width_160);
    13451392        return list;
    13461393out:
Note: See TracChangeset for help on using the changeset viewer.