nl80211: don't guess if a name is an ifname
It's too slow to do it all over again and again, especially with e.g. luci constantly polling. Before: $ time iwinfo phy0 info real 0m 0.54s $ time iwinfo radio0 info real 0m 0.70s $ time ubus call luci-rpc getWirelessDevices real 0m 0.67s After: $ time iwinfo phy0 info real 0m 0.04s $ time iwinfo radio0 info real 0m 0.09s $ time ubus call luci-rpc getWirelessDevices real 0m 0.17s Signed-off-by: Andre Heider <a.heider@gmail.com>
This commit is contained in:
parent
c27ce7113e
commit
a77d915568
1 changed files with 13 additions and 3 deletions
|
@ -22,6 +22,7 @@
|
||||||
* Parts of this code are derived from the Linux iw utility.
|
* Parts of this code are derived from the Linux iw utility.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <glob.h>
|
#include <glob.h>
|
||||||
#include <fnmatch.h>
|
#include <fnmatch.h>
|
||||||
|
@ -411,6 +412,15 @@ out:
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool nl80211_is_ifname(const char *name)
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
char buffer[PATH_MAX];
|
||||||
|
|
||||||
|
snprintf(buffer, sizeof(buffer), "/sys/class/net/%s", name);
|
||||||
|
return !lstat(buffer, &st);
|
||||||
|
}
|
||||||
|
|
||||||
static struct nl80211_msg_conveyor * nl80211_msg(const char *ifname,
|
static struct nl80211_msg_conveyor * nl80211_msg(const char *ifname,
|
||||||
int cmd, int flags)
|
int cmd, int flags)
|
||||||
{
|
{
|
||||||
|
@ -426,10 +436,10 @@ static struct nl80211_msg_conveyor * nl80211_msg(const char *ifname,
|
||||||
|
|
||||||
if (!strncmp(ifname, "mon.", 4))
|
if (!strncmp(ifname, "mon.", 4))
|
||||||
ifidx = if_nametoindex(&ifname[4]);
|
ifidx = if_nametoindex(&ifname[4]);
|
||||||
else
|
else if (nl80211_is_ifname(ifname))
|
||||||
ifidx = if_nametoindex(ifname);
|
ifidx = if_nametoindex(ifname);
|
||||||
|
else
|
||||||
if (!ifidx) {
|
{
|
||||||
phyidx = nl80211_phy_idx_from_phy(ifname);
|
phyidx = nl80211_phy_idx_from_phy(ifname);
|
||||||
if (phyidx < 0)
|
if (phyidx < 0)
|
||||||
phyidx = nl80211_phy_idx_from_uci(ifname);
|
phyidx = nl80211_phy_idx_from_uci(ifname);
|
||||||
|
|
Loading…
Reference in a new issue