diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-10-09 00:36:54 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-10-09 00:36:54 +0000 |
commit | 51b8905a6966c96e1178b6ff0fde7b46f842eb31 (patch) | |
tree | 45ac651452b19d2a2c71210fe9c0c254f9db28e5 /package/mac80211/patches/524-mac80211_survey_channel_stats.patch | |
parent | 80a1b7ac3cda1da34a8934946b1cdf09169b730d (diff) |
ath9k: implement extended channel utilization statistics via survey
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23350 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/524-mac80211_survey_channel_stats.patch')
-rw-r--r-- | package/mac80211/patches/524-mac80211_survey_channel_stats.patch | 105 |
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 000000000..b05484f76 --- /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); + |