summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-07-23 17:33:09 +0200
committerJo-Philipp Wich <jo@mein.io>2018-07-23 18:00:31 +0200
commit44956b780db9aa71ac86152577275ff235d7afef (patch)
treefab17ecd015d9a9acbfa2d3a35087d1e1a1d5db4
parent49c0a4b1a2ad6f7dbb869d22b26c8d000d2ebe64 (diff)
downloadiwinfo-44956b780db9aa71ac86152577275ff235d7afef.tar.gz
nl80211: add support for obtaining bssid from NL80211_CMD_GET_INTERFACE
Fixes missing "BSSID" on Mesh Point interfaces Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--iwinfo_nl80211.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index d135d30..fe307ab 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -1026,6 +1026,20 @@ struct nl80211_ssid_bssid {
unsigned char bssid[7];
};
+static int nl80211_get_macaddr_cb(struct nl_msg *msg, void *arg)
+{
+ struct nl80211_ssid_bssid *sb = arg;
+ struct nlattr **tb = nl80211_parse(msg);
+
+ if (tb[NL80211_ATTR_MAC]) {
+ sb->bssid[0] = 1;
+ memcpy(sb->bssid + 1, nla_data(tb[NL80211_ATTR_MAC]),
+ sizeof(sb->bssid) - 1);
+ }
+
+ return NL_SKIP;
+}
+
static int nl80211_get_ssid_bssid_cb(struct nl_msg *msg, void *arg)
{
int ielen;
@@ -1109,11 +1123,17 @@ static int nl80211_get_bssid(const char *ifname, char *buf)
char *res, bssid[sizeof("FF:FF:FF:FF:FF:FF\0")];
struct nl80211_ssid_bssid sb = { };
- /* try to find bssid from scan dump results */
res = nl80211_phy2ifname(ifname);
- nl80211_request(res ? res : ifname, NL80211_CMD_GET_SCAN, NLM_F_DUMP,
- nl80211_get_ssid_bssid_cb, &sb);
+ /* try to obtain mac address via NL80211_CMD_GET_INTERFACE */
+ nl80211_request(res ? res : 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_CMD_GET_SCAN, NLM_F_DUMP,
+ nl80211_get_ssid_bssid_cb, &sb);
/* failed, try to find mac from hostapd info */
if ((sb.bssid[0] == 0) &&