From 813f61e48b9b1a76cb55f3b4a229bf98d3cd53a9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Mon, 28 Sep 2015 13:39:15 +0200 Subject: [PATCH 1/1] nl80211: read TX power using NL80211_CMD_GET_INTERFACE MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit With the mac80211 commit d55d0d598e66 ("nl80211: put current TX power in interface info") it is possible now to get TX power using nl80211. As we don't really support any wext-only drivers it doesn't make sense to leave wext as a fallback. Signed-off-by: Rafał Miłecki --- include/iwinfo/utils.h | 4 ++++ iwinfo_nl80211.c | 31 ++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/include/iwinfo/utils.h b/include/iwinfo/utils.h index 95f9238..159fd49 100644 --- a/include/iwinfo/utils.h +++ b/include/iwinfo/utils.h @@ -37,6 +37,10 @@ int iwinfo_ioctl(int cmd, void *ifr); int iwinfo_dbm2mw(int in); int iwinfo_mw2dbm(int in); +static inline int iwinfo_mbm2dbm(int gain) +{ + return gain / 100; +} int iwinfo_ifup(const char *ifname); int iwinfo_ifdown(const char *ifname); diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c index 7aaae6b..a65ed1e 100644 --- a/iwinfo_nl80211.c +++ b/iwinfo_nl80211.c @@ -1188,22 +1188,35 @@ static int nl80211_get_channel(const char *ifname, int *buf) return -1; } +static int nl80211_get_txpower_cb(struct nl_msg *msg, void *arg) +{ + int *buf = arg; + struct nlattr **tb = nl80211_parse(msg); + + if (tb[NL80211_ATTR_WIPHY_TX_POWER_LEVEL]) + *buf = iwinfo_mbm2dbm(nla_get_u32(tb[NL80211_ATTR_WIPHY_TX_POWER_LEVEL])); + + return NL_SKIP; +} static int nl80211_get_txpower(const char *ifname, int *buf) { -#if 0 char *res; - char path[PATH_MAX]; + struct nl80211_msg_conveyor *req; - res = nl80211_ifname2phy(ifname); - snprintf(path, sizeof(path), "/sys/kernel/debug/ieee80211/%s/power", - res ? res : ifname); + res = nl80211_phy2ifname(ifname); + req = nl80211_msg(res ? res : ifname, NL80211_CMD_GET_INTERFACE, 0); - if ((*buf = nl80211_readint(path)) > -1) - return 0; -#endif + if (req) + { + *buf = 0; + nl80211_send(req, nl80211_get_txpower_cb, buf); + nl80211_free(req); + if (*buf) + return 0; + } - return wext_ops.txpower(ifname, buf); + return -1; } -- 2.11.0