nl80211: fix phy/netdev index lookup
[project/iwinfo.git] / iwinfo_nl80211.c
index d7fbd1e36c50ef98f8e4c4a108b51c3a6383c3a1..a708aec5bd21c0d10cac68c511d12e2d17cf3447 100644 (file)
@@ -245,9 +245,6 @@ static const char *nl80211_phy_path_str(const char *phyname)
        int seq = 0;
        DIR *d;
 
-       if (strncmp(phyname, "phy", 3) != 0)
-               return NULL;
-
        phy_id = atoi(phyname + 3);
        buf_len = snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/device", phyname);
        link = realpath(buf, path);
@@ -412,7 +409,8 @@ out:
 static struct nl80211_msg_conveyor * nl80211_msg(const char *ifname,
                                                  int cmd, int flags)
 {
-       int ifidx = -1, phyidx = -1;
+       unsigned int ifidx = 0;
+       int phyidx = -1;
        struct nl80211_msg_conveyor *cv;
 
        if (ifname == NULL)
@@ -421,16 +419,17 @@ static struct nl80211_msg_conveyor * nl80211_msg(const char *ifname,
        if (nl80211_init() < 0)
                return NULL;
 
-       if (!strncmp(ifname, "phy", 3))
-               phyidx = atoi(&ifname[3]);
-       else if (!strncmp(ifname, "radio", 5))
-               phyidx = nl80211_phy_idx_from_uci(ifname);
-
        if (!strncmp(ifname, "mon.", 4))
                ifidx = if_nametoindex(&ifname[4]);
        else
                ifidx = if_nametoindex(ifname);
 
+       if (!ifidx) {
+               phyidx = nl80211_phy_idx_from_phy(ifname);
+               if (phyidx < 0)
+                       phyidx = nl80211_phy_idx_from_uci(ifname);
+       }
+
        /* Valid ifidx must be greater than 0 */
        if ((ifidx <= 0) && (phyidx < 0))
                return NULL;
@@ -718,11 +717,11 @@ static char * nl80211_phy2ifname(const char *ifname)
        /* Only accept phy name of the form phy%d or radio%d */
        if (!ifname)
                return NULL;
-       else if (!strncmp(ifname, "phy", 3))
-               phyidx = atoi(&ifname[3]);
-       else if (!strncmp(ifname, "radio", 5))
-               phyidx = nl80211_phy_idx_from_uci(ifname);
-       else
+
+       phyidx = nl80211_phy_idx_from_phy(ifname);
+       if (phyidx < 0)
+               phyidx = nl80211_phy_idx_from_uci(ifname);;
+       if (phyidx < 0)
                return NULL;
 
        memset(nif, 0, sizeof(nif));
@@ -3526,9 +3525,6 @@ static int nl80211_lookup_phyname(const char *section, char *buf)
 
 static int nl80211_phy_path(const char *phyname, const char **path)
 {
-       if (strncmp(phyname, "phy", 3) != 0)
-               return -1;
-
        if (strchr(phyname, '/'))
                return -1;