Browse Source

nl80211: simplify iterating over phy's devices

There's no need to iterate over all devices in /sys/class/net and check
if the phy index matches, sysfs already provides per phy devices.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Andre Heider 1 year ago
parent
commit
6194aaf052
1 changed files with 9 additions and 12 deletions
  1. 9 12
      iwinfo_nl80211.c

+ 9 - 12
iwinfo_nl80211.c

@@ -826,24 +826,21 @@ static char * nl80211_phy2ifname(const char *ifname)
 
 	memset(nif, 0, sizeof(nif));
 
-	if ((d = opendir("/sys/class/net")) != NULL)
+	snprintf(buffer, sizeof(buffer),
+	         "/sys/class/ieee80211/phy%d/device/net", phyidx);
+
+	if ((d = opendir(buffer)) != NULL)
 	{
 		while ((e = readdir(d)) != NULL)
 		{
 			snprintf(buffer, sizeof(buffer),
-			         "/sys/class/net/%s/phy80211/index", e->d_name);
+			         "/sys/class/net/%s/ifindex", e->d_name);
 
-			if (nl80211_readint(buffer) == phyidx)
+			if ((cifidx = nl80211_readint(buffer)) >= 0 &&
+			    ((ifidx < 0) || (cifidx < ifidx)))
 			{
-				snprintf(buffer, sizeof(buffer),
-				         "/sys/class/net/%s/ifindex", e->d_name);
-
-				if ((cifidx = nl80211_readint(buffer)) >= 0 &&
-				    ((ifidx < 0) || (cifidx < ifidx)))
-				{
-					ifidx = cifidx;
-					strncpy(nif, e->d_name, sizeof(nif) - 1);
-				}
+				ifidx = cifidx;
+				strncpy(nif, e->d_name, sizeof(nif) - 1);
 			}
 		}