Changeset 32630


Ignore:
Timestamp:
2012-07-06T03:00:14+02:00 (6 years ago)
Author:
jow
Message:

[package] iwinfo: find channel & frequency via nl80211 or hostapd instead of wext

Location:
trunk/package/iwinfo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/iwinfo/Makefile

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

    r31932 r32630  
    352352} 
    353353 
     354static int nl80211_channel2freq(int channel) 
     355{ 
     356        if (channel == 14) 
     357                return 2484; 
     358 
     359        if (channel < 14) 
     360                return (channel * 5) + 2407; 
     361 
     362        return (1000 + channel) * 5; 
     363} 
     364 
    354365static char * nl80211_getval(const char *ifname, const char *buf, const char *key) 
    355366{ 
     
    752763} 
    753764 
     765 
     766static int nl80211_get_channel_cb(struct nl_msg *msg, void *arg) 
     767{ 
     768        int *channel = arg; 
     769        struct nlattr **attr = nl80211_parse(msg); 
     770        struct nlattr *binfo[NL80211_BSS_MAX + 1]; 
     771 
     772        static struct nla_policy bss_policy[NL80211_BSS_MAX + 1] = { 
     773                [NL80211_BSS_FREQUENCY] = { .type = NLA_U32 }, 
     774        }; 
     775 
     776        if (attr[NL80211_ATTR_BSS] && 
     777            !nla_parse_nested(binfo, NL80211_BSS_MAX, 
     778                                                  attr[NL80211_ATTR_BSS], bss_policy)) 
     779        { 
     780                if (binfo[NL80211_BSS_FREQUENCY]) 
     781                        *channel = 
     782                                nl80211_freq2channel(nla_get_u32(binfo[NL80211_BSS_FREQUENCY])); 
     783        } 
     784 
     785        return NL_SKIP; 
     786} 
     787 
    754788int nl80211_get_channel(const char *ifname, int *buf) 
    755789{ 
    756         char *first; 
    757  
    758         if (!wext_get_channel(ifname, buf)) 
     790        char *res; 
     791        struct nl80211_msg_conveyor *req; 
     792 
     793        *buf = 0; 
     794 
     795        if ((res = nl80211_hostapd_info(ifname)) && 
     796            (res = nl80211_getval(NULL, res, "channel"))) 
     797        { 
     798                *buf = atoi(res); 
     799        } 
     800        else 
     801        { 
     802                res = nl80211_phy2ifname(ifname); 
     803                req = nl80211_msg(res ? res : ifname, NL80211_CMD_GET_SCAN, NLM_F_DUMP); 
     804 
     805                if (req) 
     806                { 
     807                        nl80211_send(req, nl80211_get_channel_cb, buf); 
     808                        nl80211_free(req); 
     809                } 
     810        } 
     811 
     812        return (*buf == 0) ? -1 : 0; 
     813} 
     814 
     815int nl80211_get_frequency(const char *ifname, int *buf) 
     816{ 
     817        if (!nl80211_get_channel(ifname, buf)) 
     818        { 
     819                *buf = nl80211_channel2freq(*buf); 
    759820                return 0; 
    760  
    761         else if ((first = nl80211_phy2ifname(nl80211_ifname2phy(ifname))) != NULL) 
    762                 return wext_get_channel(first, buf); 
     821        } 
    763822 
    764823        return -1; 
    765824} 
    766825 
    767 int nl80211_get_frequency(const char *ifname, int *buf) 
    768 { 
    769         char *first; 
    770  
    771         if (!wext_get_frequency(ifname, buf)) 
    772                 return 0; 
    773  
    774         else if ((first = nl80211_phy2ifname(nl80211_ifname2phy(ifname))) != NULL) 
    775                 return wext_get_frequency(first, buf); 
    776  
    777         return -1; 
    778 } 
    779826 
    780827int nl80211_get_txpower(const char *ifname, int *buf) 
Note: See TracChangeset for help on using the changeset viewer.