diff options
Diffstat (limited to 'libs/iwinfo')
-rw-r--r-- | libs/iwinfo/src/iwinfo_madwifi.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/libs/iwinfo/src/iwinfo_madwifi.c b/libs/iwinfo/src/iwinfo_madwifi.c index 99c02dcd05..83829cf399 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)); |