iwinfo: nl80211: use new path lookup function for nl80211_phy_idx_from_uci_path

Fixes issues with multiple phy instances of one device

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2021-06-09 14:03:29 +02:00
parent aa0e3c4bbe
commit dd6d6d2dec

View file

@ -295,10 +295,9 @@ static const char *nl80211_phy_path_str(const char *phyname)
static int nl80211_phy_idx_from_uci_path(struct uci_section *s)
{
size_t linklen, pathlen;
char buf[128], *link;
char buf[128];
struct dirent *e;
const char *path;
const char *path, *cur_path;
int idx = -1;
DIR *d;
@ -306,39 +305,27 @@ static int nl80211_phy_idx_from_uci_path(struct uci_section *s)
if (!path)
return -1;
if ((d = opendir("/sys/class/ieee80211")) != NULL)
{
while ((e = readdir(d)) != NULL)
{
snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/device", e->d_name);
d = opendir("/sys/class/ieee80211");
if (!d)
return -1;
link = realpath(buf, NULL);
while ((e = readdir(d)) != NULL) {
cur_path = nl80211_phy_path_str(e->d_name);
if (!cur_path)
continue;
if (link == NULL)
continue;
if (strcmp(cur_path, path) != 0)
continue;
linklen = strlen(link);
pathlen = strlen(path);
snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", e->d_name);
idx = nl80211_readint(buf);
if (pathlen >= linklen || strcmp(link + (linklen - pathlen), path))
linklen = 0;
free(link);
if (linklen == 0)
continue;
snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", e->d_name);
idx = nl80211_readint(buf);
if (idx >= 0)
break;
}
closedir(d);
if (idx >= 0)
break;
}
closedir(d);
return idx;
}