nl80211: fix issues with renamed wiphy and multiple phy per device
Remove the assumption that phy names follow the format phy%d and instead look up the phy index from sysfs properly Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
4a43b0d40b
commit
0496c722f1
1 changed files with 11 additions and 6 deletions
|
@ -241,11 +241,15 @@ static const char *nl80211_phy_path_str(const char *phyname)
|
||||||
int buf_len, offset;
|
int buf_len, offset;
|
||||||
struct dirent *e;
|
struct dirent *e;
|
||||||
char buf[128], *link;
|
char buf[128], *link;
|
||||||
int phy_id;
|
int phy_idx;
|
||||||
int seq = 0;
|
int seq = 0;
|
||||||
DIR *d;
|
DIR *d;
|
||||||
|
|
||||||
phy_id = atoi(phyname + 3);
|
snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", phyname);
|
||||||
|
phy_idx = nl80211_readint(buf);
|
||||||
|
if (phy_idx < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
buf_len = snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/device", phyname);
|
buf_len = snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/device", phyname);
|
||||||
link = realpath(buf, path);
|
link = realpath(buf, path);
|
||||||
if (!link)
|
if (!link)
|
||||||
|
@ -267,13 +271,14 @@ static const char *nl80211_phy_path_str(const char *phyname)
|
||||||
return link;
|
return link;
|
||||||
|
|
||||||
while ((e = readdir(d)) != NULL) {
|
while ((e = readdir(d)) != NULL) {
|
||||||
int cur_id;
|
int cur_idx;
|
||||||
|
|
||||||
if (strncmp(e->d_name, "phy", 3) != 0)
|
snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", e->d_name);
|
||||||
|
cur_idx = nl80211_readint(buf);
|
||||||
|
if (cur_idx < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
cur_id = atoi(e->d_name + 3);
|
if (cur_idx >= phy_idx)
|
||||||
if (cur_id >= phy_id)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
seq++;
|
seq++;
|
||||||
|
|
Loading…
Add table
Reference in a new issue