diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-11-21 01:40:48 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-11-21 01:40:48 +0000 |
commit | 0f9ee2bea2dfebbc34ba138b96fd2f51a0343a6e (patch) | |
tree | a4ee2079fd6b08b2a9fedd75885b9e53045b0188 /libs | |
parent | 1ee7f5ed7944704a20e0d7472f33fa57750edf87 (diff) |
libs/iwinfo: support freqlist() on madwifi master devices
Diffstat (limited to 'libs')
-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 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)); |