summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/524-mac80211_survey_channel_stats.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/524-mac80211_survey_channel_stats.patch')
-rw-r--r--package/mac80211/patches/524-mac80211_survey_channel_stats.patch105
1 files changed, 105 insertions, 0 deletions
diff --git a/package/mac80211/patches/524-mac80211_survey_channel_stats.patch b/package/mac80211/patches/524-mac80211_survey_channel_stats.patch
new file mode 100644
index 0000000000..b05484f769
--- /dev/null
+++ b/package/mac80211/patches/524-mac80211_survey_channel_stats.patch
@@ -0,0 +1,105 @@
+--- 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);
+