aboutsummaryrefslogtreecommitdiffstats
path: root/package/iwinfo
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2012-08-14 10:33:40 +0000
committerJo-Philipp Wich <jow@openwrt.org>2012-08-14 10:33:40 +0000
commite54e4d50d1f600ae2d2e589b4c0545ac39cfed8d (patch)
tree8c42c58ede5fa453a830f4a1538f18ba7d424b1b /package/iwinfo
parent4fffc3882760e3c3b4f59b062a87bef67d1f0572 (diff)
downloadupstream-e54e4d50d1f600ae2d2e589b4c0545ac39cfed8d.tar.gz
upstream-e54e4d50d1f600ae2d2e589b4c0545ac39cfed8d.tar.bz2
upstream-e54e4d50d1f600ae2d2e589b4c0545ac39cfed8d.zip
iwinfo: transparently handle radioX names in madwifi backend
SVN-Revision: 33180
Diffstat (limited to 'package/iwinfo')
-rw-r--r--package/iwinfo/src/iwinfo_madwifi.c25
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;