madwifi.sh now uses radio%d instead of wifi%d as phy interface name since
https://dev.openwrt.org/changeset/28785

This confuses libiwinfo which cannot find any radio%d interface.
I therefore made a quick hack to replace radio%d to wifi%d in the places where
it seems necessary. This can definitely be done more elegantly, but elegance
and madwifi are already an oxymoron, so I didn't care that much.

Signed-off-by: Daniel Golle <dgo...@allnet.de>
---
 package/iwinfo/src/iwinfo_madwifi.c | 32 ++++++++++++++++++++++++++++----
 1 file changed, 28 insertions(+), 4 deletions(-)

diff --git a/package/iwinfo/src/iwinfo_madwifi.c 
b/package/iwinfo/src/iwinfo_madwifi.c
index 50efcbf..e499fba 100644
--- a/package/iwinfo/src/iwinfo_madwifi.c
+++ b/package/iwinfo/src/iwinfo_madwifi.c
@@ -195,9 +195,24 @@ static struct ISO3166_to_CCode
        { 0x5A57 /* ZW */, 716 }, /* Zimbabwe */
 };
 
+static void unify_phyname(const char *iifname, char *ifname)
+{
+       int s;
+       s = strlen(iifname);
+       if( s >= 6 && strstr(iifname, "radio") == iifname ) {
+               sprintf(ifname, "wifi%s", &(iifname[5]));
+       }
+       else
+       {
+               strncpy(ifname, iifname, 10);
+       }
+}
 
-static int madwifi_wrq(struct iwreq *wrq, const char *ifname, int cmd, void 
*data, size_t len)
+static int madwifi_wrq(struct iwreq *wrq, const char *iifname, int cmd, void 
*data, size_t len)
 {
+       char ifname[12];
+       unify_phyname(iifname, ifname);
+
        strncpy(wrq->ifr_name, ifname, IFNAMSIZ);
 
        if( data != NULL )
@@ -258,14 +273,17 @@ static char * madwifi_isvap(const char *ifname, const 
char *wifiname)
        return ret;
 }
 
-static int madwifi_iswifi(const char *ifname)
+static int madwifi_iswifi(const char *iifname)
 {
        int ret;
+       char ifname[12];
        char path[32];
        struct stat s;
 
        ret = 0;
 
+       unify_phyname(iifname, ifname);
+
        if( strlen(ifname) <= 7 )
        {
                sprintf(path, "/proc/sys/dev/%s/diversity", ifname);
@@ -277,13 +295,16 @@ static int madwifi_iswifi(const char *ifname)
        return ret;
 }
 
-static char * madwifi_ifadd(const char *ifname)
+static char * madwifi_ifadd(const char *iifname)
 {
+       char ifname[12];
        char *wifidev = NULL;
        struct ifreq ifr = { 0 };
        struct ieee80211_clone_params cp = { 0 };
        static char nif[IFNAMSIZ] = { 0 };
 
+       unify_phyname(iifname, ifname);
+
        if( !(wifidev = madwifi_isvap(ifname, NULL)) && madwifi_iswifi(ifname) )
                wifidev = (char *)ifname;
 
@@ -1008,13 +1029,16 @@ int madwifi_get_mbssid_support(const char *ifname, int 
*buf)
        return -1;
 }
 
-int madwifi_get_hardware_id(const char *ifname, char *buf)
+int madwifi_get_hardware_id(const char *iifname, char *buf)
 {
+       char ifname[12];
        char vendor[64];
        char device[64];
        struct iwinfo_hardware_id *ids;
        struct iwinfo_hardware_entry *e;
 
+       unify_phyname(iifname, ifname);
+
        if (wext_get_hardware_id(ifname, buf))
                return iwinfo_hardware_id_from_mtd((struct iwinfo_hardware_id 
*)buf);
 
-- 
1.7.11.4

Attachment: pgptFWhlwJmLh.pgp
Description: PGP signature

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to