From: Jo-Philipp Wich <jow@openwrt.org>
Date: Tue, 14 Aug 2012 10:33:40 +0000 (+0000)
Subject: iwinfo: transparently handle radioX names in madwifi backend
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=e54e4d50d1f600ae2d2e589b4c0545ac39cfed8d;p=openwrt%2Fstaging%2Fdedeckeh.git

iwinfo: transparently handle radioX names in madwifi backend

SVN-Revision: 33180
---

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;