nl80211: Report max TX power in NL80211_BAND_ATTR_FREQS
PATCH 1/1 nl80211: Report max TX power in NL80211_BAND_ATTR_FREQS
This is useful information to provide for userspace (e.g., hostapd needs this to generate Country IE).
include/linux/nl80211.h +4 -0
@@ -508,6 +508,7 @@* on this channel in current regulatory domain. * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory * on this channel in current regulatory domain. +* @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in dBm. */ enum nl80211_frequency_attr { __NL80211_FREQUENCY_ATTR_INVALID,
@@ -516,12 +517,15 @@NL80211_FREQUENCY_ATTR_PASSIVE_SCAN ,NL80211_FREQUENCY_ATTR_NO_IBSS ,NL80211_FREQUENCY_ATTR_RADAR , +NL80211_FREQUENCY_ATTR_MAX_TX_POWER ,/* keep last */ __NL80211_FREQUENCY_ATTR_AFTER_LAST, NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1 }; +#define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER +/** * enum nl80211_bitrate_attr - bitrate attributes * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps
net/wireless/nl80211.c +3 -0
@@ -198,6 +198,9 @@if (chan->flags &IEEE80211_CHAN_RADAR )NLA_PUT_FLAG (msg,NL80211_FREQUENCY_ATTR_RADAR ); +NLA_PUT_U8 (msg,NL80211_FREQUENCY_ATTR_MAX_TX_POWER , + chan->max_power); +nla_nest_end (msg, nl_freq); }
Signature · 1 line
Jouni Malinen PGP id EFC895FA
Johannes Berg
maintainernet/wireless/nl80211.c line 203
Quoted 4 lines · Jouni Malinen
net/wireless/nl80211.c +3
-0+NLA_PUT_U8 (msg,NL80211_FREQUENCY_ATTR_MAX_TX_POWER , + chan->max_power); +
I think for consistency we should use the same format that the regulatory stuff has for NL80211_ATTR_POWER_RULE_MAX_EIRP, i.e. a u32 value with mBm (I think)
johannes
Quoted 9 lines · Johannes Berg
net/wireless/nl80211.c line 203
Quoted 4 lines · Jouni Malinen
net/wireless/nl80211.c +3
-0+NLA_PUT_U8 (msg,NL80211_FREQUENCY_ATTR_MAX_TX_POWER , + chan->max_power); +I think for consistency we should use the same format that the regulatory stuff has for
NL80211_ATTR_POWER_RULE_MAX_EIRP, i.e. a u32 value with mBm (I think)
Well.. Maximum TX power is stored as dBm and it is used as dBm in Country IE. Some of the current uses of EIRP seem to be converting the values between dBm and mBm, so it does not look like the extra accuracy would be needed there. Why was mBm used in the first place? It does not seem to be used anywhere outside Linux regulatory code as a standard unit which makes it quite a bit less obvious than dBm..
I kind of agree with consistency being a good reason for a change here, but I just find the mBm a bit odd choice as a unit unless there is need for greater accuracy than 1 dBm (and in that case, the chan->max_power value should likely be changed to use mBm, too).
Signature · 1 line
Jouni Malinen PGP id EFC895FA
Johannes Berg
maintainerQuoted 6 lines · Jouni Malinen
Well.. Maximum TX power is stored as dBm and it is used as dBm in Country IE. Some of the current uses of EIRP seem to be converting the values between dBm and mBm, so it does not look like the extra accuracy would be needed there. Why was mBm used in the first place? It does not seem to be used anywhere outside Linux regulatory code as a standard unit which makes it quite a bit less obvious than dBm..
Yeah, true, I think we originally wanted it in the regulatory code and also push it throughout but then ended up converting it in the kernel. However, the userspace API is defined with the extra accuracy.
Quoted 3 lines
I kind of agree with consistency being a good reason for a change here, but I just find the mBm a bit odd choice as a unit unless there is need for greater accuracy than 1 dBm
Broadcom hw at least supports 1/4 dBm steps, iirc. So it could at least make some sense.
Quoted 2 lines
(and in that case, the
chan->max_power
value should likely be changed to use mBm, too).
True, but that's in the kernel and much easier to change later than userspace APIs.
johannes