nl80211: put current TX power in interface info
authorRafał Miłecki <zajec5@gmail.com>
Mon, 31 Aug 2015 20:59:38 +0000 (22:59 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 22 Sep 2015 13:21:27 +0000 (15:21 +0200)
Many drivers implement reading current TX power (using either cfg80211
or ieee80211 op) but userspace can't get it using nl80211. Right now the
only way to access it is to call some wext ioctl.
Let's put TX power in interface info reply (callback is wdev specific)
just like we do with current channel.
To be consistent (e.g. NL80211_CMD_SET_WIPHY) let's use mBm as na unit.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/nl80211.c

index a4e6c951950f71b67f0cc75c155576148c885e24..50cd7707040ce2ca3eb43277fd0f898b471a89da 100644 (file)
@@ -2404,6 +2404,16 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
                }
        }
 
+       if (rdev->ops->get_tx_power) {
+               int dbm, ret;
+
+               ret = rdev_get_tx_power(rdev, wdev, &dbm);
+               if (ret == 0 &&
+                   nla_put_u32(msg, NL80211_ATTR_WIPHY_TX_POWER_LEVEL,
+                               DBM_TO_MBM(dbm)))
+                       goto nla_put_failure;
+       }
+
        if (wdev->ssid_len) {
                if (nla_put(msg, NL80211_ATTR_SSID, wdev->ssid_len, wdev->ssid))
                        goto nla_put_failure;