From: Jo-Philipp Wich Date: Sat, 21 Nov 2009 01:40:48 +0000 (+0000) Subject: libs/iwinfo: support freqlist() on madwifi master devices X-Git-Tag: 0.10.0~938 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=0f9ee2bea2dfebbc34ba138b96fd2f51a0343a6e libs/iwinfo: support freqlist() on madwifi master devices --- diff --git a/libs/iwinfo/src/iwinfo_madwifi.c b/libs/iwinfo/src/iwinfo_madwifi.c index 99c02dcd0..83829cf39 100644 --- a/libs/iwinfo/src/iwinfo_madwifi.c +++ b/libs/iwinfo/src/iwinfo_madwifi.c @@ -497,16 +497,39 @@ int madwifi_get_scanlist(const char *ifname, char *buf, int *len) int madwifi_get_freqlist(const char *ifname, char *buf, int *len) { int i, bl; + int rc = -1; + char cmd[256]; struct ieee80211req_chaninfo chans; struct iwinfo_freqlist_entry entry; - if( get80211priv(ifname, IEEE80211_IOCTL_GETCHANINFO, &chans, sizeof(chans)) >= 0 ) + /* A wifiX device? */ + if( madwifi_iswifi(ifname) ) + { + sprintf(cmd, "wlanconfig ath-channels create nounit " + "wlandev %s wlanmode ap >/dev/null", ifname); + + if( ! WEXITSTATUS(system(cmd)) ) + { + rc = get80211priv("ath-channels", IEEE80211_IOCTL_GETCHANINFO, &chans, sizeof(chans)); + (void) WEXITSTATUS(system("wlanconfig ath-channels destroy")); + } + } + + /* Its an athX ... */ + else if( madwifi_isvap(ifname, NULL) ) + { + rc = get80211priv(ifname, IEEE80211_IOCTL_GETCHANINFO, &chans, sizeof(chans)); + } + + + /* Got chaninfo? */ + if( rc >= 0 ) { bl = 0; for( i = 0; i < chans.ic_nchans; i++ ) { - entry.mhz = (int)(chans.ic_chans[i].ic_freq / 1000); + entry.mhz = chans.ic_chans[i].ic_freq; entry.channel = chans.ic_chans[i].ic_ieee; memcpy(&buf[bl], &entry, sizeof(struct iwinfo_freqlist_entry));