From 0f9ee2bea2dfebbc34ba138b96fd2f51a0343a6e Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 21 Nov 2009 01:40:48 +0000 Subject: [PATCH] libs/iwinfo: support freqlist() on madwifi master devices --- libs/iwinfo/src/iwinfo_madwifi.c | 27 +++++++++++++++++++++++++-- 1 file 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)); -- 2.11.0