Linux-Wireless Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 1/2] wireless: Support assoc-at timer in sta-info
@ 2019-08-09 17:46 greearb
  2019-08-09 17:46 ` [PATCH 2/2] mac80211: add assoc-at support greearb
  0 siblings, 1 reply; 4+ messages in thread
From: greearb @ 2019-08-09 17:46 UTC (permalink / raw)
  To: linux-wireless; +Cc: johannes, Ben Greear

From: Ben Greear <greearb@candelatech.com>

Report time stamp of when sta became associated.

This is the boottime clock, units are nano-seconds.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---

This attempts to implement the associated-at timestamp reporting
with boottime stamp instead of wall-clock, as suggested.

 include/net/cfg80211.h       | 2 ++
 include/uapi/linux/nl80211.h | 2 ++
 net/wireless/nl80211.c       | 1 +
 3 files changed, 5 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index ef510c916635..19c200b917eb 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1306,6 +1306,7 @@ struct cfg80211_tid_stats {
  *	indicate the relevant values in this struct for them
  * @connected_time: time(in secs) since a station is last connected
  * @inactive_time: time since last station activity (tx/rx) in milliseconds
+ * @assoc_at: bootime (ns) of the last association
  * @rx_bytes: bytes (size of MPDUs) received from this station
  * @tx_bytes: bytes (size of MPDUs) transmitted to this station
  * @llid: mesh local link id
@@ -1366,6 +1367,7 @@ struct station_info {
 	u64 filled;
 	u32 connected_time;
 	u32 inactive_time;
+	u64 assoc_at;
 	u64 rx_bytes;
 	u64 tx_bytes;
 	u16 llid;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 76d5811193be..3796e1e06665 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3175,6 +3175,7 @@ enum nl80211_sta_bss_param {
  *	sent to the station (u64, usec)
  * @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16)
  * @NL80211_STA_INFO_AIRTIME_LINK_METRIC: airtime link metric for mesh station
+ * @NL80211_STA_INFO_ASSOC_AT_BOOTTIME: Timestamp of last association
  * @__NL80211_STA_INFO_AFTER_LAST: internal
  * @NL80211_STA_INFO_MAX: highest possible station info attribute
  */
@@ -3221,6 +3222,7 @@ enum nl80211_sta_info {
 	NL80211_STA_INFO_TX_DURATION,
 	NL80211_STA_INFO_AIRTIME_WEIGHT,
 	NL80211_STA_INFO_AIRTIME_LINK_METRIC,
+	NL80211_STA_INFO_ASSOC_AT_BOOTTIME,
 
 	/* keep last */
 	__NL80211_STA_INFO_AFTER_LAST,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 789cd98f02f5..b61a59b9d78b 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5028,6 +5028,7 @@ static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid,
 
 	PUT_SINFO(CONNECTED_TIME, connected_time, u32);
 	PUT_SINFO(INACTIVE_TIME, inactive_time, u32);
+	PUT_SINFO_U64(ASSOC_AT_BOOTTIME, assoc_at);
 
 	if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) |
 			     BIT_ULL(NL80211_STA_INFO_RX_BYTES64)) &&
-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] mac80211: add assoc-at support.
  2019-08-09 17:46 [PATCH 1/2] wireless: Support assoc-at timer in sta-info greearb
@ 2019-08-09 17:46 ` greearb
  2019-08-16  4:09   ` Sebastian Gottschall
  0 siblings, 1 reply; 4+ messages in thread
From: greearb @ 2019-08-09 17:46 UTC (permalink / raw)
  To: linux-wireless; +Cc: johannes, Ben Greear

From: Ben Greear <greearb@candelatech.com>

Report timestamp for when sta becomes associated.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
 net/mac80211/sta_info.c | 3 +++
 net/mac80211/sta_info.h | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index cd88c8872372..f0820f058b5f 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
 	case IEEE80211_STA_ASSOC:
 		if (sta->sta_state == IEEE80211_STA_AUTH) {
 			set_bit(WLAN_STA_ASSOC, &sta->_flags);
+			sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
 			ieee80211_recalc_min_chandef(sta->sdata);
 			if (!sta->sta.support_p2p_ps)
 				ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
@@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
 			 BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
 			 BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
 			 BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
+			 BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
 			 BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
 
 	if (sdata->vif.type == NL80211_IFTYPE_STATION) {
@@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
 	}
 
 	sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
+	sinfo->assoc_at_ms = sta->assoc_at_ms;
 	sinfo->inactive_time =
 		jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
 
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index bb02d5fac7ba..906b11acb0e8 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
  *	the station when it leaves powersave or polls for frames
  * @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
  * @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
+ * @assoc_at_ms: time (in ms) of last association
  * @last_connected: time (in seconds) when a station got connected
  * @last_seq_ctrl: last received seq/frag number from this STA (per TID
  *	plus one for non-QoS frames)
@@ -565,6 +566,7 @@ struct sta_info {
 	unsigned long driver_buffered_tids;
 	unsigned long txq_buffered_tids;
 
+	unsigned long assoc_at_ms;
 	long last_connected;
 
 	/* Updated from RX path only, no locking requirements */
-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] mac80211: add assoc-at support.
  2019-08-09 17:46 ` [PATCH 2/2] mac80211: add assoc-at support greearb
@ 2019-08-16  4:09   ` Sebastian Gottschall
  2019-08-16 13:04     ` Ben Greear
  0 siblings, 1 reply; 4+ messages in thread
From: Sebastian Gottschall @ 2019-08-16  4:09 UTC (permalink / raw)
  To: greearb, linux-wireless; +Cc: johannes

is this feature neccessary? we already have the information of the assoc 
duration time. so its easy to calculate the assoc timestamp using the 
current time without any patch
do i miss something here?

Am 09.08.2019 um 19:46 schrieb greearb@candelatech.com:
> From: Ben Greear <greearb@candelatech.com>
>
> Report timestamp for when sta becomes associated.
>
> Signed-off-by: Ben Greear <greearb@candelatech.com>
> ---
>   net/mac80211/sta_info.c | 3 +++
>   net/mac80211/sta_info.h | 2 ++
>   2 files changed, 5 insertions(+)
>
> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
> index cd88c8872372..f0820f058b5f 100644
> --- a/net/mac80211/sta_info.c
> +++ b/net/mac80211/sta_info.c
> @@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
>   	case IEEE80211_STA_ASSOC:
>   		if (sta->sta_state == IEEE80211_STA_AUTH) {
>   			set_bit(WLAN_STA_ASSOC, &sta->_flags);
> +			sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
>   			ieee80211_recalc_min_chandef(sta->sdata);
>   			if (!sta->sta.support_p2p_ps)
>   				ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
> @@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
>   			 BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
>   			 BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
>   			 BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
> +			 BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
>   			 BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
>   
>   	if (sdata->vif.type == NL80211_IFTYPE_STATION) {
> @@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
>   	}
>   
>   	sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
> +	sinfo->assoc_at_ms = sta->assoc_at_ms;
>   	sinfo->inactive_time =
>   		jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
>   
> diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
> index bb02d5fac7ba..906b11acb0e8 100644
> --- a/net/mac80211/sta_info.h
> +++ b/net/mac80211/sta_info.h
> @@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
>    *	the station when it leaves powersave or polls for frames
>    * @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
>    * @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
> + * @assoc_at_ms: time (in ms) of last association
>    * @last_connected: time (in seconds) when a station got connected
>    * @last_seq_ctrl: last received seq/frag number from this STA (per TID
>    *	plus one for non-QoS frames)
> @@ -565,6 +566,7 @@ struct sta_info {
>   	unsigned long driver_buffered_tids;
>   	unsigned long txq_buffered_tids;
>   
> +	unsigned long assoc_at_ms;
>   	long last_connected;
>   
>   	/* Updated from RX path only, no locking requirements */

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] mac80211: add assoc-at support.
  2019-08-16  4:09   ` Sebastian Gottschall
@ 2019-08-16 13:04     ` Ben Greear
  0 siblings, 0 replies; 4+ messages in thread
From: Ben Greear @ 2019-08-16 13:04 UTC (permalink / raw)
  To: Sebastian Gottschall, linux-wireless; +Cc: johannes


On 08/15/2019 09:09 PM, Sebastian Gottschall wrote:
> is this feature neccessary? we already have the information of the assoc duration time. so its easy to calculate the assoc timestamp using the current time without any patch
> do i miss something here?

The current reported timer is 1-sec resolution, and I need better precision so I can
know exactly how long a station was off the air while trying to roam, for instance.

Thanks,
Ben

>
> Am 09.08.2019 um 19:46 schrieb greearb@candelatech.com:
>> From: Ben Greear <greearb@candelatech.com>
>>
>> Report timestamp for when sta becomes associated.
>>
>> Signed-off-by: Ben Greear <greearb@candelatech.com>
>> ---
>>   net/mac80211/sta_info.c | 3 +++
>>   net/mac80211/sta_info.h | 2 ++
>>   2 files changed, 5 insertions(+)
>>
>> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
>> index cd88c8872372..f0820f058b5f 100644
>> --- a/net/mac80211/sta_info.c
>> +++ b/net/mac80211/sta_info.c
>> @@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
>>       case IEEE80211_STA_ASSOC:
>>           if (sta->sta_state == IEEE80211_STA_AUTH) {
>>               set_bit(WLAN_STA_ASSOC, &sta->_flags);
>> +            sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
>>               ieee80211_recalc_min_chandef(sta->sdata);
>>               if (!sta->sta.support_p2p_ps)
>>                   ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
>> @@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
>>                BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
>>                BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
>>                BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
>> +             BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
>>                BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
>>         if (sdata->vif.type == NL80211_IFTYPE_STATION) {
>> @@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
>>       }
>>         sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
>> +    sinfo->assoc_at_ms = sta->assoc_at_ms;
>>       sinfo->inactive_time =
>>           jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
>>   diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
>> index bb02d5fac7ba..906b11acb0e8 100644
>> --- a/net/mac80211/sta_info.h
>> +++ b/net/mac80211/sta_info.h
>> @@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
>>    *    the station when it leaves powersave or polls for frames
>>    * @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
>>    * @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
>> + * @assoc_at_ms: time (in ms) of last association
>>    * @last_connected: time (in seconds) when a station got connected
>>    * @last_seq_ctrl: last received seq/frag number from this STA (per TID
>>    *    plus one for non-QoS frames)
>> @@ -565,6 +566,7 @@ struct sta_info {
>>       unsigned long driver_buffered_tids;
>>       unsigned long txq_buffered_tids;
>>   +    unsigned long assoc_at_ms;
>>       long last_connected;
>>         /* Updated from RX path only, no locking requirements */
>

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-09 17:46 [PATCH 1/2] wireless: Support assoc-at timer in sta-info greearb
2019-08-09 17:46 ` [PATCH 2/2] mac80211: add assoc-at support greearb
2019-08-16  4:09   ` Sebastian Gottschall
2019-08-16 13:04     ` Ben Greear

Linux-Wireless Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-wireless/0 linux-wireless/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-wireless linux-wireless/ https://lore.kernel.org/linux-wireless \
		linux-wireless@vger.kernel.org linux-wireless@archiver.kernel.org
	public-inbox-index linux-wireless


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-wireless


AGPL code for this site: git clone https://public-inbox.org/ public-inbox