One phy can have more than one wifi-iface. When getting just the
phy infos, don't get iface specific values of some random iface
from that phy, that's just not right and confusing.

Note:
This removes ssid, bssid, mode, quality_max and encryption
from the phy result table of e.g:
$ ubus call iwinfo info '{"device":"phy0"}'

But there're of course still present of for ifaces, e.g.:
$ ubus call iwinfo info '{"device":"wlan0"}'`

And more importantly this is unchanged:
$ ubus call luci-rpc getWirelessDevices

(Which has iface _and_ phy iwinfo tables, where the latter already
doesn't include the values removed here).

Signed-off-by: Andre Heider <a.hei...@gmail.com>
---
 iwinfo_nl80211.c | 37 +++++++++++++++++++++++++------------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index 77a65ed..1d59676 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -819,13 +819,12 @@ static int nl80211_get_mode_cb(struct nl_msg *msg, void 
*arg)
 
 static int nl80211_get_mode(const char *ifname, int *buf)
 {
-       char *res;
-
        *buf = IWINFO_OPMODE_UNKNOWN;
 
-       res = nl80211_phy2ifname(ifname);
+       if (!nl80211_is_ifname(ifname))
+               return -1;
 
-       nl80211_request(res ? res : ifname, NL80211_CMD_GET_INTERFACE, 0,
+       nl80211_request(ifname, NL80211_CMD_GET_INTERFACE, 0,
                        nl80211_get_mode_cb, buf);
 
        return (*buf == IWINFO_OPMODE_UNKNOWN) ? -1 : 0;
@@ -1242,14 +1241,15 @@ static int nl80211_get_ssid_bssid_cb(struct nl_msg 
*msg, void *arg)
 
 static int nl80211_get_ssid(const char *ifname, char *buf)
 {
-       char *res;
        struct nl80211_ssid_bssid sb = { .ssid = (unsigned char *)buf };
 
+       if (!nl80211_is_ifname(ifname))
+               return -1;
+
        /* try to find ssid from scan dump results */
-       res = nl80211_phy2ifname(ifname);
        sb.ssid[0] = 0;
 
-       nl80211_request(res ? res : ifname, NL80211_CMD_GET_SCAN, NLM_F_DUMP,
+       nl80211_request(ifname, NL80211_CMD_GET_SCAN, NLM_F_DUMP,
                        nl80211_get_ssid_bssid_cb, &sb);
 
        /* failed, try to find from hostapd info */
@@ -1259,7 +1259,7 @@ static int nl80211_get_ssid(const char *ifname, char *buf)
 
        /* failed, try to obtain Mesh ID */
        if (sb.ssid[0] == 0)
-               iwinfo_ubus_query(res ? res : ifname, "mesh_id",
+               iwinfo_ubus_query(ifname, "mesh_id",
                                  sb.ssid, IWINFO_ESSID_MAX_SIZE + 1);
 
        return (sb.ssid[0] == 0) ? -1 : 0;
@@ -1267,18 +1267,19 @@ static int nl80211_get_ssid(const char *ifname, char 
*buf)
 
 static int nl80211_get_bssid(const char *ifname, char *buf)
 {
-       char *res, bssid[sizeof("FF:FF:FF:FF:FF:FF\0")];
+       char bssid[sizeof("FF:FF:FF:FF:FF:FF\0")];
        struct nl80211_ssid_bssid sb = { };
 
-       res = nl80211_phy2ifname(ifname);
+       if (!nl80211_is_ifname(ifname))
+               return -1;
 
        /* try to obtain mac address via NL80211_CMD_GET_INTERFACE */
-       nl80211_request(res ? res : ifname, NL80211_CMD_GET_INTERFACE, 0,
+       nl80211_request(ifname, NL80211_CMD_GET_INTERFACE, 0,
                        nl80211_get_macaddr_cb, &sb);
 
        /* failed, try to find bssid from scan dump results */
        if (sb.bssid[0] == 0)
-               nl80211_request(res ? res : ifname,
+               nl80211_request(ifname,
                                NL80211_CMD_GET_SCAN, NLM_F_DUMP,
                                nl80211_get_ssid_bssid_cb, &sb);
 
@@ -1570,6 +1571,9 @@ static int nl80211_get_bitrate(const char *ifname, int 
*buf)
 {
        struct nl80211_rssi_rate rr;
 
+       if (!nl80211_is_ifname(ifname))
+               return -1;
+
        nl80211_fill_signal(ifname, &rr);
 
        if (rr.rate_samples)
@@ -1585,6 +1589,9 @@ static int nl80211_get_signal(const char *ifname, int 
*buf)
 {
        struct nl80211_rssi_rate rr;
 
+       if (!nl80211_is_ifname(ifname))
+               return -1;
+
        nl80211_fill_signal(ifname, &rr);
 
        if (rr.rssi_samples)
@@ -1674,6 +1681,9 @@ static int nl80211_get_quality(const char *ifname, int 
*buf)
 
 static int nl80211_get_quality_max(const char *ifname, int *buf)
 {
+       if (!nl80211_is_ifname(ifname))
+               return -1;
+
        /* The cfg80211 wext compat layer assumes a maximum
         * quality of 70 */
        *buf = 70;
@@ -1813,6 +1823,9 @@ static int nl80211_get_encryption(const char *ifname, 
char *buf)
 
        struct iwinfo_crypto_entry *c = (struct iwinfo_crypto_entry *)buf;
 
+       if (!nl80211_is_ifname(ifname))
+               return -1;
+
        /* WPA supplicant */
        if (nl80211_wpactl_query(ifname,
                        "pairwise_cipher", wpa_pairwise,  sizeof(wpa_pairwise),
-- 
2.35.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to