mac80211: add patch to include local BSS rx time in survey information
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry-picked from commit 6a3739dc42)
			
			
This commit is contained in:
		| @@ -0,0 +1,77 @@ | |||||||
|  | From: Felix Fietkau <nbd@nbd.name> | ||||||
|  | Date: Wed, 28 Aug 2019 12:13:55 +0200 | ||||||
|  | Subject: [PATCH] cfg80211: add local BSS receive time to survey information | ||||||
|  |  | ||||||
|  | This is useful for checking how much airtime is being used up by other | ||||||
|  | transmissions on the channel, e.g. by calculating (time_rx - time_bss_rx) | ||||||
|  | or (time_busy - time_bss_rx - time_tx) | ||||||
|  |  | ||||||
|  | Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/include/net/cfg80211.h | ||||||
|  | +++ b/include/net/cfg80211.h | ||||||
|  | @@ -668,6 +668,7 @@ ieee80211_chandef_max_power(struct cfg80 | ||||||
|  |   * @SURVEY_INFO_TIME_RX: receive time was filled in | ||||||
|  |   * @SURVEY_INFO_TIME_TX: transmit time was filled in | ||||||
|  |   * @SURVEY_INFO_TIME_SCAN: scan time was filled in | ||||||
|  | + * @SURVEY_INFO_TIME_BSS_RX: local BSS receive time was filled in | ||||||
|  |   * | ||||||
|  |   * Used by the driver to indicate which info in &struct survey_info | ||||||
|  |   * it has filled in during the get_survey(). | ||||||
|  | @@ -681,6 +682,7 @@ enum survey_info_flags { | ||||||
|  |  	SURVEY_INFO_TIME_RX		= BIT(5), | ||||||
|  |  	SURVEY_INFO_TIME_TX		= BIT(6), | ||||||
|  |  	SURVEY_INFO_TIME_SCAN		= BIT(7), | ||||||
|  | +	SURVEY_INFO_TIME_BSS_RX		= BIT(8), | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | @@ -697,6 +699,7 @@ enum survey_info_flags { | ||||||
|  |   * @time_rx: amount of time the radio spent receiving data | ||||||
|  |   * @time_tx: amount of time the radio spent transmitting data | ||||||
|  |   * @time_scan: amount of time the radio spent for scanning | ||||||
|  | + * @time_bss_rx: amount of time the radio spent receiving data on a local BSS | ||||||
|  |   * | ||||||
|  |   * Used by dump_survey() to report back per-channel survey information. | ||||||
|  |   * | ||||||
|  | @@ -711,6 +714,7 @@ struct survey_info { | ||||||
|  |  	u64 time_rx; | ||||||
|  |  	u64 time_tx; | ||||||
|  |  	u64 time_scan; | ||||||
|  | +	u64 time_bss_rx; | ||||||
|  |  	u32 filled; | ||||||
|  |  	s8 noise; | ||||||
|  |  }; | ||||||
|  | --- a/include/uapi/linux/nl80211.h | ||||||
|  | +++ b/include/uapi/linux/nl80211.h | ||||||
|  | @@ -3693,6 +3693,8 @@ enum nl80211_user_reg_hint_type { | ||||||
|  |   * @NL80211_SURVEY_INFO_TIME_SCAN: time the radio spent for scan | ||||||
|  |   *	(on this channel or globally) | ||||||
|  |   * @NL80211_SURVEY_INFO_PAD: attribute used for padding for 64-bit alignment | ||||||
|  | + * @NL80211_SURVEY_INFO_TIME_BSS_RX: amount of time the radio spent | ||||||
|  | + *	receiving local BSS data | ||||||
|  |   * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number | ||||||
|  |   *	currently defined | ||||||
|  |   * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use | ||||||
|  | @@ -3709,6 +3711,7 @@ enum nl80211_survey_info { | ||||||
|  |  	NL80211_SURVEY_INFO_TIME_TX, | ||||||
|  |  	NL80211_SURVEY_INFO_TIME_SCAN, | ||||||
|  |  	NL80211_SURVEY_INFO_PAD, | ||||||
|  | +	NL80211_SURVEY_INFO_TIME_BSS_RX, | ||||||
|  |   | ||||||
|  |  	/* keep last */ | ||||||
|  |  	__NL80211_SURVEY_INFO_AFTER_LAST, | ||||||
|  | --- a/net/wireless/nl80211.c | ||||||
|  | +++ b/net/wireless/nl80211.c | ||||||
|  | @@ -8367,6 +8367,10 @@ static int nl80211_send_survey(struct sk | ||||||
|  |  	    nla_put_u64_64bit(msg, NL80211_SURVEY_INFO_TIME_SCAN, | ||||||
|  |  			      survey->time_scan, NL80211_SURVEY_INFO_PAD)) | ||||||
|  |  		goto nla_put_failure; | ||||||
|  | +	if ((survey->filled & SURVEY_INFO_TIME_BSS_RX) && | ||||||
|  | +	    nla_put_u64_64bit(msg, NL80211_SURVEY_INFO_TIME_BSS_RX, | ||||||
|  | +			      survey->time_bss_rx, NL80211_SURVEY_INFO_PAD)) | ||||||
|  | +		goto nla_put_failure; | ||||||
|  |   | ||||||
|  |  	nla_nest_end(msg, infoattr); | ||||||
|  |   | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/include/net/cfg80211.h | --- a/include/net/cfg80211.h | ||||||
| +++ b/include/net/cfg80211.h | +++ b/include/net/cfg80211.h | ||||||
| @@ -2968,6 +2968,7 @@ struct cfg80211_external_auth_params { | @@ -2972,6 +2972,7 @@ struct cfg80211_external_auth_params { | ||||||
|   *	(as advertised by the nl80211 feature flag.) |   *	(as advertised by the nl80211 feature flag.) | ||||||
|   * @get_tx_power: store the current TX power into the dbm variable; |   * @get_tx_power: store the current TX power into the dbm variable; | ||||||
|   *	return 0 if successful |   *	return 0 if successful | ||||||
| @@ -8,7 +8,7 @@ | |||||||
|   * |   * | ||||||
|   * @set_wds_peer: set the WDS peer for a WDS interface |   * @set_wds_peer: set the WDS peer for a WDS interface | ||||||
|   * |   * | ||||||
| @@ -3268,6 +3269,7 @@ struct cfg80211_ops { | @@ -3272,6 +3273,7 @@ struct cfg80211_ops { | ||||||
|  				enum nl80211_tx_power_setting type, int mbm); |  				enum nl80211_tx_power_setting type, int mbm); | ||||||
|  	int	(*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, |  	int	(*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, | ||||||
|  				int *dbm); |  				int *dbm); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau