Changeset 32634


Ignore:
Timestamp:
2012-07-06T11:30:50+02:00 (6 years ago)
Author:
jow
Message:

[package] iwinfo: properly deal with channels 7..12 on 5GHz

Location:
trunk/package/iwinfo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/iwinfo/Makefile

    r32630 r32634  
    88 
    99PKG_NAME:=libiwinfo 
    10 PKG_RELEASE:=34 
     10PKG_RELEASE:=35 
    1111 
    1212PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) 
  • trunk/package/iwinfo/src/iwinfo_nl80211.c

    r32630 r32634  
    352352} 
    353353 
    354 static int nl80211_channel2freq(int channel) 
     354static int nl80211_channel2freq(int channel, const char *band) 
    355355{ 
    356356        if (channel == 14) 
    357357                return 2484; 
    358358 
    359         if (channel < 14) 
     359        if ((channel < 14) && (!band || band[0] != 'a')) 
    360360                return (channel * 5) + 2407; 
    361361 
    362         return (1000 + channel) * 5; 
     362        if (channel > 0) 
     363                return (1000 + channel) * 5; 
     364 
     365        return 0; 
    363366} 
    364367 
     
    764767 
    765768 
    766 static int nl80211_get_channel_cb(struct nl_msg *msg, void *arg) 
    767 { 
    768         int *channel = arg; 
     769static int nl80211_get_frequency_cb(struct nl_msg *msg, void *arg) 
     770{ 
     771        int *freq = arg; 
    769772        struct nlattr **attr = nl80211_parse(msg); 
    770773        struct nlattr *binfo[NL80211_BSS_MAX + 1]; 
     
    776779        if (attr[NL80211_ATTR_BSS] && 
    777780            !nla_parse_nested(binfo, NL80211_BSS_MAX, 
    778                                                   attr[NL80211_ATTR_BSS], bss_policy)) 
     781                              attr[NL80211_ATTR_BSS], bss_policy)) 
    779782        { 
    780783                if (binfo[NL80211_BSS_FREQUENCY]) 
    781                         *channel = 
    782                                 nl80211_freq2channel(nla_get_u32(binfo[NL80211_BSS_FREQUENCY])); 
     784                        *freq = nla_get_u32(binfo[NL80211_BSS_FREQUENCY]); 
    783785        } 
    784786 
     
    786788} 
    787789 
    788 int nl80211_get_channel(const char *ifname, int *buf) 
    789 { 
    790         char *res; 
     790int nl80211_get_frequency(const char *ifname, int *buf) 
     791{ 
     792        char *res, *channel; 
    791793        struct nl80211_msg_conveyor *req; 
    792794 
     
    794796 
    795797        if ((res = nl80211_hostapd_info(ifname)) && 
    796             (res = nl80211_getval(NULL, res, "channel"))) 
    797         { 
    798                 *buf = atoi(res); 
     798            (channel = nl80211_getval(NULL, res, "channel"))) 
     799        { 
     800                *buf = nl80211_channel2freq(atoi(channel), 
     801                                            nl80211_getval(NULL, res, "hw_mode")); 
    799802        } 
    800803        else 
     
    805808                if (req) 
    806809                { 
    807                         nl80211_send(req, nl80211_get_channel_cb, buf); 
     810                        nl80211_send(req, nl80211_get_frequency_cb, buf); 
    808811                        nl80211_free(req); 
    809812                } 
     
    813816} 
    814817 
    815 int nl80211_get_frequency(const char *ifname, int *buf) 
    816 { 
    817         if (!nl80211_get_channel(ifname, buf)) 
    818         { 
    819                 *buf = nl80211_channel2freq(*buf); 
     818int nl80211_get_channel(const char *ifname, int *buf) 
     819{ 
     820        if (!nl80211_get_frequency(ifname, buf)) 
     821        { 
     822                *buf = nl80211_freq2channel(*buf); 
    820823                return 0; 
    821824        } 
Note: See TracChangeset for help on using the changeset viewer.