diff options
author | Felix Fietkau <nbd@nbd.name> | 2022-09-22 14:22:57 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2022-09-22 14:42:45 +0200 |
commit | b7f9f06e159470fd64917b5e12548db76ccb7805 (patch) | |
tree | c7a8178a7f3701063ba045110cc82c7d489ff989 | |
parent | 1f695d9c7f823ff8bd7a65138d98da8dfcb1cc24 (diff) | |
download | iwinfo-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.c | 24 |
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)); |