mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
106 lines
4.2 KiB
Diff
106 lines
4.2 KiB
Diff
|
--- a/include/linux/nl80211.h
|
||
|
+++ b/include/linux/nl80211.h
|
||
|
@@ -1413,6 +1413,16 @@ enum nl80211_reg_rule_flags {
|
||
|
* @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel
|
||
|
* @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm)
|
||
|
* @NL80211_SURVEY_INFO_IN_USE: channel is currently being used
|
||
|
+ * @NL80211_SURVEY_INFO_CHANNEL_TIME: amount of time (in ms) that the radio
|
||
|
+ * spent on this channel
|
||
|
+ * @NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY: amount of the time the primary
|
||
|
+ * channel was sensed busy (either due to activity or energy detect)
|
||
|
+ * @NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: amount of time the extension
|
||
|
+ * channel was sensed busy
|
||
|
+ * @NL80211_SURVEY_INFO_CHANNEL_TIME_RX: amount of time the radio spent
|
||
|
+ * receiving data
|
||
|
+ * @NL80211_SURVEY_INFO_CHANNEL_TIME_TX: amount of time the radio spent
|
||
|
+ * transmitting data
|
||
|
* @NL80211_SURVEY_INFO_MAX: highest survey info attribute number
|
||
|
* currently defined
|
||
|
* @__NL80211_SURVEY_INFO_AFTER_LAST: internal use
|
||
|
@@ -1422,6 +1432,11 @@ enum nl80211_survey_info {
|
||
|
NL80211_SURVEY_INFO_FREQUENCY,
|
||
|
NL80211_SURVEY_INFO_NOISE,
|
||
|
NL80211_SURVEY_INFO_IN_USE,
|
||
|
+ NL80211_SURVEY_INFO_CHANNEL_TIME,
|
||
|
+ NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY,
|
||
|
+ NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY,
|
||
|
+ NL80211_SURVEY_INFO_CHANNEL_TIME_RX,
|
||
|
+ NL80211_SURVEY_INFO_CHANNEL_TIME_TX,
|
||
|
|
||
|
/* keep last */
|
||
|
__NL80211_SURVEY_INFO_AFTER_LAST,
|
||
|
--- a/include/net/cfg80211.h
|
||
|
+++ b/include/net/cfg80211.h
|
||
|
@@ -295,6 +295,11 @@ struct key_params {
|
||
|
*
|
||
|
* @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in
|
||
|
* @SURVEY_INFO_IN_USE: channel is currently being used
|
||
|
+ * @SURVEY_INFO_CHANNEL_TIME: channel active time (in ms) was filled in
|
||
|
+ * @SURVEY_INFO_CHANNEL_TIME_BUSY: channel busy time was filled in
|
||
|
+ * @SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: extension channel busy time was filled in
|
||
|
+ * @SURVEY_INFO_CHANNEL_TIME_RX: channel receive time was filled in
|
||
|
+ * @SURVEY_INFO_CHANNEL_TIME_TX: channel transmit time was filled in
|
||
|
*
|
||
|
* Used by the driver to indicate which info in &struct survey_info
|
||
|
* it has filled in during the get_survey().
|
||
|
@@ -302,6 +307,11 @@ struct key_params {
|
||
|
enum survey_info_flags {
|
||
|
SURVEY_INFO_NOISE_DBM = 1<<0,
|
||
|
SURVEY_INFO_IN_USE = 1<<1,
|
||
|
+ SURVEY_INFO_CHANNEL_TIME = 1<<2,
|
||
|
+ SURVEY_INFO_CHANNEL_TIME_BUSY = 1<<3,
|
||
|
+ SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 1<<4,
|
||
|
+ SURVEY_INFO_CHANNEL_TIME_RX = 1<<5,
|
||
|
+ SURVEY_INFO_CHANNEL_TIME_TX = 1<<6,
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
@@ -311,6 +321,11 @@ enum survey_info_flags {
|
||
|
* @filled: bitflag of flags from &enum survey_info_flags
|
||
|
* @noise: channel noise in dBm. This and all following fields are
|
||
|
* optional
|
||
|
+ * @channel_time: amount of time in ms the radio spent on the channel
|
||
|
+ * @channel_time_busy: amount of time the primary channel was sensed busy
|
||
|
+ * @channel_time_ext_busy: amount of time the extension channel was sensed busy
|
||
|
+ * @channel_time_rx: amount of time the radio spent receiving data
|
||
|
+ * @channel_time_tx: amount of time the radio spent transmitting data
|
||
|
*
|
||
|
* Used by dump_survey() to report back per-channel survey information.
|
||
|
*
|
||
|
@@ -319,6 +334,11 @@ enum survey_info_flags {
|
||
|
*/
|
||
|
struct survey_info {
|
||
|
struct ieee80211_channel *channel;
|
||
|
+ u64 channel_time;
|
||
|
+ u64 channel_time_busy;
|
||
|
+ u64 channel_time_ext_busy;
|
||
|
+ u64 channel_time_rx;
|
||
|
+ u64 channel_time_tx;
|
||
|
u32 filled;
|
||
|
s8 noise;
|
||
|
};
|
||
|
--- a/net/wireless/nl80211.c
|
||
|
+++ b/net/wireless/nl80211.c
|
||
|
@@ -3176,6 +3176,21 @@ static int nl80211_send_survey(struct sk
|
||
|
survey->noise);
|
||
|
if (survey->filled & SURVEY_INFO_IN_USE)
|
||
|
NLA_PUT_FLAG(msg, NL80211_SURVEY_INFO_IN_USE);
|
||
|
+ if (survey->filled & SURVEY_INFO_CHANNEL_TIME)
|
||
|
+ NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME,
|
||
|
+ survey->channel_time);
|
||
|
+ if (survey->filled & SURVEY_INFO_CHANNEL_TIME_BUSY)
|
||
|
+ NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY,
|
||
|
+ survey->channel_time_busy);
|
||
|
+ if (survey->filled & SURVEY_INFO_CHANNEL_TIME_EXT_BUSY)
|
||
|
+ NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY,
|
||
|
+ survey->channel_time_ext_busy);
|
||
|
+ if (survey->filled & SURVEY_INFO_CHANNEL_TIME_RX)
|
||
|
+ NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_RX,
|
||
|
+ survey->channel_time_rx);
|
||
|
+ if (survey->filled & SURVEY_INFO_CHANNEL_TIME_TX)
|
||
|
+ NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_TX,
|
||
|
+ survey->channel_time_tx);
|
||
|
|
||
|
nla_nest_end(msg, infoattr);
|
||
|
|