nl80211: Add signal strength and bandwith to nl80211station info
Subsystems (2)
PATCH v14 1/1 nl80211: Add signal strength and bandwith to nl80211station info
This patch adds signal strength and transmission bitrate to the station_info of nl80211.
Signed-off-by Henning Rogge <[email protected]>
Acked-by Johannes Berg <[email protected]>
---
include/linux/nl80211.h +31 -0
@@ -425,6 +425,32 @@ enum nl80211_sta_flags { };/** +* enum nl80211_rate_info - bitrate information +* +* These attribute types are used with %NL80211_STA_INFO_TXRATE +* when getting information about the bitrate of a station. +* +* @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved +* @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s) +* @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8) +* @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 Mhz dualchannel bitrate +* @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval +* @NL80211_RATE_INFO_MAX: highest rate_info number currently defined +* @__NL80211_RATE_INFO_AFTER_LAST: internal use +*/ +enum nl80211_rate_info { + __NL80211_RATE_INFO_INVALID, +NL80211_RATE_INFO_BITRATE , +NL80211_RATE_INFO_MCS , +NL80211_RATE_INFO_40_MHZ_WIDTH , +NL80211_RATE_INFO_SHORT_GI , + +/* keep last */ + __NL80211_RATE_INFO_AFTER_LAST, +NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST -1 +}; + +/** * enum nl80211_sta_info - station information * * These attribute types are used with %NL80211_ATTR_STA_INFO
@@ -436,6 +462,9 @@ enum nl80211_sta_flags {* @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station) * @__NL80211_STA_INFO_AFTER_LAST: internal * @NL80211_STA_INFO_MAX: highest possible station info attribute +* @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) +* @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute +* containing info as possible, see &enum nl80211_sta_info_txrate. */ enum nl80211_sta_info { __NL80211_STA_INFO_INVALID,
@@ -445,6 +474,8 @@ enum nl80211_sta_info {NL80211_STA_INFO_LLID ,NL80211_STA_INFO_PLID ,NL80211_STA_INFO_PLINK_STATE , +NL80211_STA_INFO_SIGNAL , +NL80211_STA_INFO_TX_BITRATE ,/* keep last */ __NL80211_STA_INFO_AFTER_LAST,
include/net/cfg80211.h +40 -0
@@ -169,6 +169,9 @@ struct station_parameters {* @STATION_INFO_LLID: @llid filled * @STATION_INFO_PLID: @plid filled * @STATION_INFO_PLINK_STATE: @plink_state filled +* @STATION_INFO_SIGNAL: @signal filled +* @STATION_INFO_TX_BITRATE: @tx_bitrate fields are filled +* (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs) */ enum station_info_flags {STATION_INFO_INACTIVE_TIME =1 <<0 ,
@@ -177,6 +180,39 @@ enum station_info_flags {STATION_INFO_LLID =1 <<3 ,STATION_INFO_PLID =1 <<4 ,STATION_INFO_PLINK_STATE =1 <<5 , +STATION_INFO_SIGNAL =1 <<6 , + STATION_INFO_TX_BITRATE = 1<<7, +}; + +/** +* enum station_info_rate_flags - bitrate info flags +* +* Used by the driver to indicate the specific rate transmission +* type for 802.11n transmissions. +* +* @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled +* @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission +* @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval +*/ +enum rate_info_flags { +RATE_INFO_FLAGS_MCS =1 <<0 , +RATE_INFO_FLAGS_40_MHZ_WIDTH =1 <<1 , +RATE_INFO_FLAGS_SHORT_GI =1 <<2 , +}; + +/** +* struct rate_info - bitrate information +* +* Information about a receiving or transmitting bitrate +* +* @flags: bitflag of flags from &enum rate_info_flags +* @mcs: mcs index if struct describes a 802.11n bitrate +* @legacy: bitrate in 100kbit/s for 802.11abg +*/ +struct rate_info { +u8 flags; +u8 mcs; +u16 legacy; };/**
@@ -191,6 +227,8 @@ enum station_info_flags {* @llid: mesh local link id * @plid: mesh peer link id * @plink_state: mesh peer link state +* @signal: signal strength of last received packet in dBm +* @txrate: current unicast bitrate to this station */ struct station_info {u32 filled;
@@ -200,6 +238,8 @@ struct station_info {u16 llid;u16 plid;u8 plink_state; +s8 signal; +struct rate_info txrate; };/**
net/mac80211/cfg.c +24 -1
@@ -310,12 +310,35 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) sinfo->filled =STATION_INFO_INACTIVE_TIME |STATION_INFO_RX_BYTES | -STATION_INFO_TX_BYTES ; +STATION_INFO_TX_BYTES | +STATION_INFO_TX_BITRATE ; sinfo->inactive_time =jiffies_to_msecs (jiffies - sta->last_rx); sinfo->rx_bytes = sta->rx_bytes; sinfo->tx_bytes = sta->tx_bytes; +if (sta->local->hw.flags &IEEE80211_HW_SIGNAL_DBM ) { + sinfo->filled |=STATION_INFO_SIGNAL ; + sinfo->signal = (s8 )sta->last_signal; + } + + sinfo->txrate.flags =0 ; +if (sta->last_tx_rate.flags &IEEE80211_TX_RC_MCS ) + sinfo->txrate.flags |=RATE_INFO_FLAGS_MCS ; +if (sta->last_tx_rate.flags &IEEE80211_TX_RC_40_MHZ_WIDTH ) + sinfo->txrate.flags |=RATE_INFO_FLAGS_40_MHZ_WIDTH ; +if (sta->last_tx_rate.flags &IEEE80211_TX_RC_SHORT_GI ) + sinfo->txrate.flags |=RATE_INFO_FLAGS_SHORT_GI ; + +if (!(sta->last_tx_rate.flags &IEEE80211_TX_RC_MCS )) { +struct ieee80211_supported_band *sband; + sband = sta->local->hw.wiphy->bands[ + sta->local->hw.conf.channel->band]; + sinfo->txrate.legacy = + sband->bitrates[sta->last_tx_rate.idx].bitrate; + }else + sinfo->txrate.mcs = sta->last_tx_rate.idx; +if (ieee80211_vif_is_mesh (&sdata->vif)) {#ifdef CONFIG_MAC80211_MESH sinfo->filled |= STATION_INFO_LLID |
net/wireless/nl80211.c +57 -1
76 lines not on this page · raw message
Quoted 5 lines · Henning Rogge
This patch adds signal strength and transmission bitrate to the
station_infoof nl80211.Signed-off-by Henning Rogge <[email protected]>Acked-by Johannes Berg <[email protected]>
Much better, thanks.
John
Signature · 2 lines
John W. Linville Linux should be at the core [email protected] of your literate lifestyle.
Johannes Berg
maintainerQuoted 2 lines · Henning Rogge
This patch adds signal strength and transmission bitrate to the
station_infoof nl80211.
I've fixed and merged the corresponding patch to iw.
johannes