diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2012-08-14 10:33:40 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-08-14 10:33:40 +0000 |
commit | 07f112a8e7f0dd8120d8d797a0a21e3d131add47 (patch) | |
tree | 6822e998d059b9300d47af084b1821bb466e281d /package/iwinfo | |
parent | 4867ab54900454f7a4eea8e56dc91cf72cf8126c (diff) | |
download | upstream-07f112a8e7f0dd8120d8d797a0a21e3d131add47.tar.gz upstream-07f112a8e7f0dd8120d8d797a0a21e3d131add47.tar.bz2 upstream-07f112a8e7f0dd8120d8d797a0a21e3d131add47.zip |
[package] iwinfo: transparently handle radioX names in madwifi backend
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33180 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/iwinfo')
-rw-r--r-- | package/iwinfo/src/iwinfo_madwifi.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/package/iwinfo/src/iwinfo_madwifi.c b/package/iwinfo/src/iwinfo_madwifi.c index 50efcbfd40..832f40bd3d 100644 --- a/package/iwinfo/src/iwinfo_madwifi.c +++ b/package/iwinfo/src/iwinfo_madwifi.c @@ -196,6 +196,18 @@ static struct ISO3166_to_CCode }; +static const char * madwifi_phyname(const char *ifname) +{ + static char phyname[IFNAMSIZ]; + + if (strlen(ifname) > 5 && !strncmp(ifname, "radio", 5)) + snprintf(phyname, sizeof(phyname), "wifi%s", ifname + 5); + else + snprintf(phyname, sizeof(phyname), "%s", ifname); + + return (const char *)phyname; +} + static int madwifi_wrq(struct iwreq *wrq, const char *ifname, int cmd, void *data, size_t len) { strncpy(wrq->ifr_name, ifname, IFNAMSIZ); @@ -263,12 +275,14 @@ static int madwifi_iswifi(const char *ifname) int ret; char path[32]; struct stat s; + const char *phy; ret = 0; + phy = madwifi_phyname(ifname); - if( strlen(ifname) <= 7 ) + if( strlen(phy) <= 7 ) { - sprintf(path, "/proc/sys/dev/%s/diversity", ifname); + sprintf(path, "/proc/sys/dev/%s/diversity", phy); if( ! stat(path, &s) ) ret = (s.st_mode & S_IFREG); @@ -279,13 +293,13 @@ static int madwifi_iswifi(const char *ifname) static char * madwifi_ifadd(const char *ifname) { - char *wifidev = NULL; + const char *wifidev = NULL; struct ifreq ifr = { 0 }; struct ieee80211_clone_params cp = { 0 }; static char nif[IFNAMSIZ] = { 0 }; if( !(wifidev = madwifi_isvap(ifname, NULL)) && madwifi_iswifi(ifname) ) - wifidev = (char *)ifname; + wifidev = madwifi_phyname(ifname); if( wifidev ) { @@ -1014,8 +1028,9 @@ int madwifi_get_hardware_id(const char *ifname, char *buf) char device[64]; struct iwinfo_hardware_id *ids; struct iwinfo_hardware_entry *e; + const char *phy = madwifi_phyname(ifname); - if (wext_get_hardware_id(ifname, buf)) + if (wext_get_hardware_id(phy, buf)) return iwinfo_hardware_id_from_mtd((struct iwinfo_hardware_id *)buf); return 0; |