Browse Source

iwinfo: nl80211: support looking up phy by path=.. and macaddr=...

Can be used from within mac80211.sh without the need to reference the uci
config directly

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Felix Fietkau 2 years ago
parent
commit
268bb26d2e
1 changed files with 25 additions and 17 deletions
  1. 25 17
      iwinfo_nl80211.c

+ 25 - 17
iwinfo_nl80211.c

@@ -293,15 +293,14 @@ static const char *nl80211_phy_path_str(const char *phyname)
 	return link;
 }
 
-static int nl80211_phy_idx_from_uci_path(struct uci_section *s)
+static int nl80211_phy_idx_from_path(const char *path)
 {
 	char buf[128];
 	struct dirent *e;
-	const char *path, *cur_path;
+	const char *cur_path;
 	int idx = -1;
 	DIR *d;
 
-	path = uci_lookup_option_string(uci_ctx, s, "path");
 	if (!path)
 		return -1;
 
@@ -329,14 +328,12 @@ static int nl80211_phy_idx_from_uci_path(struct uci_section *s)
 	return idx;
 }
 
-static int nl80211_phy_idx_from_uci_macaddr(struct uci_section *s)
+static int nl80211_phy_idx_from_macaddr(const char *opt)
 {
-	const char *opt;
 	char buf[128];
 	int i, idx = -1;
 	glob_t gl;
 
-	opt = uci_lookup_option_string(uci_ctx, s, "macaddr");
 	if (!opt)
 		return -1;
 
@@ -363,12 +360,10 @@ static int nl80211_phy_idx_from_uci_macaddr(struct uci_section *s)
 	return idx;
 }
 
-static int nl80211_phy_idx_from_uci_phy(struct uci_section *s)
+static int nl80211_phy_idx_from_phy(const char *opt)
 {
-	const char *opt;
 	char buf[128];
 
-	opt = uci_lookup_option_string(uci_ctx, s, "phy");
 	if (!opt)
 		return -1;
 
@@ -379,21 +374,27 @@ static int nl80211_phy_idx_from_uci_phy(struct uci_section *s)
 static int nl80211_phy_idx_from_uci(const char *name)
 {
 	struct uci_section *s;
+	const char *opt;
 	int idx = -1;
 
 	s = iwinfo_uci_get_radio(name, "mac80211");
 	if (!s)
-		goto free;
+		goto out;
 
-	idx = nl80211_phy_idx_from_uci_path(s);
+	opt = uci_lookup_option_string(uci_ctx, s, "path");
+	idx = nl80211_phy_idx_from_path(opt);
+	if (idx >= 0)
+		goto out;
 
-	if (idx < 0)
-		idx = nl80211_phy_idx_from_uci_macaddr(s);
+	opt = uci_lookup_option_string(uci_ctx, s, "macaddr");
+	idx = nl80211_phy_idx_from_macaddr(opt);
+	if (idx >= 0)
+		goto out;
 
-	if (idx < 0)
-		idx = nl80211_phy_idx_from_uci_phy(s);
+	opt = uci_lookup_option_string(uci_ctx, s, "phy");
+	idx = nl80211_phy_idx_from_phy(s);
 
-free:
+out:
 	iwinfo_uci_free();
 	return idx;
 }
@@ -3469,7 +3470,14 @@ static int nl80211_lookup_phyname(const char *section, char *buf)
 {
 	int idx;
 
-	if ((idx = nl80211_phy_idx_from_uci(section)) < 0)
+	if (!strncmp(section, "path=", 5))
+		idx = nl80211_phy_idx_from_path(section + 5);
+	else if (!strncmp(section, "macaddr=", 8))
+		idx = nl80211_phy_idx_from_macaddr(section + 8);
+	else
+		idx = nl80211_phy_idx_from_uci(section);
+
+	if (idx < 0)
 		return -1;
 
 	sprintf(buf, "phy%d", idx);