summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2022-09-22 14:22:57 +0200
committerFelix Fietkau <nbd@nbd.name>2022-09-22 14:42:45 +0200
commitb7f9f06e159470fd64917b5e12548db76ccb7805 (patch)
treec7a8178a7f3701063ba045110cc82c7d489ff989
parent1f695d9c7f823ff8bd7a65138d98da8dfcb1cc24 (diff)
downloadiwinfo-b7f9f06e159470fd64917b5e12548db76ccb7805.tar.gz
nl80211: fix phy/netdev index lookup
Don't assume a fixed naming pattern. Check all options in this order: - netdev - phy name - wifi device in uci Use the first one that matches Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--iwinfo_nl80211.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index 15831c9..a708aec 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -409,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)
@@ -418,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;
@@ -715,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));